diff --git a/.github/workflows/_build.yml b/.github/workflows/_build.yml
index 602dadcd7..ca3f20235 100644
--- a/.github/workflows/_build.yml
+++ b/.github/workflows/_build.yml
@@ -33,6 +33,21 @@ on:
type: string
default: ''
description: 'Shell command to install native dependencies (e.g. apt-get for GTK4)'
+ xcode-version:
+ required: false
+ type: string
+ default: ''
+ description: 'Xcode version to select on macOS (e.g. "26.0.1"). Empty uses runner default.'
+ pre-build-artifact:
+ required: false
+ type: string
+ default: ''
+ description: 'Artifact name to download into artifacts/bin/ before building. Used to inject pre-built native artifacts (e.g. Apple .resources.zip) from a prior job.'
+ android-project:
+ required: false
+ type: string
+ default: 'src/DevFlow/Microsoft.Maui.DevFlow.Agent/Microsoft.Maui.DevFlow.Agent.csproj'
+ description: 'Project path for InstallAndroidDependencies target. Must target net10.0-android.'
env:
CI_PACKAGE_VERSION_SUFFIX: ci.${{ github.run_number }}.${{ github.run_attempt }}
@@ -46,6 +61,17 @@ jobs:
steps:
- uses: actions/checkout@v6
+ - name: Download pre-build artifact
+ if: inputs.pre-build-artifact != ''
+ uses: actions/download-artifact@v8
+ with:
+ name: ${{ inputs.pre-build-artifact }}
+ path: artifacts/bin
+
+ - name: Select Xcode
+ if: inputs.xcode-version != '' && runner.os == 'macOS'
+ run: sudo xcode-select -s /Applications/Xcode_${{ inputs.xcode-version }}.app/Contents/Developer
+
- name: Setup .NET
uses: actions/setup-dotnet@v5
with:
@@ -61,12 +87,12 @@ jobs:
- name: Install Android SDK dependencies (Windows)
if: inputs.install-workloads && matrix.os == 'windows-latest'
- run: dotnet build -t:InstallAndroidDependencies -f net10.0-android -p:AndroidSdkDirectory="%ANDROID_HOME%" -p:AcceptAndroidSDKLicenses=true src\DevFlow\Microsoft.Maui.DevFlow.Agent\Microsoft.Maui.DevFlow.Agent.csproj
+ run: dotnet build -t:InstallAndroidDependencies -f net10.0-android -p:AndroidSdkDirectory="%ANDROID_HOME%" -p:AcceptAndroidSDKLicenses=true ${{ inputs.android-project }}
shell: cmd
- name: Install Android SDK dependencies (macOS)
if: inputs.install-workloads && matrix.os == 'macos-latest'
- run: dotnet build -t:InstallAndroidDependencies -f net10.0-android -p:AndroidSdkDirectory="$ANDROID_HOME" -p:AcceptAndroidSDKLicenses=true src/DevFlow/Microsoft.Maui.DevFlow.Agent/Microsoft.Maui.DevFlow.Agent.csproj
+ run: dotnet build -t:InstallAndroidDependencies -f net10.0-android -p:AndroidSdkDirectory="$ANDROID_HOME" -p:AcceptAndroidSDKLicenses=true ${{ inputs.android-project }}
- name: Build, Test and Pack (Windows)
if: matrix.os == 'windows-latest'
@@ -192,3 +218,11 @@ jobs:
name: packages-${{ inputs.project-name }}-${{ matrix.os }}
path: artifacts/packages/**/*.nupkg
if-no-files-found: error
+
+ - name: Upload native Apple artifacts
+ if: inputs.pack && runner.os == 'macOS'
+ uses: actions/upload-artifact@v7
+ with:
+ name: native-apple-${{ inputs.project-name }}
+ path: artifacts/bin/**/Release/**/*.resources.zip
+ if-no-files-found: ignore
diff --git a/.github/workflows/ci-essentialsai.yml b/.github/workflows/ci-essentialsai.yml
new file mode 100644
index 000000000..307a0710d
--- /dev/null
+++ b/.github/workflows/ci-essentialsai.yml
@@ -0,0 +1,56 @@
+name: CI - EssentialsAI
+
+on:
+ push:
+ branches: [main]
+ paths:
+ - 'src/AI/**'
+ - 'tests/AI/**'
+ - 'samples/EssentialsAISample/**'
+ - 'eng/**'
+ - 'Directory.Build.props'
+ - 'Directory.Build.targets'
+ - 'Directory.Packages.props'
+ - 'global.json'
+ - 'NuGet.config'
+ pull_request:
+ types: [opened, synchronize, reopened, edited]
+ branches: [main]
+ paths:
+ - 'src/AI/**'
+ - 'tests/AI/**'
+ - 'samples/EssentialsAISample/**'
+ - 'eng/**'
+ - 'Directory.Build.props'
+ - 'Directory.Build.targets'
+ - 'Directory.Packages.props'
+ - 'global.json'
+ - 'NuGet.config'
+
+jobs:
+ # Step 1: Build on macOS — compiles Swift xcframeworks, produces .resources.zip,
+ # and uploads them as native-apple-essentialsai artifact via _build.yml.
+ build-macos:
+ uses: ./.github/workflows/_build.yml
+ with:
+ project-path: src/AI/EssentialsAI.slnf
+ project-name: essentialsai
+ os: '["macos-latest"]'
+ run-tests: true
+ pack: true
+ xcode-version: '26.3'
+ android-project: src/AI/Microsoft.Maui.Essentials.AI/Microsoft.Maui.Essentials.AI.csproj
+
+ # Step 2: Build on Windows — downloads native .resources.zip from macOS build
+ # via pre-build-artifact so AppleBindings.targets includes them during pack.
+ build-windows:
+ needs: build-macos
+ uses: ./.github/workflows/_build.yml
+ with:
+ project-path: src/AI/EssentialsAI.slnf
+ project-name: essentialsai
+ os: '["windows-latest"]'
+ run-tests: true
+ pack: true
+ pre-build-artifact: native-apple-essentialsai
+ android-project: src/AI/Microsoft.Maui.Essentials.AI/Microsoft.Maui.Essentials.AI.csproj
diff --git a/.gitignore b/.gitignore
index 32cf69640..6bd718949 100644
--- a/.gitignore
+++ b/.gitignore
@@ -14,6 +14,7 @@
*.userosscache
*.sln.docstates
*.env
+*.lscache
# User-specific files (MonoDevelop/Xamarin Studio)
*.userprefs
diff --git a/Directory.Build.props b/Directory.Build.props
index 6c45a0797..994a2a147 100644
--- a/Directory.Build.props
+++ b/Directory.Build.props
@@ -11,6 +11,8 @@
https://github.com/dotnet/maui-labs
https://github.com/dotnet/maui-labs
false
+
+ true
$(NoWarn);NU1507
embedded
diff --git a/Directory.Packages.props b/Directory.Packages.props
index fd82bc306..6f9abb3ba 100644
--- a/Directory.Packages.props
+++ b/Directory.Packages.props
@@ -10,14 +10,19 @@
+
+
+
+
+
@@ -55,10 +60,38 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/MauiLabs.slnx b/MauiLabs.slnx
index bd3e2edcd..ba7f800cd 100644
--- a/MauiLabs.slnx
+++ b/MauiLabs.slnx
@@ -11,8 +11,12 @@
+
+
+
+
@@ -41,5 +45,10 @@
+
+
+
+
+
diff --git a/NuGet.config b/NuGet.config
index 35a81656f..59a6a1e57 100644
--- a/NuGet.config
+++ b/NuGet.config
@@ -14,6 +14,7 @@
+
diff --git a/docs/ai/json-stream-chunker-design.md b/docs/ai/json-stream-chunker-design.md
new file mode 100644
index 000000000..3f553f9f3
--- /dev/null
+++ b/docs/ai/json-stream-chunker-design.md
@@ -0,0 +1,1227 @@
+# JSON Stream Chunker - Complete Design Document
+
+## Problem Statement
+
+We have an AI model that receives progressive JSON internally but outputs complete, valid JSON objects each time. The property order may vary between chunks. We need to convert these complete JSON objects back into streaming chunks that, when concatenated, produce valid JSON matching the final output.
+
+**Input**: JSONL file where each line is a complete JSON object representing progressive construction
+**Output**: Chunks that when concatenated produce valid JSON structurally equivalent to the final line
+
+### Real-World Example (from serengeti-itinerary-1.jsonl)
+
+```
+Line 1: {"days": [{"subtitle": "Day"}]}
+Line 2: {"days": [{"subtitle": "Day 1: Arrival and Wildlife Safari", "activities": []}]}
+Line 3: {"days": [{"subtitle": "Day 1: Arrival and Wildlife Safari", "activities": [{"title": "", "type": "Sightseeing"}]}]}
+Line 4: {"days": [{"activities": [{"type": "Sightseeing", "description": "Embark", "title": "Morning Game Drive"}], "subtitle": "Day 1: Arrival and Wildlife Safari"}]}
+...
+```
+
+**Observations from real data:**
+1. Property order changes between chunks (subtitle moves around)
+2. Strings grow progressively ("Day" → "Day 1: Arrival and Wildlife Safari")
+3. Empty strings `""` appear and then grow ("title": "" → "title": "Morning Game Drive")
+4. Arrays grow (activities: [] → activities: [{...}])
+5. New properties appear (description appears in line 4)
+6. Only ONE string changes per chunk (confirmed by data analysis)
+
+## Key Constraints
+
+1. **Must stream output** - Cannot wait until the end to emit
+2. **1-2 chunk delay OK** - For disambiguation when multiple growable items appear
+3. **Property order varies** - Must track by path, not position
+4. **Objects only grow** - Properties never removed, values only get longer/deeper
+5. **Only one value changes per chunk** - Confirmed by analysis of all test data
+
+## API Design
+
+### Class Signature
+
+```csharp
+namespace Microsoft.Maui.Essentials.AI;
+
+///
+/// Converts complete JSON objects (from progressive AI output) back into streaming chunks.
+///
+public class JsonStreamChunker
+{
+ ///
+ /// Process one complete JSON object and return a streaming chunk.
+ /// May return empty string (data pending) or a chunk to emit.
+ ///
+ /// A complete, valid JSON object representing the current state.
+ /// A chunk to emit, or empty string if data is pending.
+ public string Process(string completeJson);
+
+ ///
+ /// Finalize processing and return any remaining output.
+ /// Call this after all input has been processed.
+ ///
+ /// Final chunk including closing brackets and any pending strings.
+ public string Flush();
+}
+```
+
+### Usage Pattern
+
+```csharp
+// Consuming an async stream from an AI model
+public async IAsyncEnumerable ConvertToChunks(IAsyncEnumerable completeJsonStream)
+{
+ var chunker = new JsonStreamChunker();
+
+ await foreach (var completeJson in completeJsonStream)
+ {
+ var chunk = chunker.Process(completeJson);
+ if (!string.IsNullOrEmpty(chunk))
+ {
+ yield return chunk;
+ }
+ }
+
+ var finalChunk = chunker.Flush();
+ if (!string.IsNullOrEmpty(finalChunk))
+ {
+ yield return finalChunk;
+ }
+}
+
+// Result: Concatenating all yielded chunks produces valid JSON
+// equivalent to the final input object
+```
+
+### Behavior Contract
+
+1. **Process()** returns a chunk that should be emitted immediately
+2. **Process()** may return empty string if data is ambiguous (pending resolution)
+3. **Flush()** must be called after all input to close any open structures
+4. Concatenating all non-empty chunks from all Process() + Flush() calls produces valid JSON
+5. The output JSON is structurally equivalent to the final input JSON (property order may differ)
+
+---
+
+## Data Analysis Findings
+
+Analysis of all 4 test JSONL files revealed:
+
+| Pattern | Frequency | Notes |
+|---------|-----------|-------|
+| String grows | ~40-50 per file | Most common change type |
+| New string appears | ~39 per file | Often 1 at a time |
+| 2 new growable items at once | 0-4 per file | Requires pending list |
+| Multiple values change | 0 | Never happens - confirms assumption |
+| Empty array `[]` | Occasional | Gets populated in later chunk |
+| Empty object `{}` | Occasional | Gets populated in later chunk |
+| Non-string primitives | 0 in test data | All values are strings in these examples |
+
+**Key insight**: The "only one value changes per chunk" assumption holds in all test data (where values include strings, arrays, and objects).
+
+---
+
+## Core Rules
+
+### Rule 1: Sibling Rule
+If a new property appears at the same level as the open string, the open string is complete.
+*The AI moved on horizontally.*
+
+**Example:**
+```
+Previous: {"name": "Mat"}
+Current: {"name": "Matthew", "age": 30}
+
+"age" is a NEW sibling at same level as "name"
+→ "name" is COMPLETE (emit extension "thew", then close)
+→ Then emit the new sibling
+```
+
+### Rule 2: Parent-Level Rule
+If new content appears at a higher level (e.g., new array item in parent), the current container and its open string are complete.
+*The AI moved on vertically.*
+
+**Example:**
+```
+Previous: {"days": [{"title": "Day 1"}]}
+Current: {"days": [{"title": "Day 1"}, {"title": "Day 2"}]}
+
+days[1] appeared at parent level (days array)
+→ days[0] and everything inside it is COMPLETE
+→ Close days[0], then emit new array item
+```
+
+### Rule 3: Unchanged Rule
+If the open string's value is unchanged from the previous chunk, it is complete.
+
+**Example:**
+```
+Previous: {"name": "Matthew"}
+Current: {"name": "Matthew", "age": 30}
+
+"name" value unchanged
+→ "name" is COMPLETE
+(Note: Sibling rule would also apply here)
+```
+
+### Rule 4: Pending Rule
+If 2+ new **growable** items appear at the same parent level in the same chunk, add them to pending and wait for the next chunk to see which one changes.
+
+**Growable types:**
+- Strings: Can grow (characters appended)
+- Arrays: Can grow (items added)
+- Objects: Can grow (properties added)
+
+Numbers, bools, and null are NOT growable - they are always complete.
+
+**Example 1 - Multiple strings:**
+```
+Previous: {"count": 5}
+Current: {"count": 5, "a": "Hello", "b": "World"}
+
+2 new strings appeared at root level (siblings) - which one will grow?
+→ Add BOTH to pending
+→ Emit nothing for strings yet
+→ Wait for next chunk to see which changes
+```
+
+**Example 2 - String and array at same level:**
+```
+Previous: {"days": [{}]}
+Current: {"days": [{"subtitle": "", "activities": []}]}
+
+1 new string (subtitle) + 1 new array (activities) at days[0] level
+Total: 2 growable items at same level - which one will grow?
+→ Add subtitle (string) to _pendingStrings
+→ Add activities (array) to _pendingContainers
+→ Emit NOTHING for either yet
+→ Wait for next chunk to see which changes:
+ - If subtitle value changes → subtitle is active, activities was complete
+ - If activities gets children → activities is active, subtitle was complete
+ - If both unchanged → both were complete
+```
+
+---
+
+## State Variables
+
+```
+_prevState: Dictionary?
+ - Flattened path→value dictionary from last chunk (null on first call)
+ - Used to detect what changed
+ - JsonValue is a record struct: (JsonValueKind Kind, string? StringValue, string? RawValue)
+ - Stores the Kind, StringValue (for strings), and RawValue (raw JSON for non-strings)
+ - IMPORTANT: Empty containers are stored as entries with JsonValueKind.Array or JsonValueKind.Object
+ (so we know they exist even with no children)
+
+_openStringPath: string?
+ - Path of the currently open string (no closing quote emitted)
+ - At most ONE string can be open at a time
+ - null if no string is currently open
+
+_pendingStrings: Dictionary
+ - Map of path → value for strings we haven't emitted yet
+ - Populated when:
+ - 2+ new growable items (strings, arrays, objects) appear at the SAME parent level
+ - OR we already have an open value and encounter a new growable item
+ - Resolved at start of next chunk by comparing values
+ - Note: pending items may or may not be siblings (different nesting levels also go to pending)
+
+_pendingContainers: Dictionary
+ - Map of path → isArray for containers we haven't emitted yet
+ - Populated when 2+ new growable items appear at the same parent level
+ - Resolved at start of next chunk by checking if container grew (got children)
+ - Detection: count paths starting with container path in prev vs curr
+
+_emittedStrings: Dictionary
+ - Map of path → emitted value for strings we HAVE emitted
+ - Used to calculate extension: extension = current[emitted.Length..]
+
+_openStructures: Stack<(string path, bool isArray)>
+ - Stack of currently open containers
+ - Used to properly close structures when moving to different parts of tree
+ - IMPORTANT: When emitting at a different level, close structures down to target path
+
+_emittedPaths: HashSet
+ - Tracks which paths have been emitted
+ - Used to know when to emit commas (if sibling already emitted, prepend comma)
+ - IMPORTANT: Do NOT skip processing of existing array items just because path is in _emittedPaths
+```
+
+### Comma Rules
+
+- **First property in an object**: No leading comma → `"prop":"value`
+- **Subsequent properties**: Leading comma → `,"prop":"value`
+- **First item in an array**: No leading comma → `{` or `"value`
+- **Subsequent items**: Leading comma → `,{` or `,"value`
+
+Check `_emittedPaths` to see if any sibling was already emitted at the same parent level.
+If yes, prepend comma. If no, don't.
+
+## Path Notation
+
+We flatten JSON into paths:
+- Object properties: `parent.child`
+- Array items: `parent[0]`, `parent[1]`
+- Nested: `days[0].activities[1].title`
+
+**Example:**
+```json
+{"days": [{"subtitle": "Day", "activities": [{"title": "Game"}]}]}
+```
+Flattens to:
+```
+days[0].subtitle = "Day"
+days[0].activities[0].title = "Game"
+```
+
+**Parent path calculation:**
+- `days[0].subtitle` → parent is `days[0]`
+- `days[0].activities[0].title` → parent is `days[0].activities[0]`
+- `days[0]` → parent is `days`
+
+---
+
+## Algorithm Overview
+
+```
+For each chunk:
+
+1. FIRST CHUNK (special path - no previous state):
+ - Parse and flatten JSON
+ - Emit root structure opening "{"
+ - Process all containers depth-first via EmitStructure()
+ - For each container, count its direct GROWABLE children (strings, arrays, objects):
+ - If 0 growable values at this level: emit all non-growables (numbers, bools, null), continue to nested containers
+ - If 1 growable value at this level:
+ - If string: emit property open (no closing quote), set _openStringPath
+ - If container (array/object): emit opening bracket, push to _openStructures, recurse into children
+ - If 2+ growable values at this level:
+ - Add strings to _pendingStrings
+ - Add containers to _pendingContainers
+ - Emit NOTHING for these until next chunk resolves which is active
+ - Result: at most 1 open string, rest in pending or fully emitted
+
+2. SUBSEQUENT CHUNKS (compare with previous state):
+ a. Step A - Handle open string (if _openStringPath is set):
+ - Check for new siblings at same level
+ - Check for new content at parent level
+ - If new sibling OR parent-level change:
+ → Emit extension (if value changed)
+ → Emit closing quote
+ → Set _openStringPath = null
+ - Else if value changed:
+ → Emit extension
+ → Keep open (might still grow)
+ - Else (value same):
+ → Emit closing quote
+ → Set _openStringPath = null
+
+ b. Step B - Resolve pending (if _pendingStrings or _pendingContainers not empty):
+ - For strings: Categorize as COMPLETE (unchanged) vs CHANGED
+ - For containers: Categorize as COMPLETE (no new children) vs CHANGED (got children)
+ - Detection: count paths with prefix in prev vs curr state
+ - Emit all COMPLETE items first (sorted by path for consistency):
+ - Strings: emit with closing quote
+ - Containers: emit opening AND closing brackets AND all content (they're complete)
+ - Emit the CHANGED one as open (if any):
+ - String: becomes _openStringPath
+ - Container: emit opening bracket, push to _openStructures, recurse into children
+ - After setting active string, check for new siblings → if found, close immediately
+
+ c. Step C - Process new content:
+ - For objects: iterate properties, categorize as existing vs new
+ - Existing non-strings: recurse into them
+ - New properties: categorize by growable type
+ - For arrays: iterate items, compare index to previous count
+ - Existing items: recurse into non-strings
+ - New items: emit via EmitNewArrayItem
+ - For new growable items:
+ - Count growables at same parent level
+ - If 1 growable AND no open value: emit open, set as active
+ - If 1 growable AND have open value: add to pending
+ - If 2+ growable: add ALL to pending, emit nothing
+
+3. FINALIZE (after last chunk):
+ - Emit any remaining pending items (all complete - sorted by path)
+ - Close _openStringPath if set (emit closing ")
+ - Close all open structures (emit } or ] for each, in reverse order from stack)
+```
+
+---
+
+## Detailed Step A: Handle Open String
+
+```
+┌─────────────────────────────────────────────────────────────────────────────┐
+│ STEP A: HANDLE OPEN STRING │
+└─────────────────────────────────────────────────────────────────────────────┘
+
+IF _openStringPath is set:
+ │
+ ├─► Get current value at _openStringPath
+ │ Get emitted value from _emittedStrings[_openStringPath]
+ │
+ ├─► Check for NEW siblings at same level
+ │ (properties in current that weren't in previous, at same parent path)
+ │
+ ├─► Check for NEW content at PARENT level
+ │ (e.g., new array item in parent array)
+ │
+ ├─► IF NEW SIBLING or PARENT-LEVEL CHANGE:
+ │ │
+ │ │ String is COMPLETE (AI moved on)
+ │ │
+ │ ├─► IF value changed:
+ │ │ extension = current[emitted.Length..]
+ │ │ Emit: extension + closing quote "
+ │ │
+ │ └─► ELSE:
+ │ Emit: closing quote "
+ │
+ │ Close any containers as needed:
+ │ Pop from _openStructures until we reach the level where new content will be emitted
+ │ Emit } or ] for each popped container
+ │ Set _openStringPath = null
+ │
+ └─► ELSE (no new siblings, no parent changes):
+ │
+ ├─► IF value CHANGED:
+ │ extension = current[emitted.Length..]
+ │ Emit: extension (no closing quote)
+ │ Update _emittedStrings[path] = current
+ │ Keep _openStringPath set (might still grow)
+ │
+ └─► ELSE (value SAME):
+ Emit: closing quote "
+ Set _openStringPath = null
+```
+
+**Real example - Sibling Rule (Line 2):**
+```
+Previous: {"days": [{"subtitle": "Day"}]}
+Current: {"days": [{"subtitle": "Day 1: Arrival and Wildlife Safari", "activities": []}]}
+
+_openStringPath = "days[0].subtitle"
+emitted = "Day"
+current = "Day 1: Arrival and Wildlife Safari"
+
+Check siblings at days[0]:
+ Previous had: subtitle
+ Current has: subtitle, activities
+ → "activities" is NEW SIBLING!
+
+Action:
+ extension = "Day 1: Arrival and Wildlife Safari"["Day".Length..] = " 1: Arrival and Wildlife Safari"
+ Emit: 1: Arrival and Wildlife Safari"
+ Set _openStringPath = null
+ Then emit new sibling: ,"activities":[
+
+Output: 1: Arrival and Wildlife Safari","activities":[
+```
+
+**Real example - Parent-Level Rule (Line 6):**
+```
+Previous: {"days": [{"activities": [{"description": "Embark on a thrilling..."}]}]}
+Current: {"days": [{"activities": [{"description": "...full text..."}, {"type": ""}]}]}
+
+_openStringPath = "days[0].activities[0].description"
+Parent of description = days[0].activities[0]
+Parent's parent = days[0].activities (array)
+
+Check: days[0].activities[1] is NEW
+→ New content at parent level!
+
+Action:
+ Emit extension for description
+ Close description: "
+ Close activities[0] object: }
+ Emit new array item: ,{
+ Handle strings in new item...
+```
+
+---
+
+## Detailed Step B: Resolve Pending
+
+```
+┌─────────────────────────────────────────────────────────────────────────────┐
+│ STEP B: RESOLVE PENDING │
+└─────────────────────────────────────────────────────────────────────────────┘
+
+IF _pendingStrings OR _pendingContainers is not empty:
+ │
+ ├─► RESOLVE PENDING STRINGS:
+ │ │
+ │ ├─► Categorize all pending strings:
+ │ │ For each (path, storedValue) in _pendingStrings:
+ │ │ currentValue = current[path]
+ │ │ IF currentValue == storedValue:
+ │ │ Add to COMPLETE_STRINGS list
+ │ │ ELSE:
+ │ │ Add to CHANGED_STRINGS list (should be exactly 0 or 1)
+ │ │
+ │ ├─► FIRST: Emit all COMPLETE strings (with closing quotes):
+ │ │ For each in COMPLETE_STRINGS:
+ │ │ needsComma = any sibling already in _emittedPaths
+ │ │ Emit: [,]"path":"value"
+ │ │ Add path to _emittedPaths
+ │ │
+ │ └─► Clear _pendingStrings
+ │
+ ├─► RESOLVE PENDING CONTAINERS:
+ │ │
+ │ ├─► Categorize all pending containers:
+ │ │ For each (path, isArray) in _pendingContainers:
+ │ │ previousChildCount = count of previous paths starting with this container
+ │ │ currentChildCount = count of current paths starting with this container
+ │ │ IF currentChildCount == previousChildCount:
+ │ │ Add to COMPLETE_CONTAINERS list (container didn't grow)
+ │ │ ELSE:
+ │ │ Add to CHANGED_CONTAINERS list (container got children)
+ │ │
+ │ ├─► Emit all COMPLETE containers (with opening AND closing brackets):
+ │ │ For each in COMPLETE_CONTAINERS:
+ │ │ needsComma = any sibling already in _emittedPaths
+ │ │ IF isArray: Emit: [,]"path":[]
+ │ │ ELSE: Emit: [,]"path":{}
+ │ │ Add path to _emittedPaths
+ │ │
+ │ └─► Clear _pendingContainers
+ │
+ ├─► EMIT THE CHANGED ITEM (at most 1 across strings and containers):
+ │ IF CHANGED_STRINGS has exactly 1:
+ │ needsComma = any sibling already in _emittedPaths
+ │ Emit: [,]"path":"value (no closing quote)
+ │ Set _openStringPath = path
+ │ Add path to _emittedPaths
+ │ Update _emittedStrings[path] = currentValue
+ │
+ │ IF CHANGED_CONTAINERS has exactly 1:
+ │ needsComma = any sibling already in _emittedPaths
+ │ IF isArray: Emit: [,]"path":[
+ │ ELSE: Emit: [,]"path":{
+ │ Push to _openStructures
+ │ Add path to _emittedPaths
+ │ → Recursively process children of this container
+ │
+ │ IF total CHANGED has 2+:
+ │ This should never happen per "only one value changes per chunk" invariant
+ │ Log warning and treat all as complete
+ │
+ └─► IF _openStringPath was just set:
+ Check for new siblings at same level (in current, not in previous)
+ IF new sibling exists:
+ → Close immediately (Sibling Rule)
+ Emit: "
+ Set _openStringPath = null
+```
+
+**Real example (Line 4):**
+```
+_pendingStrings = {
+ "days[0].activities[0].title": "",
+ "days[0].activities[0].type": "Sightseeing"
+}
+
+Current values:
+ title = "Morning Game Drive" (was "")
+ type = "Sightseeing" (unchanged)
+
+Categorize:
+ COMPLETE = [type]
+ CHANGED = [title]
+
+Emit COMPLETE first:
+ type: no siblings emitted yet → no comma
+ Emit: "type":"Sightseeing"
+ Add to _emittedPaths
+
+Emit CHANGED:
+ title: type already emitted (sibling) → needs comma
+ Emit: ,"title":"Morning Game Drive
+ Set _openStringPath = "days[0].activities[0].title"
+ Add to _emittedPaths
+
+Check for new siblings of title:
+ "description" is NEW at same level!
+ → Sibling Rule: close title immediately
+ Emit: "
+ → Then handle description in Step C
+
+Output: "type":"Sightseeing","title":"Morning Game Drive"
+```
+
+---
+
+## Detailed Step C: Process New Content
+
+```
+┌─────────────────────────────────────────────────────────────────────────────┐
+│ STEP C: PROCESS NEW CONTENT │
+└─────────────────────────────────────────────────────────────────────────────┘
+
+For each new path in current that wasn't in previous:
+ │
+ ├─► IF value is NON-GROWABLE (number, bool, null):
+ │ needsComma = any sibling already in _emittedPaths
+ │ Emit complete: [,]"path":value
+ │ Add path to _emittedPaths
+ │
+ └─► IF value is GROWABLE (string, object, array):
+ Group all new GROWABLE items BY PARENT (siblings only):
+ │
+ ├─► For each parent with new growable items:
+ │ Count new growable items at this parent
+ │ │
+ │ ├─► IF 1 new growable item at this parent:
+ │ │ IF no open value (_openStringPath is null AND no pending):
+ │ │ │
+ │ │ ├─► IF string:
+ │ │ │ needsComma = any sibling in _emittedPaths
+ │ │ │ Emit open: [,]"path":"value (no closing quote)
+ │ │ │ Set _openStringPath = path
+ │ │ │ Add to _emittedPaths
+ │ │ │ Update _emittedStrings[path] = value
+ │ │ │
+ │ │ └─► IF object or array:
+ │ │ needsComma = any sibling in _emittedPaths
+ │ │ Emit opening: [,]"path":{ or [,]"path":[
+ │ │ Push to _openStructures
+ │ │ Add path to _emittedPaths
+ │ │ Recursively process children
+ │ │
+ │ │ ELSE (already have open value):
+ │ │ IF string: Add to _pendingStrings (wait for next chunk)
+ │ │ IF container: Add to _pendingContainers (wait for next chunk)
+ │ │
+ │ └─► IF 2+ new growable items at this parent:
+ │ For each growable item:
+ │ IF string: Add to _pendingStrings
+ │ IF container: Add to _pendingContainers
+ │ Do NOT emit values for these
+ │ (Will resolve in next chunk to see which one changes)
+```
+
+**Note**: We count new growable items per parent level, not globally. If we get:
+```json
+{"a": {"x": "hello"}, "b": "world"}
+```
+- `a.x` has 1 new growable item at parent `a`
+- `b` has 1 new growable item at parent root
+- These are NOT siblings, so each is handled separately
+- First one encountered becomes the open value
+- Second goes to pending (can only have one open value at a time)
+
+**Example - 1 new string (Line 7):**
+```
+Previous: days[0].activities[1] = {type: ""}
+Current: days[0].activities[1] = {type: "FoodAndDining", title: "Lunch"}
+
+After Step A closes type (sibling rule):
+ _openStringPath = null
+ _emittedPaths contains "days[0].activities[1].type"
+
+Step C - New content:
+ "days[0].activities[1].title" is new
+ Parent = "days[0].activities[1]"
+ 1 new string at this parent
+ "type" already in _emittedPaths (sibling) → needs comma
+
+Action:
+ Emit: ,"title":"Lunch
+ Set _openStringPath = "days[0].activities[1].title"
+ Add to _emittedPaths
+
+Output: ,"title":"Lunch
+```
+
+**Example - 2+ new strings (Line 3):**
+```
+Previous: days[0].activities = []
+Current: days[0].activities = [{title: "", type: "Sightseeing"}]
+
+Step C - New content:
+ days[0].activities[0] is new object
+ Parent of this object = days[0].activities
+ No siblings emitted → no comma for object
+
+ Emit: {
+ Push to _openStructures
+ Add "days[0].activities[0]" to _emittedPaths
+
+ Inside it: title and type (2 strings!)
+ Parent = days[0].activities[0]
+ 2 new strings at this parent → pending
+
+ Add both to pending:
+ _pendingStrings = {
+ "days[0].activities[0].title": "",
+ "days[0].activities[0].type": "Sightseeing"
+ }
+ Do NOT emit string values
+
+Output: {
+```
+
+---
+
+## Complete Real-World Walkthrough
+
+### Line 1
+```json
+{"days": [{"subtitle": "Day"}]}
+```
+
+**First chunk processing:**
+- Parse and flatten:
+ - Root object
+ - `days` = array
+ - `days[0]` = object
+ - `days[0].subtitle` = "Day"
+- Process containers:
+ - Root: emit `{`, push to _openStructures
+ - `days`: emit `"days":[`, push to _openStructures
+ - `days[0]`: emit `{`, push to _openStructures
+- Process strings at `days[0]`:
+ - 1 string (`subtitle`), no open string yet
+ - Emit open: `"subtitle":"Day` (no closing quote)
+ - Set _openStringPath = "days[0].subtitle"
+
+```
+Output: {"days":[{"subtitle":"Day
+ ↑ no closing quote
+State:
+ _openStringPath = "days[0].subtitle"
+ _emittedStrings = {"days[0].subtitle": "Day"}
+ _emittedPaths = {"days", "days[0]", "days[0].subtitle"}
+ _openStructures = [root, days, days[0]]
+```
+
+### Line 2
+```json
+{"days": [{"subtitle": "Day 1: Arrival and Wildlife Safari", "activities": []}]}
+```
+
+**Step A - Handle open string:**
+- _openStringPath = "days[0].subtitle"
+- emitted = "Day"
+- current = "Day 1: Arrival and Wildlife Safari"
+- Check siblings at days[0]: `activities` is NEW!
+- Sibling Rule → subtitle is COMPLETE
+
+```
+extension = " 1: Arrival and Wildlife Safari"
+Emit: 1: Arrival and Wildlife Safari"
+_openStringPath = null
+```
+
+**Step C - New content:**
+- `days[0].activities` is new (empty array)
+- Emit: ,"activities":[
+- Push to _openStructures
+
+```
+Output for Line 2: 1: Arrival and Wildlife Safari","activities":[
+
+State:
+ _openStringPath = null
+ _openStructures = [root, days, days[0], days[0].activities]
+```
+
+### Line 3
+```json
+{"days": [{"subtitle": "Day 1: Arrival and Wildlife Safari", "activities": [{"title": "", "type": "Sightseeing"}]}]}
+```
+
+**Step A - No open string** (was closed in Line 2)
+
+**Step C - New content:**
+- `days[0].activities[0]` is new (object)
+- No siblings in activities array yet → no comma
+- Emit: `{`
+- Push to _openStructures
+- Add to _emittedPaths
+- Inside: title="" and type="Sightseeing" (2 strings at same parent!)
+- Pending Rule → add both to pending, don't emit string values
+
+```
+Emit: {
+_pendingStrings = {
+ "days[0].activities[0].title": "",
+ "days[0].activities[0].type": "Sightseeing"
+}
+
+Output for Line 3: {
+
+State:
+ _openStructures = [..., days[0].activities[0]]
+ _emittedPaths += {"days[0].activities[0]"}
+ _pendingStrings = 2 entries
+```
+
+### Line 4
+```json
+{"days": [{"activities": [{"type": "Sightseeing", "description": "Embark", "title": "Morning Game Drive"}], "subtitle": "Day 1: Arrival and Wildlife Safari"}]}
+```
+
+**Step A - No open string**
+
+**Step B - Resolve pending:**
+- type: "Sightseeing" → "Sightseeing" = UNCHANGED → complete
+- title: "" → "Morning Game Drive" = CHANGED → active
+
+```
+Emit for type: "type":"Sightseeing"
+Emit for title: ,"title":"Morning Game Drive
+_openStringPath = "days[0].activities[0].title"
+```
+
+Check for siblings of title:
+- `description` is NEW at same level!
+- Sibling Rule → title is COMPLETE
+
+```
+Emit: "
+_openStringPath = null
+```
+
+**Step C - New content:**
+- `description` = "Embark" is new
+- 1 new string
+
+```
+Emit: ,"description":"Embark
+_openStringPath = "days[0].activities[0].description"
+
+Output for Line 4: "type":"Sightseeing","title":"Morning Game Drive","description":"Embark
+
+State:
+ _openStringPath = "days[0].activities[0].description"
+ _emittedStrings[...description] = "Embark"
+```
+
+### Line 5
+```json
+{"days": [{"activities": [{"description": "Embark on a thrilling morning game drive to witness the Great Migration in all its glory.", "title": "Morning Game Drive", "type": "Sightseeing"}], "subtitle": "Day 1: Arrival and Wildlife Safari"}]}
+```
+
+**Step A - Handle open string:**
+- _openStringPath = "days[0].activities[0].description"
+- emitted = "Embark"
+- current = "Embark on a thrilling..."
+- Check siblings: none new
+- Check parent level: nothing new
+- Value CHANGED → emit extension, keep open
+
+```
+extension = " on a thrilling..."
+Emit: on a thrilling...
+_openStringPath still set
+
+Output for Line 5: on a thrilling...
+```
+
+### Line 6
+```json
+{"days": [{"subtitle": "Day 1: Arrival and Wildlife Safari", "activities": [{"description": "Embark on a thrilling morning game drive to witness the Great Migration in all its glory.", "type": "Sightseeing", "title": "Morning Game Drive"}, {"type": ""}]}]}
+```
+
+**Step A - Handle open string:**
+- _openStringPath = "days[0].activities[0].description"
+- emitted = "Embark on a thrilling..."
+- current = "...full text..."
+- Check siblings at activities[0]: none new
+- Check parent level: `days[0].activities[1]` is NEW!
+- Parent-Level Rule → activities[0] is COMPLETE
+
+```
+extension = " morning game drive to witness the Great Migration in all its glory."
+Emit extension: ...
+Close description: "
+Close activities[0] object: }
+_openStringPath = null
+```
+
+**Step C - New content:**
+- `days[0].activities[1]` is new object
+- Inside: type="" (1 string)
+
+```
+Emit: ,{
+Emit: "type":"
+_openStringPath = "days[0].activities[1].type"
+_emittedStrings[...type] = ""
+
+Output for Line 6: morning game drive to witness the Great Migration in all its glory."},{"type":"
+```
+
+### Line 7
+```json
+{"days": [{"subtitle": "Day 1: Arrival and Wildlife Safari", "activities": [{"title": "Morning Game Drive", "description": "...", "type": "Sightseeing"}, {"type": "FoodAndDining", "title": "Lunch"}]}]}
+```
+
+**Step A - Handle open string:**
+- _openStringPath = "days[0].activities[1].type"
+- emitted = ""
+- current = "FoodAndDining"
+- Check siblings: `title` is NEW!
+- Sibling Rule → type is COMPLETE
+
+```
+extension = "FoodAndDining"
+Emit: FoodAndDining"
+_openStringPath = null
+```
+
+**Step C - New content:**
+- `title` = "Lunch" is new
+- 1 new string
+
+```
+Emit: ,"title":"Lunch
+_openStringPath = "days[0].activities[1].title"
+
+Output for Line 7: FoodAndDining","title":"Lunch
+```
+
+### Line 8
+```json
+{"days": [{"activities": [{"type": "Sightseeing", "description": "...", "title": "Morning Game Drive"}, {"description": "Enjoy", "title": "Lunch at Restaurant 1", "type": "FoodAndDining"}], "subtitle": "Day 1: Arrival and Wildlife Safari"}]}
+```
+
+**Step A - Handle open string:**
+- _openStringPath = "days[0].activities[1].title"
+- emitted = "Lunch"
+- current = "Lunch at Restaurant 1"
+- Check siblings: `description` is NEW!
+- Sibling Rule → title is COMPLETE
+
+```
+extension = " at Restaurant 1"
+Emit: at Restaurant 1"
+_openStringPath = null
+```
+
+**Step C - New content:**
+- `description` = "Enjoy" is new
+- 1 new string
+
+```
+Emit: ,"description":"Enjoy
+_openStringPath = "days[0].activities[1].description"
+
+Output for Line 8: at Restaurant 1","description":"Enjoy
+```
+
+---
+
+## Edge Cases
+
+### Empty string grows
+```
+Line 3: "title": ""
+Line 4: "title": "Morning Game Drive"
+```
+- Empty string is just a string with length 0
+- Extension = "Morning Game Drive"[0..] = "Morning Game Drive"
+- No special handling needed - treat `""` like any other string
+
+### Empty containers get populated
+```
+Line 2: "activities": []
+Line 3: "activities": [{"title": ""}]
+```
+- Empty array `[]` → emit `[` only, push to _openStructures
+- Do NOT emit closing `]`
+- When items appear → emit them normally
+- Closing brackets emitted when moving to sibling/parent or at finalize
+
+**Note on flattening**: Empty containers ARE stored in the flattened state dictionary
+with their JsonValueKind (Array or Object). This allows us to:
+1. Know the container exists even with no children
+2. Detect when children are added (container grew)
+
+### Nested container changes propagate up
+
+Containers (arrays and objects) can have nested children that grow. When determining if a container is "changing", we must check ALL descendants, not just direct children.
+
+**The Rule**: A container is "still active/growing" if ANY descendant path changes.
+
+**Example - Nested array with growing string:**
+```
+Previous: {"items": [{"name": "Jo"}]}
+Current: {"items": [{"name": "John"}]}
+```
+- `items` is an array containing an object
+- The object contains a string `name` that grew ("Jo" → "John")
+- Even though `items[0]` exists in both, the string inside changed
+- Therefore `items` (the array) is still "active" - don't close it
+
+**Example - Deep nesting:**
+```
+Previous: {"root": {"level1": {"level2": {"value": "He"}}}}
+Current: {"root": {"level1": {"level2": {"value": "Hello"}}}}
+```
+- `value` is the actual string that changed
+- But `level2`, `level1`, and `root` are ALL still active because a descendant changed
+- None of these containers should be closed
+
+**Detection Algorithm:**
+When checking if a container at path P is "complete" vs "still active":
+1. Find all current paths that START WITH P (all descendants)
+2. Find all previous paths that START WITH P
+3. If ANY descendant value changed → container is still active
+4. Only if ALL descendants are unchanged → container is complete
+
+**Why this matters for pending:**
+When we have pending containers (e.g., a string and an array both appeared):
+```
+Previous: {"days": [{}]}
+Current: {"days": [{"subtitle": "", "activities": []}]}
+```
+- `subtitle` (string) and `activities` (array) are both pending
+- Next chunk:
+ ```
+ Current: {"days": [{"subtitle": "Day 1", "activities": []}]}
+ ```
+- `subtitle` changed ("" → "Day 1") → subtitle is the active one
+- `activities` has no new children → activities is complete
+- BUT if instead:
+ ```
+ Current: {"days": [{"subtitle": "", "activities": [{"type": ""}]}]}
+ ```
+- `subtitle` unchanged ("" → "")
+- `activities` now has children → activities is the active one
+- The array "grew" even though `activities` itself didn't change - its DESCENDANTS did
+
+### Array grows by new item
+```
+Line 5: activities has 1 item
+Line 6: activities has 2 items
+```
+- Detect new array index (activities[1])
+- This triggers Parent-Level Rule for activities[0]
+- Close activities[0], emit `,{`, process new item
+
+### Deep nesting
+- Paths handle arbitrary depth: `days[0].activities[2].details.notes[0]`
+- Stack of _openStructures handles closing in correct order
+- Parent detection walks up the path segments
+
+### New strings at different nesting levels
+```
+Previous: {"count": 5}
+Current: {"count": 5, "a": {"x": "hello"}, "b": "world"}
+```
+- `a.x` is at parent `a` (1 string at this level)
+- `b` is at parent root (1 string at this level)
+- These are NOT siblings - different parents
+- We can only have ONE open string at a time
+- First encountered (e.g., `a.x`) becomes _openStringPath
+- Second (`b`) goes to pending even though it's alone at its level
+- Next chunk resolves: whichever changed is active (per invariant, at most one changes)
+
+### All pending strings complete (none changed)
+```
+Line N: Two strings added to pending
+Line N+1: Both strings have same values (unchanged)
+```
+- Both are COMPLETE
+- Emit both with closing quotes
+- No _openStringPath is set
+- Continue to Step C for new content
+
+---
+
+## Key Decision Points
+
+### When to close the open string?
+
+1. **Sibling Rule**: New property at same level
+2. **Parent Rule**: New content at higher level
+3. **Unchanged Rule**: Value same as previous chunk
+4. **Finalize**: End of stream
+
+### When to use pending?
+
+- First chunk has 2+ strings
+- 2+ new strings appear in same chunk
+- NEVER emit pending strings immediately - always wait for next chunk
+
+### How to calculate "same level"?
+
+Two paths are at the same level (siblings) if they have the same parent:
+- `days[0].title` and `days[0].subtitle` → same parent `days[0]` ✓
+- `days[0].title` and `days[1].title` → different parents ✗
+- `days[0].activities[0].title` and `days[0].activities[0].type` → same parent ✓
+
+### How to detect parent-level changes?
+
+For open string at path P, check if any new content appeared at:
+- P's parent path
+- P's grandparent path
+- etc.
+
+Example: If open string is at `days[0].activities[0].description`:
+- Parent = `days[0].activities[0]`
+- Grandparent = `days[0].activities`
+- If `days[0].activities[1]` appears → parent-level change!
+
+### How to handle empty containers?
+
+- Emit `[` or `{` only (no closing bracket)
+- Add to _openStructures
+- Close when moving to sibling/parent or at finalize
+
+---
+
+## Key Invariants
+
+1. **At most ONE growable value is open** at any time (never two)
+2. **Pending items (strings and containers) are NEVER emitted** until resolved in next chunk
+3. **Extension = current[emitted.Length..]** - strings only grow, never shrink
+4. **Order: Step A (open) → Step B (pending) → Step C (new)** - always this order
+5. **2+ new growable items at same parent = pending** - never guess which is active
+6. **New sibling = complete** - AI moved on horizontally
+7. **Parent-level change = complete** - AI moved on vertically
+8. **Track by path, not position** - property order doesn't matter
+9. **Containers stay open** until sibling/parent change or finalize
+10. **Empty containers are valid** - `{}` and `[]` can get populated later
+11. **Comma before sibling** - check _emittedPaths to know if comma needed
+12. **At most ONE value changes per chunk** - if Step B finds 2+ changed (strings or containers), that's an error
+13. **Growable types: strings, arrays, objects** - all can grow and need pending logic
+14. **Non-growable types: numbers, bools, null** - always complete immediately
+15. **Nested changes propagate up** - if ANY descendant of a container changes, the container is still active
+16. **Complete containers emit all content** - when a pending container is resolved as complete, emit its full content (opening bracket, all children recursively, closing bracket)
+17. **Structure closing is level-aware** - use `CloseStructuresDownTo` to close structures when emitting at a different tree level
+18. **Pending resolution preserves new pending** - when resolving pending items, NEW pending items may be added during container emission (e.g., emitting a pending array creates new pending strings for its children). Only remove the original pending items, not the newly added ones.
+19. **Array iteration closes previous items** - when iterating array items in first chunk, close any pending items from the previous array item before moving to the next one
+20. **Container growth detection compares key sets** - when checking if a pending container grew, compare the SET of descendant keys, not just the count. An empty object `{}` becoming a nested object changes the keys even if the count stays the same.
+
+---
+
+## Structure Management
+
+### CloseStructuresDownTo Algorithm
+
+When we need to emit content at a different level in the JSON tree, we must first close any open structures that are not ancestors of the target path.
+
+```
+CloseStructuresDownTo(targetPath):
+ while _openStructures is not empty:
+ (topPath, isArray) = peek top of stack
+
+ // Check if targetPath is at or inside topPath
+ isPrefix = targetPath.startsWith(topPath) AND
+ (lengths equal OR next char is '.' or '[')
+
+ if topPath is root ("") OR isPrefix:
+ break // Don't close - we're inside this structure
+
+ pop from stack
+ emit ']' if isArray else '}'
+```
+
+**Example:**
+```
+_openStructures = [("", false), ("days", true), ("days[0]", false), ("days[0].activities", true)]
+
+We want to emit at "days[1]" (new array item in days)
+
+1. Check "days[0].activities" - "days[1]" doesn't start with this → close with ']'
+2. Check "days[0]" - "days[1]" doesn't start with this → close with '}'
+3. Check "days" - "days[1]" DOES start with "days" → stop
+
+Result: emitted "]}" and stack is now [("", false), ("days", true)]
+```
+
+### When Structure Closing Happens
+
+1. **Before emitting a new property** - `EmitNewProperty` calls `CloseStructuresDownTo(parentPath)`
+2. **Before emitting a pending string** - `EmitPendingString` calls `CloseStructuresDownTo(parentPath)`
+3. **Before emitting a new array item** - `EmitNewArrayItem` calls `CloseStructuresDownTo(arrayPath)`
+
+This ensures we're always at the correct nesting level before emitting new content.
+
+---
+
+## First Chunk vs Subsequent Chunk
+
+The implementation handles the first chunk differently from subsequent chunks:
+
+### First Chunk (ProcessFirstChunk)
+- No previous state to compare against
+- Uses `EmitStructure` to recursively process the JSON tree
+- Counts growables at each level to decide open vs pending
+- Emits structure (brackets) and handles string ambiguity
+
+### Subsequent Chunks (ProcessSubsequentChunk)
+- Has previous state for comparison
+- Follows the Step A → Step B → Step C order
+- Uses `ProcessNewContent` to find and emit new properties/items
+- Can detect siblings and parent-level changes
+
+## Critical Rules Checklist
+
+### NEVER Do These Things
+
+1. **NEVER defer all output to the end** - This defeats the entire purpose of streaming
+2. **NEVER accumulate all chunks and process at the end** - Each chunk must produce output
+3. **NEVER rely on property order** - Use path-based comparison, not positional
+4. **NEVER close a string prematurely** - Only close when CERTAIN it won't grow
+5. **NEVER re-serialize to find diff** - Compare objects structurally, emit directly
+
+### ALWAYS Do These Things
+
+1. **ALWAYS use intermediate deserialization** - Parse each chunk to dictionary for comparison
+2. **ALWAYS compare by path** - Flatten objects to `path → value` dictionaries
+3. **ALWAYS track what's "open"** - Use stack to know what needs closing tokens
+4. **ALWAYS emit extension BEFORE closing** - When closing a string that grew, emit extension first
+5. **ALWAYS validate concatenation** - Concatenate all chunks, parse as JSON, compare to final
+
+### Order of Operations
+
+When processing a chunk where a new property appears (signaling completion):
+
+1. **FIRST**: Emit any remaining string extension (the part that grew since last chunk)
+2. **THEN**: Emit the closing quote
+3. **THEN**: Emit new content (comma, new property, etc.)
+
+This prevents truncation of the final string extension.
+
+---
+
+## Why Naive Approaches Fail
+
+### The String Diff Problem
+
+A naive approach of "serialize with open strings, diff, emit diff" fails because:
+
+1. **Line 2**: We serialize with `subtitle` open (no closing quote):
+ `...Safari,"activities":[` (note: no quote after Safari)
+
+2. **Line 3**: We serialize with `type` open (different string):
+ `...Safari","activities":[{"title":"","type":"Sightseeing` (quote after Safari)
+
+3. When we diff these, they diverge at position 55 where one has `,` and the other has `"`.
+ The diff produces content that DUPLICATES properties!
+
+### The Root Cause
+
+The **closing quote for a string is NOT at the end of our emitted output**. It's embedded in the middle, before subsequent content. When we change which string is "open", the quote position moves, causing serializations to diverge unexpectedly.
+
+### The Solution
+
+Track what we've **ACTUALLY EMITTED** separately from any serialization:
+
+1. Emit content immediately, but track that a string is "open" (withheld quote)
+2. When a new property appears (signaling previous string is complete):
+ - Emit the closing quote FIRST
+ - THEN emit the new content
+3. The emitted stream is what we actually output, not a re-serialization
+
+---
+
+## Files
+
+- **Implementation**: `src/AI/src/Essentials.AI/JsonStreamChunker.cs`
+- **Tests**: `src/AI/tests/Essentials.AI.UnitTests/JsonStreamChunkerTests.cs`
+- **Test data**: `src/AI/tests/Essentials.AI.UnitTests/TestData/ObjectStreams/*.jsonl`
diff --git a/eng/Versions.props b/eng/Versions.props
index d1f307551..3a99f5d94 100644
--- a/eng/Versions.props
+++ b/eng/Versions.props
@@ -19,13 +19,16 @@
10.0.20
$(MicrosoftMauiControlsVersion)
$(MicrosoftMauiControlsVersion)
+ $(MicrosoftMauiControlsVersion)
$(MicrosoftMauiControlsVersion)
10.0.5
+ 10.0.5
10.0.5
10.0.5
10.0.5
+ 10.0.5
10.0.5
10.0.5
@@ -60,6 +63,20 @@
$(PlatformMauiLinuxGtk4Version)
$(PlatformMauiLinuxGtk4Version)
+
+
+ 1
+
+ 10.3.0
+ 10.3.0
+
+ 1.0.0-rc2
+ 1.0.0-rc2
+ 1.0.0-rc2
+ 1.0.0-preview.260225.1
+
+ 0.1.0-preview.6
+
18.3.0
2.9.3
diff --git a/eng/pipelines/devflow-official.yml b/eng/pipelines/devflow-official.yml
index 53f14376e..6254afcb3 100644
--- a/eng/pipelines/devflow-official.yml
+++ b/eng/pipelines/devflow-official.yml
@@ -24,6 +24,10 @@ parameters:
displayName: 'Publish Linux GTK4 packages to NuGet.org'
type: boolean
default: false
+- name: publishEssentialsAINuget
+ displayName: 'Publish EssentialsAI packages to NuGet.org'
+ type: boolean
+ default: false
variables:
- template: /eng/pipelines/common-variables.yml@self
@@ -153,6 +157,79 @@ extends:
$(_OfficialBuildArgs)
displayName: Build and Pack Linux GTK4
+ - job: EssentialsAI_macOS
+ displayName: EssentialsAI - macOS (native build)
+ pool:
+ name: Azure Pipelines
+ vmImage: macos-15
+ os: macOS
+ templateContext:
+ outputs:
+ - output: pipelineArtifact
+ displayName: Publish Mac Native Artifacts
+ targetPath: '$(Agent.TempDirectory)/native-binaries'
+ artifactName: EssentialsAIMacNativeArtifacts
+ strategy:
+ matrix:
+ Release:
+ _BuildConfig: Release
+ steps:
+ - script: |
+ eng/common/dotnet.sh --info
+ displayName: Provision .NET SDK via Arcade
+ - script: sudo xcode-select -s /Applications/Xcode_26.3.app/Contents/Developer
+ displayName: Select Xcode 26.3
+ - script: .dotnet/dotnet workload install maui ios maccatalyst macos maui-tizen
+ displayName: Install MAUI workloads
+ - script: |
+ ./eng/common/build.sh \
+ --configuration $(_BuildConfig) \
+ --restore \
+ --build \
+ --prepareMachine \
+ --ci \
+ --projects $(Build.SourcesDirectory)/src/AI/EssentialsAI.slnf
+ displayName: Build EssentialsAI (macOS)
+ - task: CopyFiles@2
+ displayName: Copy Native Binaries
+ inputs:
+ SourceFolder: '$(Build.SourcesDirectory)/artifacts/bin'
+ Contents: |
+ */$(_BuildConfig)/*/*.resources.zip
+ TargetFolder: '$(Agent.TempDirectory)/native-binaries'
+
+ - job: EssentialsAI
+ displayName: EssentialsAI - Windows
+ dependsOn: EssentialsAI_macOS
+ pool:
+ name: NetCore1ESPool-Internal
+ demands: ImageOverride -equals windows.vs2026preview.scout.amd64
+ strategy:
+ matrix:
+ Release:
+ _BuildConfig: Release
+ _OfficialBuildArgs: /p:DotNetSignType=$(_SignType)
+ /p:TeamName=$(_TeamName)
+ /p:OfficialBuildId=$(BUILD.BUILDNUMBER)
+ steps:
+ - task: DownloadPipelineArtifact@2
+ displayName: Download Mac Native Binaries
+ inputs:
+ artifact: EssentialsAIMacNativeArtifacts
+ path: '$(Build.SourcesDirectory)/artifacts/bin'
+ - script: eng\common\dotnet.cmd --info
+ displayName: Provision .NET SDK via Arcade
+ - script: .dotnet\dotnet workload install maui maui-android macos maui-tizen
+ displayName: Install MAUI workloads
+ - script: .dotnet\dotnet build -t:InstallAndroidDependencies -f net10.0-android -p:AndroidSdkDirectory="%ANDROID_HOME%" -p:AcceptAndroidSDKLicenses=true src\AI\Microsoft.Maui.Essentials.AI\Microsoft.Maui.Essentials.AI.csproj
+ displayName: Install Android SDK dependencies
+ - script: eng\common\cibuild.cmd
+ -configuration $(_BuildConfig)
+ -prepareMachine
+ -projects $(Build.SourcesDirectory)\src\AI\EssentialsAI.slnf
+ $(_OfficialBuildArgs)
+ displayName: Build and Test EssentialsAI
+
# Verification-only build on real Linux to catch any platform-specific
# build breaks. This job does NOT pack or publish artifacts — the
# shipping NuGet packages come from the Windows LinuxGtk4 job above
@@ -367,3 +444,58 @@ extends:
packageParentPath: '$(Pipeline.Workspace)/LinuxGtk4Packages'
nuGetFeedType: external
publishFeedCredentials: 'nuget.org (dotnetframework)'
+
+ # Publish EssentialsAI packages to NuGet.org
+ - ${{ if eq(parameters.publishEssentialsAINuget, true) }}:
+ - stage: publish_essentialsai_nuget
+ displayName: 'Publish EssentialsAI to NuGet.org'
+ dependsOn:
+ - Validate
+ - publish_using_darc
+ jobs:
+ - job: PrepareArtifacts
+ displayName: 'Prepare EssentialsAI Artifacts'
+ timeoutInMinutes: 15
+ pool:
+ name: NetCore1ESPool-Internal
+ image: windows.vs2026preview.scout.amd64
+ os: windows
+ templateContext:
+ outputs:
+ - output: pipelineArtifact
+ displayName: Publish EssentialsAI Packages
+ targetPath: '$(Pipeline.Workspace)/EssentialsAIPackages'
+ artifactName: EssentialsAIPackagesForNuGet
+ steps:
+ - download: current
+ artifact: PackageArtifacts
+ displayName: Download PackageArtifacts
+ - powershell: |
+ New-Item -ItemType Directory -Force -Path '$(Pipeline.Workspace)/EssentialsAIPackages'
+ Copy-Item '$(Pipeline.Workspace)/PackageArtifacts/Microsoft.Maui.Essentials.AI.*.nupkg' '$(Pipeline.Workspace)/EssentialsAIPackages/' -Verbose
+ displayName: Filter EssentialsAI packages
+
+ - job: PublishNuGet
+ displayName: 'Push EssentialsAI to NuGet.org'
+ dependsOn: PrepareArtifacts
+ timeoutInMinutes: 30
+ pool:
+ name: NetCore1ESPool-Internal
+ image: windows.vs2026preview.scout.amd64
+ os: windows
+ templateContext:
+ type: releaseJob
+ isProduction: true
+ inputs:
+ - input: pipelineArtifact
+ artifactName: EssentialsAIPackagesForNuGet
+ targetPath: '$(Pipeline.Workspace)/EssentialsAIPackages'
+ steps:
+ - task: 1ES.PublishNuget@1
+ displayName: 'Push EssentialsAI to NuGet.org'
+ inputs:
+ useDotNetTask: false
+ packagesToPush: '$(Pipeline.Workspace)/EssentialsAIPackages/*.nupkg'
+ packageParentPath: '$(Pipeline.Workspace)/EssentialsAIPackages'
+ nuGetFeedType: external
+ publishFeedCredentials: 'nuget.org (dotnetframework)'
diff --git a/samples/EssentialsAISample/AI/1_TravelPlannerExecutor.cs b/samples/EssentialsAISample/AI/1_TravelPlannerExecutor.cs
new file mode 100644
index 000000000..11c006438
--- /dev/null
+++ b/samples/EssentialsAISample/AI/1_TravelPlannerExecutor.cs
@@ -0,0 +1,49 @@
+using Microsoft.Agents.AI;
+using Microsoft.Agents.AI.Workflows;
+using Microsoft.Extensions.AI;
+using Microsoft.Extensions.Logging;
+
+namespace EssentialsAISample.AI;
+
+///
+/// Agent 1: Travel Planner - Parses natural language to extract intent.
+/// No tools - just NLP to extract destinationName, dayCount, language.
+///
+internal sealed class TravelPlannerExecutor(AIAgent agent, ILogger logger)
+ : ChatProtocolExecutor("TravelPlannerExecutor", new ChatProtocolExecutorOptions { AutoSendTurnToken = false })
+{
+ ///
+ /// Declares TravelPlanResult as a sent message type so the edge router can map it to downstream executors.
+ /// Without this, ChatProtocolExecutor only declares List<ChatMessage> and TurnToken, causing
+ /// TravelPlanResult to be silently dropped with DroppedTypeMismatch.
+ ///
+ protected override ProtocolBuilder ConfigureProtocol(ProtocolBuilder protocolBuilder)
+ => base.ConfigureProtocol(protocolBuilder).SendsMessage();
+
+ protected override async ValueTask TakeTurnAsync(
+ List messages,
+ IWorkflowContext context,
+ bool? emitEvents = null,
+ CancellationToken cancellationToken = default)
+ {
+ logger.LogDebug("[TravelPlannerExecutor] Starting - parsing user intent");
+
+ await context.AddEventAsync(new ExecutorStatusEvent("Analyzing your request..."), cancellationToken);
+
+ var response = await agent.RunAsync(messages, cancellationToken: cancellationToken);
+
+ logger.LogTrace("[TravelPlannerExecutor] Raw response: {Response}", response.Text);
+
+ var result = response.Result;
+
+ logger.LogDebug("[TravelPlannerExecutor] Completed - extracted: destination={Destination}, days={Days}, language={Language}",
+ result.DestinationName, result.DayCount, result.Language);
+
+ var summary = result.Language != "English"
+ ? $"Planning {result.DayCount}-day trip to {result.DestinationName} in {result.Language}"
+ : $"Planning {result.DayCount}-day trip to {result.DestinationName}";
+ await context.AddEventAsync(new ExecutorStatusEvent(summary), cancellationToken);
+
+ await context.SendMessageAsync(result, cancellationToken);
+ }
+}
diff --git a/samples/EssentialsAISample/AI/2_ResearcherExecutor.cs b/samples/EssentialsAISample/AI/2_ResearcherExecutor.cs
new file mode 100644
index 000000000..a56ba819d
--- /dev/null
+++ b/samples/EssentialsAISample/AI/2_ResearcherExecutor.cs
@@ -0,0 +1,56 @@
+using Microsoft.Agents.AI;
+using Microsoft.Agents.AI.Workflows;
+using Microsoft.Extensions.Logging;
+
+namespace EssentialsAISample.AI;
+
+///
+/// Agent 2: Researcher - Uses TextSearchProvider (RAG) to automatically inject matching destinations
+/// into the AI context before each invocation, then the AI selects the best match.
+/// The TextSearchProvider is configured in with BeforeAIInvoke mode, so candidate destinations are
+/// automatically searched and injected.
+///
+internal sealed partial class ResearcherExecutor(AIAgent agent, ILogger logger)
+ : Executor("ResearcherExecutor")
+{
+ [MessageHandler]
+ private async ValueTask HandleAsync(
+ TravelPlanResult input,
+ IWorkflowContext context,
+ CancellationToken cancellationToken = default)
+ {
+ logger.LogDebug("[ResearcherExecutor] Starting - finding best matching destination for '{DestinationName}'", input.DestinationName);
+ logger.LogTrace("[ResearcherExecutor] Input: {@Input}", input);
+
+ await context.AddEventAsync(new ExecutorStatusEvent("Searching destinations..."), cancellationToken);
+
+ // TextSearchProvider (configured via CreateAgent) automatically searches
+ // DataService.SearchLandmarksAsync and injects results as context before
+ // the AI call. We just need to ask the AI to pick the best match.
+ var prompt = input.DestinationName;
+
+ logger.LogTrace("[ResearcherExecutor] Prompt: {Prompt}", prompt);
+
+ var response = await agent.RunAsync(prompt, cancellationToken: cancellationToken);
+
+ logger.LogTrace("[ResearcherExecutor] Raw response: {Response}", response.Text);
+
+ // Parse the AI's response — both name and description come from RAG context
+ var matchResult = response.Result;
+
+ logger.LogDebug("[ResearcherExecutor] AI selected '{MatchedName}'", matchResult.MatchedDestinationName);
+
+ var result = new ResearchResult(
+ matchResult.MatchedDestinationName,
+ matchResult.MatchedDestinationDescription,
+ input.DayCount,
+ input.Language);
+
+ logger.LogDebug("[ResearcherExecutor] Completed - selected destination: {Name}", matchResult.MatchedDestinationName);
+ logger.LogTrace("[ResearcherExecutor] Output: {@Result}", result);
+
+ await context.AddEventAsync(new ExecutorStatusEvent($"Found destination: {matchResult.MatchedDestinationName}"), cancellationToken);
+
+ return result;
+ }
+}
diff --git a/samples/EssentialsAISample/AI/3_ItineraryPlannerExecutor.cs b/samples/EssentialsAISample/AI/3_ItineraryPlannerExecutor.cs
new file mode 100644
index 000000000..da14a4e47
--- /dev/null
+++ b/samples/EssentialsAISample/AI/3_ItineraryPlannerExecutor.cs
@@ -0,0 +1,67 @@
+using System.Text;
+using Microsoft.Agents.AI;
+using Microsoft.Agents.AI.Workflows;
+using Microsoft.Extensions.AI;
+using Microsoft.Extensions.Logging;
+
+namespace EssentialsAISample.AI;
+
+///
+/// Agent 3: Itinerary Planner - Builds the travel itinerary with streaming output.
+/// Tools are used to assist in generating the itinerary.
+/// Uses RunStreamingAsync to emit partial JSON as it's generated.
+///
+internal sealed partial class ItineraryPlannerExecutor(AIAgent agent, ILogger logger)
+ : Executor("ItineraryPlannerExecutor")
+{
+ [MessageHandler]
+ private async ValueTask HandleAsync(
+ ResearchResult input,
+ IWorkflowContext context,
+ CancellationToken cancellationToken = default)
+ {
+ logger.LogDebug("[ItineraryPlannerExecutor] Starting - building {Days}-day itinerary for '{Destination}'",
+ input.DayCount, input.DestinationName ?? "unknown");
+ logger.LogTrace("[ItineraryPlannerExecutor] Input: {@Input}", input);
+
+ await context.AddEventAsync(new ExecutorStatusEvent("Building your itinerary..."), cancellationToken);
+
+ if (input.DestinationName is null)
+ {
+ logger.LogDebug("[ItineraryPlannerExecutor] No destination found - returning error");
+ await context.AddEventAsync(new ExecutorStatusEvent("Error: No destination found"), cancellationToken);
+ return new ItineraryResult(System.Text.Json.JsonSerializer.Serialize(new { error = "Destination not found" }), input.Language);
+ }
+
+ var prompt = $"""
+ Generate a {input.DayCount}-day itinerary to {input.DestinationName}.
+ Destination description: {input.DestinationDescription}
+ """;
+
+ logger.LogTrace("[ItineraryPlannerExecutor] Prompt: {Prompt}", prompt);
+
+ // Use streaming to emit partial JSON as it's generated
+ // Tools and ResponseFormat are configured at agent level in ItineraryWorkflowExtensions
+ var fullResponse = new StringBuilder();
+ await foreach (var update in agent.RunStreamingAsync(prompt, cancellationToken: cancellationToken))
+ {
+ foreach (var content in update.Contents)
+ {
+ if (content is not TextContent textContent)
+ continue;
+
+ fullResponse.Append(textContent.Text);
+
+ await context.AddEventAsync(new ItineraryTextChunkEvent(Id, textContent.Text), cancellationToken);
+ }
+ }
+ var responseText = fullResponse.ToString();
+
+ logger.LogTrace("[ItineraryPlannerExecutor] Raw response: {Response}", responseText);
+ logger.LogDebug("[ItineraryPlannerExecutor] Completed - itinerary generated, language: {Language}", input.Language);
+
+ await context.AddEventAsync(new ExecutorStatusEvent($"Created {input.DayCount}-day itinerary for {input.DestinationName}"), cancellationToken);
+
+ return new ItineraryResult(responseText, input.Language);
+ }
+}
diff --git a/samples/EssentialsAISample/AI/4_TranslatorExecutor.cs b/samples/EssentialsAISample/AI/4_TranslatorExecutor.cs
new file mode 100644
index 000000000..57307c8ff
--- /dev/null
+++ b/samples/EssentialsAISample/AI/4_TranslatorExecutor.cs
@@ -0,0 +1,60 @@
+using System.Text;
+using Microsoft.Agents.AI;
+using Microsoft.Agents.AI.Workflows;
+using Microsoft.Extensions.AI;
+using Microsoft.Extensions.Logging;
+
+namespace EssentialsAISample.AI;
+
+///
+/// Agent 4: Translator - Translates the itinerary to target language (conditional) with streaming.
+/// No tools - just translation.
+/// Uses RunStreamingAsync to emit partial translated JSON.
+///
+internal sealed partial class TranslatorExecutor(AIAgent agent, ILogger logger)
+ : Executor("TranslatorExecutor")
+{
+ [MessageHandler]
+ private async ValueTask HandleAsync(
+ ItineraryResult input,
+ IWorkflowContext context,
+ CancellationToken cancellationToken = default)
+ {
+ logger.LogDebug("[TranslatorExecutor] Starting - translating to '{Language}'", input.TargetLanguage);
+ logger.LogTrace("[TranslatorExecutor] Input JSON: {Json}", input.ItineraryJson);
+
+ await context.AddEventAsync(new ExecutorStatusEvent($"Translating to {input.TargetLanguage}..."), cancellationToken);
+
+ var prompt = $"""
+ Translate to {input.TargetLanguage}:
+
+ {input.ItineraryJson}
+ """;
+
+ logger.LogTrace("[TranslatorExecutor] Prompt: {Prompt}", prompt);
+
+ // Use streaming to emit partial JSON as it's generated
+ // ResponseFormat is set at agent creation time in ItineraryWorkflowExtensions
+ var fullResponse = new StringBuilder();
+ await foreach (var update in agent.RunStreamingAsync(prompt, cancellationToken: cancellationToken))
+ {
+ foreach (var content in update.Contents)
+ {
+ if (content is not TextContent textContent)
+ continue;
+
+ fullResponse.Append(textContent.Text);
+
+ await context.AddEventAsync(new ItineraryTextChunkEvent(Id, textContent.Text), cancellationToken);
+ }
+ }
+ var responseText = fullResponse.ToString();
+
+ logger.LogTrace("[TranslatorExecutor] Raw response: {Response}", responseText);
+ logger.LogDebug("[TranslatorExecutor] Completed - translation to '{Language}' finished", input.TargetLanguage);
+
+ await context.AddEventAsync(new ExecutorStatusEvent($"Translated to {input.TargetLanguage}"), cancellationToken);
+
+ return new ItineraryResult(responseText, input.TargetLanguage);
+ }
+}
diff --git a/samples/EssentialsAISample/AI/5_OutputExecutor.cs b/samples/EssentialsAISample/AI/5_OutputExecutor.cs
new file mode 100644
index 000000000..ab0e69016
--- /dev/null
+++ b/samples/EssentialsAISample/AI/5_OutputExecutor.cs
@@ -0,0 +1,27 @@
+using Microsoft.Agents.AI.Workflows;
+using Microsoft.Extensions.Logging;
+
+namespace EssentialsAISample.AI;
+
+///
+/// Final executor that marks the workflow as complete.
+/// The itinerary JSON has already been streamed by ItineraryPlannerExecutor or TranslatorExecutor.
+///
+internal sealed partial class OutputExecutor(ILogger logger)
+ : Executor("OutputExecutor")
+{
+ [MessageHandler]
+ private async ValueTask HandleAsync(
+ ItineraryResult input,
+ IWorkflowContext context,
+ CancellationToken cancellationToken = default)
+ {
+ logger.LogDebug("[OutputExecutor] Starting - finalizing itinerary (language: {Language})", input.TargetLanguage);
+ logger.LogTrace("[OutputExecutor] Final JSON: {Json}", input.ItineraryJson);
+
+ // Don't re-emit the JSON - it was already streamed by ItineraryPlannerExecutor or TranslatorExecutor
+ await context.AddEventAsync(new ExecutorStatusEvent("Your itinerary is ready!"), cancellationToken);
+
+ logger.LogDebug("[OutputExecutor] Completed - workflow finished");
+ }
+}
diff --git a/samples/EssentialsAISample/AI/ItineraryWorkflowExtensions.cs b/samples/EssentialsAISample/AI/ItineraryWorkflowExtensions.cs
new file mode 100644
index 000000000..0537a6069
--- /dev/null
+++ b/samples/EssentialsAISample/AI/ItineraryWorkflowExtensions.cs
@@ -0,0 +1,197 @@
+using System.Text.Json;
+using System.Text.Json.Serialization;
+using EssentialsAISample.Models;
+using EssentialsAISample.Services;
+using Microsoft.Agents.AI;
+using Microsoft.Agents.AI.Hosting;
+using Microsoft.Agents.AI.Workflows;
+using Microsoft.Extensions.AI;
+using Microsoft.Extensions.Hosting;
+using Microsoft.Extensions.Logging;
+
+namespace EssentialsAISample.AI;
+
+///
+/// Extension methods to register the 4-agent itinerary workflow.
+/// All agent configuration (instructions, tools, response formats, content providers) is
+/// defined here. Executors contain only execution logic (streaming, status events, prompt assembly).
+///
+public static class ItineraryWorkflowExtensions
+{
+ internal static readonly JsonSerializerOptions JsonOptions = new()
+ {
+ PropertyNameCaseInsensitive = true,
+ PropertyNamingPolicy = JsonNamingPolicy.CamelCase,
+ Converters = { new JsonStringEnumConverter() },
+ };
+
+ ///
+ /// Registers the itinerary workflow with 4 specialized agents:
+ /// 1. Travel Planner - parses natural language, extracts intent (no tools, structured output)
+ /// 2. Researcher - uses RAG (semantic search) to find candidates, AI picks the best match
+ /// 3. Itinerary Planner - builds the itinerary with streaming (tool: findPointsOfInterest)
+ /// 4. Translator - translates if non-English with streaming (conditional, no tools)
+ ///
+ public static IHostApplicationBuilder AddItineraryWorkflow(this IHostApplicationBuilder builder)
+ {
+ // Tool: findPointsOfInterest - used by Agent 3
+ var findPoiTool = AIFunctionFactory.Create(
+ ItineraryWorkflowTools.FindPointsOfInterestAsync,
+ name: ItineraryWorkflowTools.FindPointsOfInterestToolName);
+
+ // Agent 1: Travel Planner - parses natural language, extracts intent
+ builder.AddAIAgent(
+ name: "travel-planner-agent",
+ instructions: """
+ You are a simple text parser. Extract 3 values from the user request.
+
+ Rules:
+ - place: The destination name, exactly as written.
+ - days: Number of days (default: 3).
+ - language: Output language (default: English).
+
+ Examples:
+ - "5-day trip to Maui in French" produces {"place": "Maui", "days": 5, "language": "French"}
+ - "Visit the Great Wall" produces {"place": "Great Wall", "days": 3, "language": "English"}
+ - "Plan a 7 day Japan trip in Spanish" produces {"place": "Japan", "days": 7, "language": "Spanish"}
+ - "Give me a Cape Town itinerary" produces {"place": "Cape Town", "days": 3, "language": "English"}
+ - "Itinerary for Tokyo" produces {"place": "Tokyo", "days": 3, "language": "English"}
+ """,
+ chatClientServiceKey: "local-model");
+
+ // Agent 2: Researcher - finds best matching destination using RAG via TextSearchProvider
+ builder.AddAIAgent("researcher-agent", (sp, name) =>
+ {
+ var chatClient = sp.GetRequiredKeyedService("local-model");
+ var dataService = sp.GetRequiredService();
+ var loggerFactory = sp.GetRequiredService();
+
+ var searchProvider = ItineraryWorkflowTools.CreateLandmarkSearchProvider(dataService, loggerFactory);
+
+ return chatClient.AsAIAgent(
+ new ChatClientAgentOptions
+ {
+ Name = name,
+ ChatOptions = new ChatOptions
+ {
+ Instructions = """
+ You are a travel researcher.
+ Your job is to select the best matching destination from the additional context provided.
+
+ Rules:
+ 1. You will be given additional context containing candidate destinations that match the user's request.
+ 2. Select the ONE destination that best matches what the user asked for.
+ 3. NEVER make up destinations - only choose from the provided candidates.
+ 4. If none of the candidates match well, pick the closest one.
+ 5. Include the destination's description from the context in your response.
+
+ Return the exact name of the best matching destination from the candidates.
+ """
+ },
+ AIContextProviders = [searchProvider],
+ },
+ loggerFactory);
+ });
+
+ // Agent 3: Itinerary Planner - builds detailed itineraries with tool calling
+ builder.AddAIAgent("itinerary-planner-agent", (sp, name) =>
+ {
+ var chatClient = sp.GetRequiredKeyedService("local-model");
+ var loggerFactory = sp.GetRequiredService();
+ return chatClient.AsAIAgent(
+ new ChatClientAgentOptions
+ {
+ Name = name,
+ ChatOptions = new ChatOptions
+ {
+ Temperature = 0.6f,
+ Instructions = $"""
+ You create detailed travel itineraries.
+
+ For each day include these places:
+ 1. An activity or attraction
+ 2. A hotel recommendation
+ 3. A restaurant recommendation
+
+ Rules:
+ 1. ALWAYS use the `{ItineraryWorkflowTools.FindPointsOfInterestToolName}` tool to discover real places near the destination.
+ 2. NEVER make up places or use your own knowledge.
+ 3. ONLY use places returned by the `{ItineraryWorkflowTools.FindPointsOfInterestToolName}` tool.
+ 4. PREFER the places returned by the `{ItineraryWorkflowTools.FindPointsOfInterestToolName}` tool instead of the destination description.
+
+ Give the itinerary a fun, creative title and engaging description.
+
+ Include a rationale explaining why you chose these activities for the traveler.
+ """,
+ ResponseFormat = ChatResponseFormat.ForJsonSchema(JsonOptions),
+ Tools = [findPoiTool],
+ },
+ },
+ loggerFactory,
+ services: sp);
+ });
+
+ // Agent 4: Translator - translates content with streaming
+ builder.AddAIAgent("translator-agent", (sp, name) =>
+ {
+ var chatClient = sp.GetRequiredKeyedService("cloud-model");
+ var loggerFactory = sp.GetRequiredService();
+ return chatClient.AsAIAgent(
+ new ChatClientAgentOptions
+ {
+ Name = name,
+ ChatOptions = new ChatOptions
+ {
+ Instructions = """
+ You are a professional translator.
+ Translate the provided JSON content to the target language.
+
+ Rules:
+ 1. ALWAYS preserve the JSON format exactly.
+ 2. ONLY translate the text values within the JSON.
+ 3. NEVER add explanations or commentary.
+ """,
+ ResponseFormat = ChatResponseFormat.ForJsonSchema(JsonOptions),
+ },
+ },
+ loggerFactory);
+ });
+
+ // Register the workflow
+ var workflow = builder.AddWorkflow("itinerary-workflow", (sp, key) =>
+ {
+ var travelPlannerAgent = sp.GetRequiredKeyedService("travel-planner-agent");
+ var researcherAgent = sp.GetRequiredKeyedService("researcher-agent");
+ var itineraryPlannerAgent = sp.GetRequiredKeyedService("itinerary-planner-agent");
+ var translatorAgent = sp.GetRequiredKeyedService("translator-agent");
+ var logger = sp.GetRequiredService().CreateLogger("ItineraryWorkflow");
+
+ // Create executors — thin wrappers with just execution logic
+ var travelPlannerExecutor = new TravelPlannerExecutor(travelPlannerAgent, logger);
+ var researcherExecutor = new ResearcherExecutor(researcherAgent, logger);
+ var itineraryPlannerExecutor = new ItineraryPlannerExecutor(itineraryPlannerAgent, logger);
+ var translatorExecutor = new TranslatorExecutor(translatorAgent, logger);
+ var outputExecutor = new OutputExecutor(logger);
+
+ // Build the 4-agent workflow with conditional translation:
+ // Travel Planner → Researcher → Itinerary Planner → (conditional) Translator → Output
+ var workflow = new WorkflowBuilder(travelPlannerExecutor)
+ .WithName(key)
+ .AddEdge(travelPlannerExecutor, researcherExecutor)
+ .AddEdge(researcherExecutor, itineraryPlannerExecutor)
+ .AddSwitch(itineraryPlannerExecutor, switch_ => switch_
+ .AddCase(r => r is not null && !string.Equals(r.TargetLanguage, "English", StringComparison.OrdinalIgnoreCase), translatorExecutor)
+ .WithDefault(outputExecutor))
+ .AddEdge(translatorExecutor, outputExecutor)
+ .WithOutputFrom(outputExecutor)
+ .Build();
+
+ return workflow;
+ });
+
+ // Register the workflow as an AI agent for easy invocation
+ workflow.AddAsAIAgent("itinerary-workflow-agent");
+
+ return builder;
+ }
+}
diff --git a/samples/EssentialsAISample/AI/ItineraryWorkflowTools.cs b/samples/EssentialsAISample/AI/ItineraryWorkflowTools.cs
new file mode 100644
index 000000000..a8a699743
--- /dev/null
+++ b/samples/EssentialsAISample/AI/ItineraryWorkflowTools.cs
@@ -0,0 +1,84 @@
+using System.ComponentModel;
+using EssentialsAISample.Models;
+using EssentialsAISample.Services;
+using Microsoft.Agents.AI;
+using Microsoft.Extensions.AI;
+using Microsoft.Extensions.Logging;
+
+namespace EssentialsAISample.AI;
+
+///
+/// Static tool functions and content providers used by the itinerary workflow.
+/// Defined here so they can be registered centrally in .
+///
+internal static class ItineraryWorkflowTools
+{
+ public const string FindPointsOfInterestToolName = "findPointsOfInterest";
+
+ ///
+ /// Creates a that performs RAG via .
+ /// The provider runs in BeforeAIInvoke mode, automatically searching for matching landmarks
+ /// and injecting them as context before each AI call.
+ ///
+ public static TextSearchProvider CreateLandmarkSearchProvider(DataService dataService, ILoggerFactory loggerFactory)
+ {
+ var ragLogger = loggerFactory.CreateLogger();
+
+ return new TextSearchProvider(
+ async (query, ct) =>
+ {
+ ragLogger.LogDebug("[RAG] Searching landmarks for query: '{Query}'", query);
+ var results = await dataService.SearchLandmarksAsync(query, maxResults: 5);
+ ragLogger.LogDebug("[RAG] Found {Count} landmarks: {Names}",
+ results.Count, string.Join(", ", results.Select(r => r.Name)));
+ return results.Select(r => new TextSearchProvider.TextSearchResult
+ {
+ Text = $"{r.Name}: {r.ShortDescription}",
+ SourceName = r.Name,
+ });
+ },
+ new TextSearchProviderOptions
+ {
+ SearchTime = TextSearchProviderOptions.TextSearchBehavior.BeforeAIInvoke,
+ },
+ loggerFactory);
+ }
+
+ [Description("Finds points of interest (hotels, restaurants, activities) near a destination.")]
+ public static Task FindPointsOfInterestAsync(
+ [Description("The name of the destination to search near.")]
+ string destinationName,
+ [Description("The category of place to find (Hotel, Restaurant, Cafe, Museum, etc.).")]
+ PointOfInterestCategory category,
+ [Description("A natural language query to refine the search.")]
+ string additionalSearchQuery,
+ IServiceProvider services)
+ {
+ var logger = services.GetService()?.CreateLogger("ItineraryWorkflowTools");
+
+ var suggestions = GetSuggestions(category);
+ var result = $"""
+ These {category} options are available near {destinationName}:
+
+ - {string.Join(Environment.NewLine + "- ", suggestions)}
+ """;
+
+ logger?.LogTrace("[ItineraryWorkflowTools] findPointsOfInterest - destination={Destination}, category={Category}, query={Query}, results={Count}",
+ destinationName, category, additionalSearchQuery ?? "(none)", suggestions.Length);
+
+ return Task.FromResult(result);
+ }
+
+ private static string[] GetSuggestions(PointOfInterestCategory category) =>
+ category switch
+ {
+ PointOfInterestCategory.Cafe => ["Cafe 1", "Cafe 2", "Cafe 3"],
+ PointOfInterestCategory.Campground => ["Campground 1", "Campground 2", "Campground 3"],
+ PointOfInterestCategory.Hotel => ["Hotel 1", "Hotel 2", "Hotel 3"],
+ PointOfInterestCategory.Marina => ["Marina 1", "Marina 2", "Marina 3"],
+ PointOfInterestCategory.Museum => ["Museum 1", "Museum 2", "Museum 3"],
+ PointOfInterestCategory.NationalMonument => ["The National Rock 1", "The National Rock 2", "The National Rock 3"],
+ PointOfInterestCategory.Restaurant => ["Restaurant 1", "Restaurant 2", "Restaurant 3"],
+ _ => []
+ };
+}
diff --git a/samples/EssentialsAISample/AI/WorkflowEvents.cs b/samples/EssentialsAISample/AI/WorkflowEvents.cs
new file mode 100644
index 000000000..0b3cd92cc
--- /dev/null
+++ b/samples/EssentialsAISample/AI/WorkflowEvents.cs
@@ -0,0 +1,24 @@
+using Microsoft.Agents.AI.Workflows;
+
+namespace EssentialsAISample.AI;
+
+///
+/// Custom workflow event for status updates from executors.
+/// Emits a single message for display in a fading status trail.
+///
+public sealed class ExecutorStatusEvent(string message) : WorkflowEvent(message)
+{
+ public string StatusMessage { get; } = message;
+}
+
+///
+/// Custom workflow event for streaming text content from an executor.
+/// Only emits text content, not function calls or other content types.
+///
+public sealed class ItineraryTextChunkEvent(string executorId, string textChunk) : ExecutorEvent(executorId, textChunk)
+{
+ ///
+ /// The text chunk to stream.
+ ///
+ public string TextChunk { get; } = textChunk;
+}
diff --git a/samples/EssentialsAISample/AI/WorkflowModels.cs b/samples/EssentialsAISample/AI/WorkflowModels.cs
new file mode 100644
index 000000000..73f909ea1
--- /dev/null
+++ b/samples/EssentialsAISample/AI/WorkflowModels.cs
@@ -0,0 +1,46 @@
+using System.ComponentModel;
+using System.Text.Json.Serialization;
+
+namespace EssentialsAISample.AI;
+
+///
+/// Result from the Travel Planner Agent - raw extraction of user intent.
+/// Short JSON names (place/days/language) reduce misspelling by small language models.
+///
+public record TravelPlanResult(
+ [property: JsonPropertyName("place")]
+ [property: Description("The destination name mentioned by the user.")]
+ string DestinationName,
+ [property: JsonPropertyName("days")]
+ [property: Description("Number of days for the trip. Default is 3.")]
+ int DayCount,
+ [property: JsonPropertyName("language")]
+ [property: Description("Output language for the itinerary. Default is English.")]
+ string Language);
+
+///
+/// Result from the Researcher Agent - the best matching destination (for JSON schema).
+///
+internal record DestinationMatchResult(
+ [property: JsonPropertyName("dest")]
+ [property: Description("The exact name of the best matching destination from the available list.")]
+ string MatchedDestinationName,
+ [property: JsonPropertyName("desc")]
+ [property: Description("A brief description of the matched destination, based on the information provided in the additional context.")]
+ string MatchedDestinationDescription);
+
+///
+/// Result from the Researcher Agent - includes destination name and description from RAG context.
+///
+public record ResearchResult(
+ string? DestinationName,
+ string? DestinationDescription,
+ int DayCount,
+ string Language);
+
+///
+/// Result from the Itinerary Planner Agent.
+///
+public record ItineraryResult(
+ string ItineraryJson,
+ string TargetLanguage);
diff --git a/samples/EssentialsAISample/App.xaml b/samples/EssentialsAISample/App.xaml
new file mode 100644
index 000000000..2fcadf46a
--- /dev/null
+++ b/samples/EssentialsAISample/App.xaml
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/samples/EssentialsAISample/App.xaml.cs b/samples/EssentialsAISample/App.xaml.cs
new file mode 100644
index 000000000..a8ed5bf0a
--- /dev/null
+++ b/samples/EssentialsAISample/App.xaml.cs
@@ -0,0 +1,14 @@
+namespace EssentialsAISample;
+
+public partial class App : Application
+{
+ public App()
+ {
+ InitializeComponent();
+ }
+
+ protected override Window CreateWindow(IActivationState? activationState)
+ {
+ return new Window(new AppShell());
+ }
+}
\ No newline at end of file
diff --git a/samples/EssentialsAISample/AppShell.xaml b/samples/EssentialsAISample/AppShell.xaml
new file mode 100644
index 000000000..2c77f90cb
--- /dev/null
+++ b/samples/EssentialsAISample/AppShell.xaml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
diff --git a/samples/EssentialsAISample/AppShell.xaml.cs b/samples/EssentialsAISample/AppShell.xaml.cs
new file mode 100644
index 000000000..3e7b03969
--- /dev/null
+++ b/samples/EssentialsAISample/AppShell.xaml.cs
@@ -0,0 +1,14 @@
+using EssentialsAISample.Pages;
+
+namespace EssentialsAISample;
+
+public partial class AppShell : Shell
+{
+ public AppShell()
+ {
+ InitializeComponent();
+
+ Routing.RegisterRoute(nameof(LandmarkDetailPage), typeof(LandmarkDetailPage));
+ Routing.RegisterRoute(nameof(TripPlanningPage), typeof(TripPlanningPage));
+ }
+}
diff --git a/samples/EssentialsAISample/Converters/InvertedBoolConverter.cs b/samples/EssentialsAISample/Converters/InvertedBoolConverter.cs
new file mode 100644
index 000000000..721cdc5ef
--- /dev/null
+++ b/samples/EssentialsAISample/Converters/InvertedBoolConverter.cs
@@ -0,0 +1,16 @@
+using System.Globalization;
+
+namespace EssentialsAISample.Converters;
+
+public class InvertedBoolConverter : IValueConverter
+{
+ public object Convert(object? value, Type targetType, object? parameter, CultureInfo culture)
+ {
+ return value is bool boolValue && !boolValue;
+ }
+
+ public object ConvertBack(object? value, Type targetType, object? parameter, CultureInfo culture)
+ {
+ return value is bool boolValue && !boolValue;
+ }
+}
diff --git a/samples/EssentialsAISample/Converters/IsNotNullConverter.cs b/samples/EssentialsAISample/Converters/IsNotNullConverter.cs
new file mode 100644
index 000000000..f4979c944
--- /dev/null
+++ b/samples/EssentialsAISample/Converters/IsNotNullConverter.cs
@@ -0,0 +1,16 @@
+using System.Globalization;
+
+namespace EssentialsAISample.Converters;
+
+public class IsNotNullConverter : IValueConverter
+{
+ public object Convert(object? value, Type targetType, object? parameter, CultureInfo culture)
+ {
+ return value is not null;
+ }
+
+ public object ConvertBack(object? value, Type targetType, object? parameter, CultureInfo culture)
+ {
+ throw new NotImplementedException();
+ }
+}
diff --git a/samples/EssentialsAISample/Converters/IsNotNullOrEmptyConverter.cs b/samples/EssentialsAISample/Converters/IsNotNullOrEmptyConverter.cs
new file mode 100644
index 000000000..70247313c
--- /dev/null
+++ b/samples/EssentialsAISample/Converters/IsNotNullOrEmptyConverter.cs
@@ -0,0 +1,16 @@
+using System.Globalization;
+
+namespace EssentialsAISample.Converters;
+
+public class IsNotNullOrEmptyConverter : IValueConverter
+{
+ public object Convert(object? value, Type targetType, object? parameter, CultureInfo culture)
+ {
+ return value is string str && !string.IsNullOrWhiteSpace(str);
+ }
+
+ public object ConvertBack(object? value, Type targetType, object? parameter, CultureInfo culture)
+ {
+ throw new NotImplementedException();
+ }
+}
diff --git a/samples/EssentialsAISample/Converters/IsPositiveConverter.cs b/samples/EssentialsAISample/Converters/IsPositiveConverter.cs
new file mode 100644
index 000000000..7beabb633
--- /dev/null
+++ b/samples/EssentialsAISample/Converters/IsPositiveConverter.cs
@@ -0,0 +1,16 @@
+using System.Globalization;
+
+namespace EssentialsAISample.Converters;
+
+public class IsPositiveConverter : IValueConverter
+{
+ public object Convert(object? value, Type targetType, object? parameter, CultureInfo culture)
+ {
+ return value is int i && i > 0;
+ }
+
+ public object ConvertBack(object? value, Type targetType, object? parameter, CultureInfo culture)
+ {
+ throw new NotImplementedException();
+ }
+}
diff --git a/samples/EssentialsAISample/EssentialsAISample.csproj b/samples/EssentialsAISample/EssentialsAISample.csproj
new file mode 100644
index 000000000..0c10c2931
--- /dev/null
+++ b/samples/EssentialsAISample/EssentialsAISample.csproj
@@ -0,0 +1,85 @@
+
+
+
+ net10.0-android;net10.0-ios;net10.0-maccatalyst
+ $(TargetFrameworks);net10.0-windows10.0.19041.0
+ EssentialsAISample
+ Microsoft.EssentialsAISample
+ Exe
+ true
+ true
+ false
+ preview
+ $(NoWarn);MAUIAI0001
+ SourceGen
+
+ maccatalyst-x64
+ maccatalyst-arm64
+ 2727d4aa-a3a5-484b-9447-91604761972b
+
+
+
+ Essentials AI
+ com.microsoft.maui.essentials.ai
+ 1.0
+ 1
+ None
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ $(DefineConstants);ENABLE_OPENAI_CLIENT
+
+
+
+
+
+
+
+
+
+
+
+
+
+ $([System.Environment]::GetFolderPath(SpecialFolder.UserProfile))\AppData\Roaming\Microsoft\UserSecrets\$(UserSecretsId)\secrets.json
+
+
+ $([System.Environment]::GetFolderPath(SpecialFolder.UserProfile))/.microsoft/usersecrets/$(UserSecretsId)/secrets.json
+
+
+
+
+
+
+
+
diff --git a/samples/EssentialsAISample/FluentUI.cs b/samples/EssentialsAISample/FluentUI.cs
new file mode 100644
index 000000000..2088acff0
--- /dev/null
+++ b/samples/EssentialsAISample/FluentUI.cs
@@ -0,0 +1,7918 @@
+namespace EssentialsAISample;
+
+// Generated by IconFont2Code: https://andreinitescu.github.io/IconFont2Code
+static class FluentUI
+{
+ public const string FontFamily = "FluentUI";
+
+ public const string access_time_20_regular = "\ue000";
+ public const string access_time_24_regular = "\uf101";
+ public const string accessibility_16_regular = "\uf102";
+ public const string accessibility_20_regular = "\uf103";
+ public const string accessibility_24_regular = "\uf104";
+ public const string accessibility_28_regular = "\uf105";
+ public const string accessibility_32_regular = "\ue001";
+ public const string accessibility_48_regular = "\ue002";
+ public const string accessibility_checkmark_20_regular = "\ue003";
+ public const string accessibility_checkmark_24_regular = "\ue004";
+ public const string accessibility_checkmark_28_regular = "\uf00a";
+ public const string accessibility_checkmark_32_regular = "\uf00b";
+ public const string accessibility_checkmark_48_regular = "\uf00c";
+ public const string accessibility_error_20_regular = "\U000f0551";
+ public const string accessibility_error_24_regular = "\U000f0552";
+ public const string accessibility_question_mark_20_regular = "\U000f0553";
+ public const string accessibility_question_mark_24_regular = "\U000f0554";
+ public const string add_12_regular = "\uf107";
+ public const string add_16_regular = "\uf108";
+ public const string add_20_regular = "\uf109";
+ public const string add_24_regular = "\uf10a";
+ public const string add_28_regular = "\uf10b";
+ public const string add_32_regular = "\uf58d";
+ public const string add_48_regular = "\uf598";
+ public const string add_circle_12_regular = "\uf00d";
+ public const string add_circle_16_regular = "\ue005";
+ public const string add_circle_20_regular = "\uf10c";
+ public const string add_circle_24_regular = "\uf10d";
+ public const string add_circle_28_regular = "\uf10e";
+ public const string add_circle_32_regular = "\ue006";
+ public const string add_square_16_regular = "\U000f01e2";
+ public const string add_square_20_regular = "\ue007";
+ public const string add_square_24_regular = "\uf8ca";
+ public const string add_square_28_regular = "\U000f01e3";
+ public const string add_square_32_regular = "\U000f01e4";
+ public const string add_square_48_regular = "\U000f01e5";
+ public const string add_square_multiple_16_regular = "\ue008";
+ public const string add_square_multiple_20_regular = "\ue009";
+ public const string add_square_multiple_24_regular = "\U000f0266";
+ public const string add_subtract_circle_16_regular = "\ue00a";
+ public const string add_subtract_circle_20_regular = "\ue00b";
+ public const string add_subtract_circle_24_regular = "\ue00c";
+ public const string add_subtract_circle_28_regular = "\ue00d";
+ public const string add_subtract_circle_48_regular = "\ue00e";
+ public const string airplane_20_regular = "\uf10f";
+ public const string airplane_24_regular = "\uf110";
+ public const string airplane_landing_16_regular = "\ue0ed";
+ public const string airplane_landing_20_regular = "\ue0ee";
+ public const string airplane_landing_24_regular = "\ue0ef";
+ public const string airplane_take_off_16_regular = "\uf111";
+ public const string airplane_take_off_20_regular = "\uf112";
+ public const string airplane_take_off_24_regular = "\uf113";
+ public const string album_20_regular = "\ue00f";
+ public const string album_24_regular = "\ue010";
+ public const string album_add_20_regular = "\ue011";
+ public const string album_add_24_regular = "\ue012";
+ public const string alert_12_regular = "\ue013";
+ public const string alert_16_regular = "\ue014";
+ public const string alert_20_regular = "\uf114";
+ public const string alert_24_regular = "\uf115";
+ public const string alert_28_regular = "\uf116";
+ public const string alert_32_regular = "\ue015";
+ public const string alert_48_regular = "\ue016";
+ public const string alert_badge_16_regular = "\ue017";
+ public const string alert_badge_20_regular = "\ue018";
+ public const string alert_badge_24_regular = "\ue019";
+ public const string alert_off_16_regular = "\uf117";
+ public const string alert_off_20_regular = "\uf118";
+ public const string alert_off_24_regular = "\uf119";
+ public const string alert_off_28_regular = "\uf11a";
+ public const string alert_on_16_regular = "\U000f03d0";
+ public const string alert_on_20_regular = "\ue01a";
+ public const string alert_on_24_regular = "\uf11b";
+ public const string alert_snooze_12_regular = "\ue01b";
+ public const string alert_snooze_16_regular = "\ue01c";
+ public const string alert_snooze_20_regular = "\uf11c";
+ public const string alert_snooze_24_regular = "\uf11d";
+ public const string alert_urgent_16_regular = "\ue01d";
+ public const string alert_urgent_20_regular = "\uf11e";
+ public const string alert_urgent_24_regular = "\uf11f";
+ public const string align_bottom_16_regular = "\ue01e";
+ public const string align_bottom_20_regular = "\ue01f";
+ public const string align_bottom_24_regular = "\ue020";
+ public const string align_bottom_28_regular = "\ue021";
+ public const string align_bottom_32_regular = "\ue022";
+ public const string align_bottom_48_regular = "\ue023";
+ public const string align_center_horizontal_16_regular = "\ue024";
+ public const string align_center_horizontal_20_regular = "\ue025";
+ public const string align_center_horizontal_24_regular = "\ue026";
+ public const string align_center_horizontal_28_regular = "\ue027";
+ public const string align_center_horizontal_32_regular = "\ue028";
+ public const string align_center_horizontal_48_regular = "\ue029";
+ public const string align_center_vertical_16_regular = "\ue02a";
+ public const string align_center_vertical_20_regular = "\ue02b";
+ public const string align_center_vertical_24_regular = "\ue02c";
+ public const string align_center_vertical_28_regular = "\ue02d";
+ public const string align_center_vertical_32_regular = "\ue02e";
+ public const string align_center_vertical_48_regular = "\ue02f";
+ public const string align_distribute_bottom_16_regular = "\uf09c";
+ public const string align_distribute_left_16_regular = "\uf09d";
+ public const string align_distribute_right_16_regular = "\uf09e";
+ public const string align_distribute_top_16_regular = "\uf09f";
+ public const string align_end_horizontal_20_regular = "\ue030";
+ public const string align_end_vertical_20_regular = "\ue031";
+ public const string align_left_16_regular = "\ue032";
+ public const string align_left_20_regular = "\ue033";
+ public const string align_left_24_regular = "\ue034";
+ public const string align_left_28_regular = "\ue035";
+ public const string align_left_32_regular = "\ue036";
+ public const string align_left_48_regular = "\ue037";
+ public const string align_right_16_regular = "\ue038";
+ public const string align_right_20_regular = "\ue039";
+ public const string align_right_24_regular = "\ue03a";
+ public const string align_right_28_regular = "\ue03b";
+ public const string align_right_32_regular = "\ue03c";
+ public const string align_right_48_regular = "\ue03d";
+ public const string align_space_around_horizontal_20_regular = "\ue03e";
+ public const string align_space_around_vertical_20_regular = "\ue03f";
+ public const string align_space_between_horizontal_20_regular = "\ue040";
+ public const string align_space_between_vertical_20_regular = "\ue041";
+ public const string align_space_evenly_horizontal_20_regular = "\ue042";
+ public const string align_space_evenly_horizontal_24_regular = "\ue0f0";
+ public const string align_space_evenly_vertical_20_regular = "\ue043";
+ public const string align_space_evenly_vertical_24_regular = "\U000f01b5";
+ public const string align_space_fit_vertical_20_regular = "\ue044";
+ public const string align_start_horizontal_20_regular = "\ue045";
+ public const string align_start_vertical_20_regular = "\ue046";
+ public const string align_straighten_20_regular = "\U000f01b6";
+ public const string align_straighten_24_regular = "\U000f01b7";
+ public const string align_stretch_horizontal_16_regular = "\uf0a0";
+ public const string align_stretch_horizontal_20_regular = "\ue047";
+ public const string align_stretch_vertical_16_regular = "\uf0a1";
+ public const string align_stretch_vertical_20_regular = "\ue048";
+ public const string align_top_16_regular = "\ue049";
+ public const string align_top_20_regular = "\ue04a";
+ public const string align_top_24_regular = "\ue04b";
+ public const string align_top_28_regular = "\ue04c";
+ public const string align_top_32_regular = "\ue04d";
+ public const string align_top_48_regular = "\ue04e";
+ public const string animal_cat_16_regular = "\uf106";
+ public const string animal_cat_20_regular = "\uf126";
+ public const string animal_cat_24_regular = "\uf127";
+ public const string animal_cat_28_regular = "\uf128";
+ public const string animal_dog_16_regular = "\ue04f";
+ public const string animal_dog_20_regular = "\uf120";
+ public const string animal_dog_24_regular = "\uf121";
+ public const string animal_rabbit_16_regular = "\ue050";
+ public const string animal_rabbit_20_regular = "\ue051";
+ public const string animal_rabbit_24_regular = "\ue052";
+ public const string animal_rabbit_28_regular = "\ue053";
+ public const string animal_rabbit_32_regular = "\ueec1";
+ public const string animal_rabbit_off_20_regular = "\ueee4";
+ public const string animal_rabbit_off_32_regular = "\ueee5";
+ public const string animal_turtle_16_regular = "\ue054";
+ public const string animal_turtle_20_regular = "\ue055";
+ public const string animal_turtle_24_regular = "\ue056";
+ public const string animal_turtle_28_regular = "\ue057";
+ public const string app_folder_16_regular = "\ue058";
+ public const string app_folder_20_regular = "\uf122";
+ public const string app_folder_24_regular = "\uf123";
+ public const string app_folder_28_regular = "\ue059";
+ public const string app_folder_32_regular = "\ue05a";
+ public const string app_folder_48_regular = "\ue05b";
+ public const string app_generic_20_regular = "\ue05c";
+ public const string app_generic_24_regular = "\uf124";
+ public const string app_generic_32_regular = "\uefb9";
+ public const string app_generic_48_regular = "\U000f015e";
+ public const string app_recent_20_regular = "\ue05d";
+ public const string app_recent_24_regular = "\uf125";
+ public const string app_store_24_regular = "\uf12a";
+ public const string app_title_20_regular = "\ue05e";
+ public const string app_title_24_regular = "\uf12b";
+ public const string approvals_app_16_regular = "\ue05f";
+ public const string approvals_app_20_regular = "\ue060";
+ public const string approvals_app_24_regular = "\uf130";
+ public const string approvals_app_28_regular = "\uf131";
+ public const string approvals_app_32_regular = "\ue061";
+ public const string apps_16_regular = "\uf132";
+ public const string apps_20_regular = "\uf133";
+ public const string apps_24_regular = "\uf134";
+ public const string apps_28_regular = "\uf135";
+ public const string apps_32_regular = "\ueebd";
+ public const string apps_48_regular = "\uf599";
+ public const string apps_add_in_16_regular = "\ue062";
+ public const string apps_add_in_20_regular = "\uf136";
+ public const string apps_add_in_24_regular = "\uf137";
+ public const string apps_add_in_28_regular = "\ue063";
+ public const string apps_list_20_regular = "\uf8cb";
+ public const string apps_list_24_regular = "\uf138";
+ public const string apps_list_detail_20_regular = "\ue064";
+ public const string apps_list_detail_24_regular = "\ue065";
+ public const string apps_settings_16_regular = "\U000f059c";
+ public const string apps_settings_20_regular = "\U000f059d";
+ public const string apps_shield_16_regular = "\U000f059e";
+ public const string apps_shield_20_regular = "\U000f059f";
+ public const string archive_16_regular = "\uf8cc";
+ public const string archive_20_regular = "\uf139";
+ public const string archive_24_regular = "\uf13a";
+ public const string archive_28_regular = "\uf13b";
+ public const string archive_32_regular = "\ue066";
+ public const string archive_48_regular = "\uf13c";
+ public const string archive_arrow_back_16_regular = "\ue067";
+ public const string archive_arrow_back_20_regular = "\ue068";
+ public const string archive_arrow_back_24_regular = "\ue069";
+ public const string archive_arrow_back_28_regular = "\ue06a";
+ public const string archive_arrow_back_32_regular = "\ue06b";
+ public const string archive_arrow_back_48_regular = "\ue06c";
+ public const string archive_multiple_16_regular = "\ue06d";
+ public const string archive_multiple_20_regular = "\ue06e";
+ public const string archive_multiple_24_regular = "\ue06f";
+ public const string archive_settings_16_regular = "\uf129";
+ public const string archive_settings_20_regular = "\ue070";
+ public const string archive_settings_24_regular = "\ue071";
+ public const string archive_settings_28_regular = "\ue072";
+ public const string archive_settings_32_regular = "\U000f0423";
+ public const string arrow_autofit_content_20_regular = "\ue073";
+ public const string arrow_autofit_content_24_regular = "\ue074";
+ public const string arrow_autofit_down_20_regular = "\ue075";
+ public const string arrow_autofit_down_24_regular = "\ue076";
+ public const string arrow_autofit_height_20_regular = "\ue077";
+ public const string arrow_autofit_height_24_regular = "\uf8cd";
+ public const string arrow_autofit_height_dotted_20_regular = "\ue078";
+ public const string arrow_autofit_height_dotted_24_regular = "\ue079";
+ public const string arrow_autofit_height_in_20_regular = "\U000f010e";
+ public const string arrow_autofit_height_in_24_regular = "\U000f010f";
+ public const string arrow_autofit_up_20_regular = "\ue07a";
+ public const string arrow_autofit_up_24_regular = "\ue07b";
+ public const string arrow_autofit_width_20_regular = "\ue07c";
+ public const string arrow_autofit_width_24_regular = "\uf8ce";
+ public const string arrow_autofit_width_dotted_20_regular = "\ue07d";
+ public const string arrow_autofit_width_dotted_24_regular = "\ue07e";
+ public const string arrow_between_down_20_regular = "\ue07f";
+ public const string arrow_between_down_24_regular = "\ue080";
+ public const string arrow_between_up_20_regular = "\ue081";
+ public const string arrow_bidirectional_left_right_16_regular = "\U000f02a0";
+ public const string arrow_bidirectional_left_right_20_regular = "\U000f02a1";
+ public const string arrow_bidirectional_left_right_24_regular = "\U000f02a2";
+ public const string arrow_bidirectional_left_right_28_regular = "\U000f02a3";
+ public const string arrow_bidirectional_up_down_12_regular = "\ue082";
+ public const string arrow_bidirectional_up_down_16_regular = "\ue083";
+ public const string arrow_bidirectional_up_down_20_regular = "\ue084";
+ public const string arrow_bidirectional_up_down_24_regular = "\ue085";
+ public const string arrow_bounce_16_regular = "\ue086";
+ public const string arrow_bounce_20_regular = "\ue087";
+ public const string arrow_bounce_24_regular = "\ue088";
+ public const string arrow_circle_down_12_regular = "\ue089";
+ public const string arrow_circle_down_16_regular = "\ue08a";
+ public const string arrow_circle_down_20_regular = "\uf12c";
+ public const string arrow_circle_down_24_regular = "\uf12d";
+ public const string arrow_circle_down_28_regular = "\ue08b";
+ public const string arrow_circle_down_32_regular = "\ue08c";
+ public const string arrow_circle_down_48_regular = "\ue08d";
+ public const string arrow_circle_down_double_20_regular = "\uf12e";
+ public const string arrow_circle_down_double_24_regular = "\uf12f";
+ public const string arrow_circle_down_right_16_regular = "\ue08e";
+ public const string arrow_circle_down_right_20_regular = "\ue08f";
+ public const string arrow_circle_down_right_24_regular = "\ue090";
+ public const string arrow_circle_down_split_20_regular = "\uf143";
+ public const string arrow_circle_down_split_24_regular = "\uf144";
+ public const string arrow_circle_down_up_20_regular = "\ue091";
+ public const string arrow_circle_left_12_regular = "\ue092";
+ public const string arrow_circle_left_16_regular = "\ue093";
+ public const string arrow_circle_left_20_regular = "\ue094";
+ public const string arrow_circle_left_24_regular = "\ue095";
+ public const string arrow_circle_left_28_regular = "\ue096";
+ public const string arrow_circle_left_32_regular = "\ue097";
+ public const string arrow_circle_left_48_regular = "\ue098";
+ public const string arrow_circle_right_12_regular = "\ue099";
+ public const string arrow_circle_right_16_regular = "\ue09a";
+ public const string arrow_circle_right_20_regular = "\ue09b";
+ public const string arrow_circle_right_24_regular = "\ue09c";
+ public const string arrow_circle_right_28_regular = "\ue09d";
+ public const string arrow_circle_right_32_regular = "\ue09e";
+ public const string arrow_circle_right_48_regular = "\ue09f";
+ public const string arrow_circle_up_12_regular = "\ue0a0";
+ public const string arrow_circle_up_16_regular = "\ue0a1";
+ public const string arrow_circle_up_20_regular = "\ue0a2";
+ public const string arrow_circle_up_24_regular = "\ue0a3";
+ public const string arrow_circle_up_28_regular = "\ue0a4";
+ public const string arrow_circle_up_32_regular = "\ue0a5";
+ public const string arrow_circle_up_48_regular = "\ue0a6";
+ public const string arrow_circle_up_left_20_regular = "\ue0a7";
+ public const string arrow_circle_up_left_24_regular = "\ue0a8";
+ public const string arrow_circle_up_right_20_regular = "\U000f00ce";
+ public const string arrow_circle_up_right_24_regular = "\U000f00cf";
+ public const string arrow_clockwise_12_regular = "\ue0a9";
+ public const string arrow_clockwise_16_regular = "\ue0aa";
+ public const string arrow_clockwise_20_regular = "\uf13d";
+ public const string arrow_clockwise_24_regular = "\uf13e";
+ public const string arrow_clockwise_28_regular = "\ue0ab";
+ public const string arrow_clockwise_32_regular = "\ue0ac";
+ public const string arrow_clockwise_48_regular = "\ue0ad";
+ public const string arrow_clockwise_dashes_16_regular = "\U000f0462";
+ public const string arrow_clockwise_dashes_20_regular = "\ue0ae";
+ public const string arrow_clockwise_dashes_24_regular = "\ue0af";
+ public const string arrow_clockwise_dashes_32_regular = "\U000f0463";
+ public const string arrow_collapse_all_16_regular = "\U000f0621";
+ public const string arrow_collapse_all_20_regular = "\ue0b0";
+ public const string arrow_collapse_all_24_regular = "\ue0b1";
+ public const string arrow_counterclockwise_12_regular = "\ue0b2";
+ public const string arrow_counterclockwise_16_regular = "\ue0b3";
+ public const string arrow_counterclockwise_20_regular = "\uf13f";
+ public const string arrow_counterclockwise_24_regular = "\uf140";
+ public const string arrow_counterclockwise_28_regular = "\uf8cf";
+ public const string arrow_counterclockwise_32_regular = "\ue0b4";
+ public const string arrow_counterclockwise_48_regular = "\ue0b5";
+ public const string arrow_counterclockwise_dashes_20_regular = "\ue0b6";
+ public const string arrow_counterclockwise_dashes_24_regular = "\ue0b7";
+ public const string arrow_curve_down_left_16_regular = "\ue0b8";
+ public const string arrow_curve_down_left_20_regular = "\uf141";
+ public const string arrow_curve_down_left_24_regular = "\ue0b9";
+ public const string arrow_curve_down_left_28_regular = "\ue0ba";
+ public const string arrow_curve_down_right_20_regular = "\uf142";
+ public const string arrow_curve_up_left_20_regular = "\uf145";
+ public const string arrow_curve_up_right_20_regular = "\uf146";
+ public const string arrow_down_12_regular = "\uf8d0";
+ public const string arrow_down_16_regular = "\uf147";
+ public const string arrow_down_20_regular = "\uf148";
+ public const string arrow_down_24_regular = "\uf149";
+ public const string arrow_down_28_regular = "\uf14a";
+ public const string arrow_down_32_regular = "\uf14c";
+ public const string arrow_down_48_regular = "\uf14d";
+ public const string arrow_down_exclamation_16_regular = "\U000f03d1";
+ public const string arrow_down_exclamation_20_regular = "\U000f03d2";
+ public const string arrow_down_exclamation_24_regular = "\U000f0555";
+ public const string arrow_down_left_16_regular = "\uf8d1";
+ public const string arrow_down_left_20_regular = "\ue0bb";
+ public const string arrow_down_left_24_regular = "\uf14b";
+ public const string arrow_down_left_32_regular = "\ue0bc";
+ public const string arrow_down_left_48_regular = "\ue0bd";
+ public const string arrow_download_16_regular = "\uf14f";
+ public const string arrow_download_20_regular = "\uf150";
+ public const string arrow_download_24_regular = "\uf151";
+ public const string arrow_download_28_regular = "\U000f0380";
+ public const string arrow_download_32_regular = "\U000f0381";
+ public const string arrow_download_48_regular = "\uf152";
+ public const string arrow_download_off_16_regular = "\U000f03a8";
+ public const string arrow_download_off_20_regular = "\U000f03a9";
+ public const string arrow_download_off_24_regular = "\U000f03aa";
+ public const string arrow_download_off_28_regular = "\U000f03ab";
+ public const string arrow_download_off_32_regular = "\U000f03ac";
+ public const string arrow_download_off_48_regular = "\U000f03ad";
+ public const string arrow_eject_20_regular = "\ue0be";
+ public const string arrow_enter_16_regular = "\U000f015f";
+ public const string arrow_enter_20_regular = "\ue0bf";
+ public const string arrow_enter_left_20_regular = "\ue0c0";
+ public const string arrow_enter_left_24_regular = "\ue0c1";
+ public const string arrow_enter_up_20_regular = "\ue0c2";
+ public const string arrow_enter_up_24_regular = "\ue0c3";
+ public const string arrow_exit_20_regular = "\ue0c4";
+ public const string arrow_expand_16_regular = "\U000f0382";
+ public const string arrow_expand_20_regular = "\ue0c5";
+ public const string arrow_expand_24_regular = "\uf154";
+ public const string arrow_expand_all_16_regular = "\U000f0622";
+ public const string arrow_expand_all_20_regular = "\U000f0623";
+ public const string arrow_expand_all_24_regular = "\U000f0624";
+ public const string arrow_export_ltr_16_regular = "\ue0c6";
+ public const string arrow_export_ltr_20_regular = "\ue0c7";
+ public const string arrow_export_ltr_24_regular = "\ue0c8";
+ public const string arrow_export_rtl_16_regular = "\ue0c9";
+ public const string arrow_export_rtl_20_regular = "\uf8d2";
+ public const string arrow_export_rtl_24_regular = "\ue0ca";
+ public const string arrow_export_up_16_regular = "\U000f0383";
+ public const string arrow_export_up_20_regular = "\ue0cb";
+ public const string arrow_export_up_24_regular = "\ue0cc";
+ public const string arrow_fit_16_regular = "\uf14e";
+ public const string arrow_fit_20_regular = "\ue0cd";
+ public const string arrow_fit_24_regular = "\U000f03d3";
+ public const string arrow_fit_in_16_regular = "\ue0ce";
+ public const string arrow_fit_in_20_regular = "\ue0cf";
+ public const string arrow_fit_in_24_regular = "\U000f03d4";
+ public const string arrow_flow_diagonal_up_right_16_regular = "\U000f01b8";
+ public const string arrow_flow_diagonal_up_right_20_regular = "\U000f01b9";
+ public const string arrow_flow_diagonal_up_right_24_regular = "\U000f01ba";
+ public const string arrow_flow_diagonal_up_right_32_regular = "\U000f01bb";
+ public const string arrow_flow_up_right_16_regular = "\U000f01bc";
+ public const string arrow_flow_up_right_20_regular = "\U000f01bd";
+ public const string arrow_flow_up_right_24_regular = "\U000f01be";
+ public const string arrow_flow_up_right_32_regular = "\U000f01bf";
+ public const string arrow_flow_up_right_rectangle_multiple_20_regular = "\U000f01c0";
+ public const string arrow_flow_up_right_rectangle_multiple_24_regular = "\U000f01c1";
+ public const string arrow_forward_16_regular = "\uf156";
+ public const string arrow_forward_20_regular = "\uf157";
+ public const string arrow_forward_24_regular = "\uf158";
+ public const string arrow_forward_28_regular = "\ue0d0";
+ public const string arrow_forward_32_regular = "\U000f0424";
+ public const string arrow_forward_48_regular = "\ue0d1";
+ public const string arrow_forward_down_lightning_20_regular = "\ue0d2";
+ public const string arrow_forward_down_lightning_24_regular = "\ue0d3";
+ public const string arrow_forward_down_person_20_regular = "\ue0d4";
+ public const string arrow_forward_down_person_24_regular = "\ue0d5";
+ public const string arrow_hook_down_left_16_regular = "\uf8d5";
+ public const string arrow_hook_down_left_20_regular = "\uf8d6";
+ public const string arrow_hook_down_left_24_regular = "\uf8d7";
+ public const string arrow_hook_down_left_28_regular = "\uf8d8";
+ public const string arrow_hook_down_right_16_regular = "\uf8d9";
+ public const string arrow_hook_down_right_20_regular = "\uf8da";
+ public const string arrow_hook_down_right_24_regular = "\uf8db";
+ public const string arrow_hook_down_right_28_regular = "\uf8dc";
+ public const string arrow_hook_up_left_16_regular = "\uf8dd";
+ public const string arrow_hook_up_left_20_regular = "\uf8de";
+ public const string arrow_hook_up_left_24_regular = "\uf8df";
+ public const string arrow_hook_up_left_28_regular = "\uf8e0";
+ public const string arrow_hook_up_right_16_regular = "\uf8e1";
+ public const string arrow_hook_up_right_20_regular = "\uf8e2";
+ public const string arrow_hook_up_right_24_regular = "\uf8e3";
+ public const string arrow_hook_up_right_28_regular = "\uf8e4";
+ public const string arrow_import_16_regular = "\U000f0384";
+ public const string arrow_import_20_regular = "\uf159";
+ public const string arrow_import_24_regular = "\uf15a";
+ public const string arrow_join_20_regular = "\ue0d6";
+ public const string arrow_left_12_regular = "\ue0d7";
+ public const string arrow_left_16_regular = "\uf184";
+ public const string arrow_left_20_regular = "\uf15b";
+ public const string arrow_left_24_regular = "\uf15c";
+ public const string arrow_left_28_regular = "\uf15d";
+ public const string arrow_left_32_regular = "\uf189";
+ public const string arrow_left_48_regular = "\uf19e";
+ public const string arrow_maximize_16_regular = "\uf15e";
+ public const string arrow_maximize_20_regular = "\uf15f";
+ public const string arrow_maximize_24_regular = "\uf160";
+ public const string arrow_maximize_28_regular = "\uf161";
+ public const string arrow_maximize_32_regular = "\ue0d8";
+ public const string arrow_maximize_48_regular = "\ue0d9";
+ public const string arrow_maximize_vertical_20_regular = "\uf162";
+ public const string arrow_maximize_vertical_24_regular = "\uf163";
+ public const string arrow_maximize_vertical_48_regular = "\ue0da";
+ public const string arrow_minimize_16_regular = "\uf164";
+ public const string arrow_minimize_20_regular = "\uf165";
+ public const string arrow_minimize_24_regular = "\uf166";
+ public const string arrow_minimize_28_regular = "\uf167";
+ public const string arrow_minimize_vertical_20_regular = "\ue0db";
+ public const string arrow_minimize_vertical_24_regular = "\uf168";
+ public const string arrow_move_20_regular = "\uf8e5";
+ public const string arrow_move_24_regular = "\uf169";
+ public const string arrow_move_inward_20_regular = "\ue0dc";
+ public const string arrow_next_12_regular = "\ue0dd";
+ public const string arrow_next_16_regular = "\uf0a2";
+ public const string arrow_next_20_regular = "\uf16a";
+ public const string arrow_next_24_regular = "\uf16b";
+ public const string arrow_outline_down_left_16_regular = "\U000f01fd";
+ public const string arrow_outline_down_left_20_regular = "\U000f01fe";
+ public const string arrow_outline_down_left_24_regular = "\U000f01ff";
+ public const string arrow_outline_down_left_28_regular = "\U000f0200";
+ public const string arrow_outline_down_left_32_regular = "\U000f0201";
+ public const string arrow_outline_down_left_48_regular = "\U000f0202";
+ public const string arrow_outline_up_right_20_regular = "\ue0de";
+ public const string arrow_outline_up_right_24_regular = "\ue0df";
+ public const string arrow_outline_up_right_32_regular = "\ue0e0";
+ public const string arrow_outline_up_right_48_regular = "\ue0e1";
+ public const string text_paragraph_16_regular = "\ued41";
+ public const string arrow_paragraph_20_regular = "\ue0e2";
+ public const string text_paragraph_24_regular = "\ued43";
+ public const string arrow_previous_12_regular = "\ue0e3";
+ public const string arrow_previous_16_regular = "\uf0a3";
+ public const string arrow_previous_20_regular = "\uf16c";
+ public const string arrow_previous_24_regular = "\uf16d";
+ public const string arrow_redo_16_regular = "\ue0e4";
+ public const string arrow_redo_20_regular = "\uf16e";
+ public const string arrow_redo_24_regular = "\uf16f";
+ public const string arrow_redo_28_regular = "\ue0e5";
+ public const string arrow_redo_32_regular = "\uf8e6";
+ public const string arrow_redo_48_regular = "\uf8e7";
+ public const string arrow_repeat_1_16_regular = "\uef32";
+ public const string arrow_repeat_1_20_regular = "\uef33";
+ public const string arrow_repeat_1_24_regular = "\uef34";
+ public const string arrow_repeat_all_16_regular = "\uf170";
+ public const string arrow_repeat_all_20_regular = "\uf171";
+ public const string arrow_repeat_all_24_regular = "\uf172";
+ public const string arrow_repeat_all_off_16_regular = "\uf173";
+ public const string arrow_repeat_all_off_20_regular = "\uf174";
+ public const string arrow_repeat_all_off_24_regular = "\uf175";
+ public const string arrow_reply_16_regular = "\uf176";
+ public const string arrow_reply_20_regular = "\uf177";
+ public const string arrow_reply_24_regular = "\uf178";
+ public const string arrow_reply_28_regular = "\ue0e6";
+ public const string arrow_reply_32_regular = "\U000f0425";
+ public const string arrow_reply_48_regular = "\uf179";
+ public const string arrow_reply_all_16_regular = "\uf17a";
+ public const string arrow_reply_all_20_regular = "\uf17b";
+ public const string arrow_reply_all_24_regular = "\uf17c";
+ public const string arrow_reply_all_28_regular = "\ue0e7";
+ public const string arrow_reply_all_32_regular = "\U000f0426";
+ public const string arrow_reply_all_48_regular = "\uf17d";
+ public const string arrow_reply_down_16_regular = "\uf17e";
+ public const string arrow_reply_down_20_regular = "\uf17f";
+ public const string arrow_reply_down_24_regular = "\uf180";
+ public const string arrow_reset_20_regular = "\uf19f";
+ public const string arrow_reset_24_regular = "\uf1a0";
+ public const string arrow_reset_32_regular = "\ue0e8";
+ public const string arrow_reset_48_regular = "\ue0e9";
+ public const string arrow_right_12_regular = "\ue0ea";
+ public const string arrow_right_16_regular = "\ue0eb";
+ public const string arrow_right_20_regular = "\uf181";
+ public const string arrow_right_24_regular = "\uf182";
+ public const string arrow_right_28_regular = "\uf183";
+ public const string arrow_right_32_regular = "\uf1a2";
+ public const string arrow_right_48_regular = "\uf1a7";
+ public const string arrow_rotate_clockwise_16_regular = "\ue0ec";
+ public const string arrow_rotate_clockwise_20_regular = "\uf185";
+ public const string arrow_rotate_clockwise_24_regular = "\uf186";
+ public const string arrow_rotate_counterclockwise_20_regular = "\uf187";
+ public const string arrow_rotate_counterclockwise_24_regular = "\uf188";
+ public const string arrow_shuffle_16_regular = "\uef35";
+ public const string arrow_shuffle_20_regular = "\uef36";
+ public const string arrow_shuffle_24_regular = "\uef37";
+ public const string arrow_shuffle_28_regular = "\uef38";
+ public const string arrow_shuffle_32_regular = "\uef39";
+ public const string arrow_shuffle_48_regular = "\uef3a";
+ public const string arrow_shuffle_off_16_regular = "\uef3b";
+ public const string arrow_shuffle_off_20_regular = "\uef3c";
+ public const string arrow_shuffle_off_24_regular = "\uef3d";
+ public const string arrow_shuffle_off_28_regular = "\uef3e";
+ public const string arrow_shuffle_off_32_regular = "\uef3f";
+ public const string arrow_shuffle_off_48_regular = "\uef40";
+ public const string arrow_sort_16_regular = "\uf1ab";
+ public const string arrow_sort_20_regular = "\uf18a";
+ public const string arrow_sort_24_regular = "\uf18b";
+ public const string arrow_sort_28_regular = "\uf18c";
+ public const string arrow_sort_down_16_regular = "\uf1ac";
+ public const string arrow_sort_down_20_regular = "\uf805";
+ public const string arrow_sort_down_24_regular = "\uf811";
+ public const string arrow_sort_down_lines_16_regular = "\uf1ad";
+ public const string arrow_sort_down_lines_20_regular = "\ue0f1";
+ public const string arrow_sort_down_lines_24_regular = "\ue0f2";
+ public const string arrow_sort_up_16_regular = "\uf1b3";
+ public const string arrow_sort_up_20_regular = "\uf812";
+ public const string arrow_sort_up_24_regular = "\uf821";
+ public const string arrow_sort_up_lines_16_regular = "\U000f0556";
+ public const string arrow_sort_up_lines_20_regular = "\U000f0557";
+ public const string arrow_sort_up_lines_24_regular = "\U000f0558";
+ public const string arrow_split_16_regular = "\ue0f3";
+ public const string arrow_split_20_regular = "\ue0f4";
+ public const string arrow_split_24_regular = "\ue0f5";
+ public const string arrow_sprint_16_regular = "\U000f0160";
+ public const string arrow_sprint_20_regular = "\U000f0161";
+ public const string arrow_square_down_20_regular = "\ue0f6";
+ public const string arrow_square_down_24_regular = "\ue0f7";
+ public const string arrow_square_up_right_20_regular = "\U000f01c2";
+ public const string arrow_square_up_right_24_regular = "\U000f01c3";
+ public const string arrow_step_back_16_regular = "\ue0f8";
+ public const string arrow_step_back_20_regular = "\ue0f9";
+ public const string arrow_step_in_12_regular = "\ue0fa";
+ public const string arrow_step_in_16_regular = "\ue0fb";
+ public const string arrow_step_in_20_regular = "\ue0fc";
+ public const string arrow_step_in_24_regular = "\ue0fd";
+ public const string arrow_step_in_28_regular = "\ue0fe";
+ public const string arrow_step_in_diagonal_down_left_16_regular = "\U000f0203";
+ public const string arrow_step_in_diagonal_down_left_20_regular = "\U000f0204";
+ public const string arrow_step_in_diagonal_down_left_24_regular = "\U000f0205";
+ public const string arrow_step_in_diagonal_down_left_28_regular = "\U000f0206";
+ public const string arrow_step_in_left_12_regular = "\ue0ff";
+ public const string arrow_step_in_left_16_regular = "\ue100";
+ public const string arrow_step_in_left_20_regular = "\ue101";
+ public const string arrow_step_in_left_24_regular = "\ue102";
+ public const string arrow_step_in_left_28_regular = "\ue103";
+ public const string arrow_step_in_right_12_regular = "\ue104";
+ public const string arrow_step_in_right_16_regular = "\ue105";
+ public const string arrow_step_in_right_20_regular = "\ue106";
+ public const string arrow_step_in_right_24_regular = "\ue107";
+ public const string arrow_step_in_right_28_regular = "\ue108";
+ public const string arrow_step_out_12_regular = "\ue109";
+ public const string arrow_step_out_16_regular = "\ue10a";
+ public const string arrow_step_out_20_regular = "\ue10b";
+ public const string arrow_step_out_24_regular = "\ue10c";
+ public const string arrow_step_out_28_regular = "\ue10d";
+ public const string arrow_step_over_16_regular = "\ue10e";
+ public const string arrow_step_over_20_regular = "\ue10f";
+ public const string arrow_swap_16_regular = "\U000f02a4";
+ public const string arrow_swap_20_regular = "\uf18d";
+ public const string arrow_swap_24_regular = "\uf18e";
+ public const string arrow_swap_28_regular = "\U000f02a5";
+ public const string arrow_sync_12_regular = "\uf18f";
+ public const string arrow_sync_16_regular = "\ue110";
+ public const string arrow_sync_20_regular = "\uf190";
+ public const string arrow_sync_24_regular = "\uf191";
+ public const string arrow_sync_checkmark_20_regular = "\ue111";
+ public const string arrow_sync_checkmark_24_regular = "\ue112";
+ public const string arrow_sync_circle_16_regular = "\uf192";
+ public const string arrow_sync_circle_20_regular = "\uf193";
+ public const string arrow_sync_circle_24_regular = "\uf194";
+ public const string arrow_sync_dismiss_20_regular = "\ue113";
+ public const string arrow_sync_dismiss_24_regular = "\ue114";
+ public const string arrow_sync_off_12_regular = "\uf195";
+ public const string arrow_sync_off_16_regular = "\ue115";
+ public const string arrow_sync_off_20_regular = "\ue116";
+ public const string arrow_trending_12_regular = "\uefd6";
+ public const string arrow_trending_16_regular = "\uf196";
+ public const string arrow_trending_20_regular = "\uf197";
+ public const string arrow_trending_24_regular = "\uf198";
+ public const string arrow_trending_checkmark_20_regular = "\ue117";
+ public const string arrow_trending_checkmark_24_regular = "\ue118";
+ public const string arrow_trending_down_16_regular = "\ue119";
+ public const string arrow_trending_down_20_regular = "\ue11a";
+ public const string arrow_trending_down_24_regular = "\ue11b";
+ public const string arrow_trending_lines_20_regular = "\ue11c";
+ public const string arrow_trending_lines_24_regular = "\ue11d";
+ public const string arrow_trending_settings_20_regular = "\ue11e";
+ public const string arrow_trending_settings_24_regular = "\ue11f";
+ public const string arrow_trending_sparkle_20_regular = "\uf59a";
+ public const string arrow_trending_sparkle_24_regular = "\uf59b";
+ public const string arrow_trending_text_20_regular = "\ue120";
+ public const string arrow_trending_text_24_regular = "\ue121";
+ public const string arrow_trending_wrench_20_regular = "\ue122";
+ public const string arrow_trending_wrench_24_regular = "\ue123";
+ public const string arrow_turn_bidirectional_down_right_20_regular = "\ue124";
+ public const string arrow_turn_bidirectional_down_right_24_regular = "\uf822";
+ public const string arrow_turn_down_left_20_regular = "\uf067";
+ public const string arrow_turn_down_left_48_regular = "\uf068";
+ public const string arrow_turn_down_right_20_regular = "\uf00e";
+ public const string arrow_turn_down_right_48_regular = "\uf00f";
+ public const string arrow_turn_down_up_20_regular = "\uf010";
+ public const string arrow_turn_down_up_48_regular = "\uf011";
+ public const string arrow_turn_left_down_20_regular = "\uf012";
+ public const string arrow_turn_left_down_48_regular = "\uf013";
+ public const string arrow_turn_left_right_20_regular = "\uf014";
+ public const string arrow_turn_left_right_48_regular = "\uf015";
+ public const string arrow_turn_left_up_20_regular = "\uf016";
+ public const string arrow_turn_left_up_48_regular = "\uf017";
+ public const string arrow_turn_right_16_regular = "\U000f05d3";
+ public const string arrow_turn_right_20_regular = "\ue125";
+ public const string arrow_turn_right_24_regular = "\uf839";
+ public const string arrow_turn_right_48_regular = "\uf018";
+ public const string arrow_turn_right_down_20_regular = "\uf019";
+ public const string arrow_turn_right_down_48_regular = "\uf01a";
+ public const string arrow_turn_right_left_20_regular = "\uf01b";
+ public const string arrow_turn_right_left_48_regular = "\uf01c";
+ public const string arrow_turn_right_up_20_regular = "\uf01d";
+ public const string arrow_turn_right_up_48_regular = "\uf01e";
+ public const string arrow_turn_up_down_20_regular = "\uf01f";
+ public const string arrow_turn_up_down_48_regular = "\uf020";
+ public const string arrow_turn_up_left_20_regular = "\uf021";
+ public const string arrow_turn_up_left_48_regular = "\uf022";
+ public const string arrow_undo_16_regular = "\ue126";
+ public const string arrow_undo_20_regular = "\uf199";
+ public const string arrow_undo_24_regular = "\uf19a";
+ public const string arrow_undo_28_regular = "\ue127";
+ public const string arrow_undo_32_regular = "\ue128";
+ public const string arrow_undo_48_regular = "\ue129";
+ public const string arrow_up_12_regular = "\ue12a";
+ public const string arrow_up_16_regular = "\uf1b4";
+ public const string arrow_up_20_regular = "\uf19b";
+ public const string arrow_up_24_regular = "\uf19c";
+ public const string arrow_up_28_regular = "\uf19d";
+ public const string arrow_up_32_regular = "\uf1b8";
+ public const string arrow_up_48_regular = "\uf1b9";
+ public const string arrow_up_exclamation_16_regular = "\U000f0559";
+ public const string arrow_up_exclamation_20_regular = "\U000f055a";
+ public const string arrow_up_exclamation_24_regular = "\U000f055b";
+ public const string arrow_up_left_16_regular = "\ue12b";
+ public const string arrow_up_left_20_regular = "\ue12c";
+ public const string arrow_up_left_24_regular = "\uf1a1";
+ public const string arrow_up_left_48_regular = "\ue12d";
+ public const string arrow_up_right_16_regular = "\uf8eb";
+ public const string arrow_up_right_20_regular = "\ue12e";
+ public const string arrow_up_right_24_regular = "\uf1a3";
+ public const string arrow_up_right_32_regular = "\ue12f";
+ public const string arrow_up_right_48_regular = "\ue130";
+ public const string arrow_up_right_dashes_16_regular = "\U000f0385";
+ public const string arrow_up_square_settings_24_regular = "\U000f0207";
+ public const string arrow_upload_16_regular = "\ue131";
+ public const string arrow_upload_20_regular = "\uf1a4";
+ public const string arrow_upload_24_regular = "\uf1a5";
+ public const string arrow_upload_32_regular = "\U000f05a0";
+ public const string arrow_wrap_20_regular = "\ue132";
+ public const string arrow_wrap_off_20_regular = "\ue133";
+ public const string arrows_bidirectional_20_regular = "\ue134";
+ public const string arrows_bidirectional_24_regular = "\uf1a6";
+ public const string attach_12_regular = "\ue135";
+ public const string attach_16_regular = "\uf1a8";
+ public const string attach_20_regular = "\uf1a9";
+ public const string attach_24_regular = "\uf1aa";
+ public const string attach_32_regular = "\U000f0427";
+ public const string attach_arrow_right_20_regular = "\uf8ec";
+ public const string attach_arrow_right_24_regular = "\uf8ed";
+ public const string attach_text_20_regular = "\ue136";
+ public const string attach_text_24_regular = "\uf8ee";
+ public const string auto_fit_height_20_regular = "\ue137";
+ public const string auto_fit_height_24_regular = "\ue138";
+ public const string auto_fit_width_20_regular = "\ue139";
+ public const string auto_fit_width_24_regular = "\ue13a";
+ public const string autocorrect_20_regular = "\ue13b";
+ public const string autocorrect_24_regular = "\uf1ae";
+ public const string autocorrect_32_regular = "\U000f0428";
+ public const string autosum_16_regular = "\uf069";
+ public const string autosum_20_regular = "\uf1af";
+ public const string autosum_24_regular = "\uf1b0";
+ public const string backpack_12_regular = "\uf8f0";
+ public const string backpack_16_regular = "\uf8f1";
+ public const string backpack_20_regular = "\uf8f2";
+ public const string backpack_24_regular = "\uf8f3";
+ public const string backpack_28_regular = "\uf8f4";
+ public const string backpack_32_regular = "\ue13c";
+ public const string backpack_48_regular = "\uf8f5";
+ public const string backpack_add_20_regular = "\ue13d";
+ public const string backpack_add_24_regular = "\ue13e";
+ public const string backpack_add_28_regular = "\ue13f";
+ public const string backpack_add_48_regular = "\ue140";
+ public const string backspace_16_regular = "\U000f00d0";
+ public const string backspace_20_regular = "\uf1b1";
+ public const string backspace_24_regular = "\uf1b2";
+ public const string badge_20_regular = "\ue141";
+ public const string badge_24_regular = "\uf1b5";
+ public const string balloon_12_regular = "\ue142";
+ public const string balloon_16_regular = "\uf8f6";
+ public const string balloon_20_regular = "\uf1b6";
+ public const string balloon_24_regular = "\uf1b7";
+ public const string barcode_scanner_20_regular = "\uf1ba";
+ public const string barcode_scanner_24_regular = "\uf1e4";
+ public const string battery_0_20_regular = "\uf1bb";
+ public const string battery_0_24_regular = "\uf1bc";
+ public const string battery_1_20_regular = "\uf1bd";
+ public const string battery_1_24_regular = "\uf1be";
+ public const string battery_10_16_regular = "\U000f0386";
+ public const string battery_10_20_regular = "\ue143";
+ public const string battery_10_24_regular = "\ue144";
+ public const string battery_2_20_regular = "\uf1bf";
+ public const string battery_2_24_regular = "\uf1c0";
+ public const string battery_3_20_regular = "\uf1c1";
+ public const string battery_3_24_regular = "\uf1c2";
+ public const string battery_4_20_regular = "\uf1c3";
+ public const string battery_4_24_regular = "\uf1c4";
+ public const string battery_5_20_regular = "\uf1c5";
+ public const string battery_5_24_regular = "\uf1c6";
+ public const string battery_6_20_regular = "\uf1c7";
+ public const string battery_6_24_regular = "\uf1c8";
+ public const string battery_7_20_regular = "\uf1c9";
+ public const string battery_7_24_regular = "\uf1ca";
+ public const string battery_8_20_regular = "\uf1cb";
+ public const string battery_8_24_regular = "\uf1cc";
+ public const string battery_9_20_regular = "\uf1cd";
+ public const string battery_9_24_regular = "\uf1ce";
+ public const string battery_charge_20_regular = "\uf1cf";
+ public const string battery_charge_24_regular = "\uf1d0";
+ public const string battery_checkmark_20_regular = "\ue145";
+ public const string battery_checkmark_24_regular = "\ue146";
+ public const string battery_saver_20_regular = "\uf1d3";
+ public const string battery_saver_24_regular = "\uf1d4";
+ public const string battery_warning_20_regular = "\ue147";
+ public const string battery_warning_24_regular = "\uf1d5";
+ public const string beach_16_regular = "\ue148";
+ public const string beach_20_regular = "\ue149";
+ public const string beach_24_regular = "\ue14a";
+ public const string beach_28_regular = "\ue14b";
+ public const string beach_32_regular = "\ue14c";
+ public const string beach_48_regular = "\ue14d";
+ public const string beaker_16_regular = "\uf1d6";
+ public const string beaker_20_regular = "\uf1d7";
+ public const string beaker_24_regular = "\uf1d8";
+ public const string beaker_32_regular = "\ueec0";
+ public const string beaker_add_20_regular = "\U000f0338";
+ public const string beaker_add_24_regular = "\U000f0339";
+ public const string beaker_dismiss_20_regular = "\U000f033a";
+ public const string beaker_dismiss_24_regular = "\U000f033b";
+ public const string beaker_edit_20_regular = "\uf1e5";
+ public const string beaker_edit_24_regular = "\uf1e6";
+ public const string beaker_empty_16_regular = "\U000f0387";
+ public const string beaker_off_20_regular = "\ueee6";
+ public const string beaker_off_32_regular = "\ueee7";
+ public const string beaker_settings_16_regular = "\U000f0162";
+ public const string beaker_settings_20_regular = "\U000f0163";
+ public const string bed_16_regular = "\uf8f7";
+ public const string bed_20_regular = "\uf1d9";
+ public const string bed_24_regular = "\uf1da";
+ public const string bench_20_regular = "\U000f055c";
+ public const string bench_24_regular = "\U000f055d";
+ public const string bezier_curve_square_12_regular = "\ue14e";
+ public const string bezier_curve_square_20_regular = "\ue14f";
+ public const string bin_full_20_regular = "\ue150";
+ public const string bin_full_24_regular = "\ue151";
+ public const string bin_recycle_20_regular = "\U000f01c4";
+ public const string bin_recycle_24_regular = "\U000f01c5";
+ public const string bin_recycle_full_20_regular = "\U000f01c6";
+ public const string bin_recycle_full_24_regular = "\U000f01c7";
+ public const string binder_triangle_16_regular = "\U000f0164";
+ public const string binder_triangle_20_regular = "\U000f00d1";
+ public const string binder_triangle_24_regular = "\U000f00d2";
+ public const string binder_triangle_32_regular = "\U000f00d3";
+ public const string bluetooth_16_regular = "\uf59c";
+ public const string bluetooth_20_regular = "\uf1de";
+ public const string bluetooth_24_regular = "\uf1df";
+ public const string bluetooth_28_regular = "\uf8f8";
+ public const string bluetooth_32_regular = "\uf59d";
+ public const string bluetooth_48_regular = "\uf670";
+ public const string bluetooth_connected_20_regular = "\ue152";
+ public const string bluetooth_connected_24_regular = "\uf1e0";
+ public const string bluetooth_disabled_20_regular = "\ue153";
+ public const string bluetooth_disabled_24_regular = "\uf1e1";
+ public const string bluetooth_searching_20_regular = "\ue154";
+ public const string bluetooth_searching_24_regular = "\uf1e2";
+ public const string blur_16_regular = "\uf8f9";
+ public const string blur_20_regular = "\uf8fa";
+ public const string blur_24_regular = "\uf8fb";
+ public const string blur_28_regular = "\uf8fc";
+ public const string board_16_regular = "\ue155";
+ public const string board_20_regular = "\ue156";
+ public const string board_24_regular = "\uf1e3";
+ public const string board_28_regular = "\ue157";
+ public const string board_games_20_regular = "\ue158";
+ public const string board_heart_16_regular = "\ue159";
+ public const string board_heart_20_regular = "\ue15a";
+ public const string board_heart_24_regular = "\ue15b";
+ public const string board_split_16_regular = "\ue15c";
+ public const string board_split_20_regular = "\ue15d";
+ public const string board_split_24_regular = "\ue15e";
+ public const string board_split_28_regular = "\ue15f";
+ public const string board_split_48_regular = "\ue160";
+ public const string book_16_regular = "\U000f0388";
+ public const string book_20_regular = "\uf8fd";
+ public const string book_24_regular = "\uf8fe";
+ public const string book_28_regular = "\U000f05bc";
+ public const string book_32_regular = "\U000f03d5";
+ public const string book_48_regular = "\U000f05bd";
+ public const string book_add_20_regular = "\uf8ff";
+ public const string book_add_24_regular = "\ue161";
+ public const string book_add_28_regular = "\U000f01ea";
+ public const string book_arrow_clockwise_20_regular = "\ue162";
+ public const string book_arrow_clockwise_24_regular = "\ue163";
+ public const string book_clock_20_regular = "\ue164";
+ public const string book_clock_24_regular = "\ue165";
+ public const string book_coins_20_regular = "\ue166";
+ public const string book_coins_24_regular = "\ue167";
+ public const string book_compass_20_regular = "\ue168";
+ public const string book_compass_24_regular = "\ue169";
+ public const string book_contacts_20_regular = "\ue16a";
+ public const string book_contacts_24_regular = "\ue16b";
+ public const string book_contacts_28_regular = "\ue16c";
+ public const string book_contacts_32_regular = "\ue16d";
+ public const string book_database_16_regular = "\U000f03d6";
+ public const string book_database_20_regular = "\ue16e";
+ public const string book_database_24_regular = "\ue16f";
+ public const string book_database_32_regular = "\U000f03d7";
+ public const string book_default_28_regular = "\U000f01eb";
+ public const string book_dismiss_16_regular = "\U000f0165";
+ public const string book_dismiss_20_regular = "\U000f0166";
+ public const string book_exclamation_mark_20_regular = "\ue170";
+ public const string book_exclamation_mark_24_regular = "\ue171";
+ public const string book_globe_20_regular = "\ue172";
+ public const string book_globe_24_regular = "\uf1f0";
+ public const string book_information_20_regular = "\ue173";
+ public const string book_information_24_regular = "\ue174";
+ public const string book_letter_20_regular = "\ue175";
+ public const string book_letter_24_regular = "\ue176";
+ public const string book_number_16_regular = "\uf1f1";
+ public const string book_number_20_regular = "\uf1f2";
+ public const string book_number_24_regular = "\uf1f3";
+ public const string book_open_16_regular = "\ue177";
+ public const string book_open_20_regular = "\ue178";
+ public const string book_open_24_regular = "\ue179";
+ public const string book_open_28_regular = "\ue17a";
+ public const string book_open_32_regular = "\ue17b";
+ public const string book_open_48_regular = "\ue17c";
+ public const string book_open_globe_20_regular = "\ue17d";
+ public const string book_open_globe_24_regular = "\ue17e";
+ public const string book_open_microphone_20_regular = "\ue17f";
+ public const string book_open_microphone_24_regular = "\ue180";
+ public const string book_open_microphone_28_regular = "\ue181";
+ public const string book_open_microphone_32_regular = "\ue182";
+ public const string book_open_microphone_48_regular = "\ue183";
+ public const string book_pulse_20_regular = "\ue184";
+ public const string book_pulse_24_regular = "\ue185";
+ public const string book_question_mark_20_regular = "\ue186";
+ public const string book_question_mark_24_regular = "\ue187";
+ public const string book_question_mark_rtl_20_regular = "\ue188";
+ public const string book_question_mark_rtl_24_regular = "\uf83a";
+ public const string book_search_20_regular = "\ue189";
+ public const string book_search_24_regular = "\ue18a";
+ public const string book_star_20_regular = "\ue18b";
+ public const string book_star_24_regular = "\ue18c";
+ public const string book_template_20_regular = "\ue18d";
+ public const string book_theta_20_regular = "\ue18e";
+ public const string book_theta_24_regular = "\ue18f";
+ public const string book_toolbox_16_regular = "\U000f03d8";
+ public const string book_toolbox_20_regular = "\uf1e7";
+ public const string book_toolbox_24_regular = "\ue190";
+ public const string bookmark_16_regular = "\uf1f4";
+ public const string bookmark_20_regular = "\uf1f5";
+ public const string bookmark_24_regular = "\uf1f6";
+ public const string bookmark_28_regular = "\uf1f7";
+ public const string bookmark_32_regular = "\ue191";
+ public const string bookmark_add_20_regular = "\uf1e8";
+ public const string bookmark_add_24_regular = "\uf1e9";
+ public const string bookmark_multiple_16_regular = "\ue192";
+ public const string bookmark_multiple_20_regular = "\ue193";
+ public const string bookmark_multiple_24_regular = "\ue194";
+ public const string bookmark_multiple_28_regular = "\ue195";
+ public const string bookmark_multiple_32_regular = "\ue196";
+ public const string bookmark_multiple_48_regular = "\ue197";
+ public const string bookmark_off_20_regular = "\ue198";
+ public const string bookmark_off_24_regular = "\uf1f8";
+ public const string bookmark_search_20_regular = "\ue199";
+ public const string bookmark_search_24_regular = "\ue19a";
+ public const string border_all_16_regular = "\ue19b";
+ public const string border_all_20_regular = "\ue19c";
+ public const string border_all_24_regular = "\ue19d";
+ public const string border_bottom_20_regular = "\ue19e";
+ public const string border_bottom_24_regular = "\ue19f";
+ public const string border_bottom_double_20_regular = "\ue1a0";
+ public const string border_bottom_double_24_regular = "\ue1a1";
+ public const string border_bottom_thick_20_regular = "\ue1a2";
+ public const string border_bottom_thick_24_regular = "\ue1a3";
+ public const string border_inside_16_regular = "\U000f03ae";
+ public const string border_inside_20_regular = "\U000f03af";
+ public const string border_inside_24_regular = "\U000f03b0";
+ public const string border_left_20_regular = "\ue1a4";
+ public const string border_left_24_regular = "\ue1a5";
+ public const string border_left_right_20_regular = "\ue1a6";
+ public const string border_left_right_24_regular = "\ue1a7";
+ public const string border_none_16_regular = "\U000f0389";
+ public const string border_none_20_regular = "\ue1a8";
+ public const string border_none_24_regular = "\ue1a9";
+ public const string border_outside_20_regular = "\ue1aa";
+ public const string border_outside_24_regular = "\ue1ab";
+ public const string border_outside_thick_20_regular = "\ue1ac";
+ public const string border_outside_thick_24_regular = "\ue1ad";
+ public const string border_right_20_regular = "\ue1ae";
+ public const string border_right_24_regular = "\ue1af";
+ public const string border_top_20_regular = "\ue1b0";
+ public const string border_top_24_regular = "\ue1b1";
+ public const string border_top_bottom_20_regular = "\ue1b2";
+ public const string border_top_bottom_24_regular = "\ue1b3";
+ public const string border_top_bottom_double_20_regular = "\ue1b4";
+ public const string border_top_bottom_double_24_regular = "\ue1b5";
+ public const string border_top_bottom_thick_20_regular = "\ue1b6";
+ public const string border_top_bottom_thick_24_regular = "\ue1b7";
+ public const string bot_20_regular = "\ue1b8";
+ public const string bot_24_regular = "\uf1f9";
+ public const string bot_add_20_regular = "\ue1b9";
+ public const string bot_add_24_regular = "\uf1fa";
+ public const string bot_sparkle_20_regular = "\uf6a5";
+ public const string bot_sparkle_24_regular = "\uf6a6";
+ public const string bow_tie_20_regular = "\U000f00d4";
+ public const string bow_tie_24_regular = "\U000f00d5";
+ public const string bowl_chopsticks_16_regular = "\uf1ea";
+ public const string bowl_chopsticks_20_regular = "\uf1eb";
+ public const string bowl_chopsticks_24_regular = "\uf1ec";
+ public const string bowl_chopsticks_28_regular = "\uf1ed";
+ public const string bowl_salad_20_regular = "\ueee8";
+ public const string bowl_salad_24_regular = "\ueee9";
+ public const string box_16_regular = "\ue1ba";
+ public const string box_20_regular = "\ue1bb";
+ public const string box_24_regular = "\ue1bc";
+ public const string box_arrow_left_20_regular = "\ue1bd";
+ public const string box_arrow_left_24_regular = "\ue1be";
+ public const string box_arrow_up_20_regular = "\ue1bf";
+ public const string box_arrow_up_24_regular = "\ue1c0";
+ public const string box_checkmark_20_regular = "\ue1c1";
+ public const string box_checkmark_24_regular = "\ue1c2";
+ public const string box_dismiss_20_regular = "\ue1c3";
+ public const string box_dismiss_24_regular = "\ue1c4";
+ public const string box_edit_20_regular = "\ue1c5";
+ public const string box_edit_24_regular = "\ue1c6";
+ public const string box_multiple_20_regular = "\ue1c7";
+ public const string box_multiple_24_regular = "\ue1c8";
+ public const string box_multiple_arrow_left_20_regular = "\ue1c9";
+ public const string box_multiple_arrow_left_24_regular = "\ue1ca";
+ public const string box_multiple_arrow_right_20_regular = "\ue1cb";
+ public const string box_multiple_arrow_right_24_regular = "\ue1cc";
+ public const string box_multiple_checkmark_20_regular = "\ue1cd";
+ public const string box_multiple_checkmark_24_regular = "\ue1ce";
+ public const string box_multiple_search_20_regular = "\ue1cf";
+ public const string box_multiple_search_24_regular = "\ue1d0";
+ public const string box_search_16_regular = "\uf6a7";
+ public const string box_search_20_regular = "\ue1d1";
+ public const string box_search_24_regular = "\ue1d2";
+ public const string box_toolbox_20_regular = "\ue1d3";
+ public const string box_toolbox_24_regular = "\ue1d4";
+ public const string braces_16_regular = "\uee90";
+ public const string braces_20_regular = "\ue1d5";
+ public const string braces_24_regular = "\ue1d6";
+ public const string braces_28_regular = "\uee91";
+ public const string braces_32_regular = "\uee92";
+ public const string braces_48_regular = "\uee93";
+ public const string braces_checkmark_16_regular = "\uf0a4";
+ public const string braces_dismiss_16_regular = "\uf0a5";
+ public const string braces_variable_20_regular = "\ue1d7";
+ public const string braces_variable_24_regular = "\ue1d8";
+ public const string braces_variable_48_regular = "\U000f0267";
+ public const string brain_circuit_20_regular = "\uf1ee";
+ public const string brain_circuit_24_regular = "\uf83b";
+ public const string branch_16_regular = "\uf0a6";
+ public const string branch_20_regular = "\ue1d9";
+ public const string branch_24_regular = "\uf1fb";
+ public const string branch_compare_16_regular = "\ue1da";
+ public const string branch_compare_20_regular = "\ue1db";
+ public const string branch_compare_24_regular = "\ue1dc";
+ public const string branch_fork_16_regular = "\ue1dd";
+ public const string branch_fork_20_regular = "\ue1de";
+ public const string branch_fork_24_regular = "\ue1df";
+ public const string branch_fork_32_regular = "\uee94";
+ public const string branch_fork_hint_20_regular = "\ue1e0";
+ public const string branch_fork_hint_24_regular = "\ue1e1";
+ public const string branch_fork_link_20_regular = "\ue1e2";
+ public const string branch_fork_link_24_regular = "\ue1e3";
+ public const string branch_request_16_regular = "\U000f038a";
+ public const string branch_request_20_regular = "\ue1e4";
+ public const string breakout_room_20_regular = "\ue1e5";
+ public const string breakout_room_24_regular = "\ue1e6";
+ public const string breakout_room_28_regular = "\ue1e7";
+ public const string breakout_room_32_regular = "\U000f05f8";
+ public const string briefcase_12_regular = "\ue1e8";
+ public const string briefcase_16_regular = "\ue1e9";
+ public const string briefcase_20_regular = "\uf1fc";
+ public const string briefcase_24_regular = "\uf1fd";
+ public const string briefcase_28_regular = "\ue1ea";
+ public const string briefcase_32_regular = "\ue1eb";
+ public const string briefcase_48_regular = "\ue1ec";
+ public const string briefcase_medical_16_regular = "\ue1ed";
+ public const string briefcase_medical_20_regular = "\uf1ef";
+ public const string briefcase_medical_24_regular = "\ue1ee";
+ public const string briefcase_medical_32_regular = "\ue1ef";
+ public const string briefcase_off_16_regular = "\ue1f0";
+ public const string briefcase_off_20_regular = "\ue1f1";
+ public const string briefcase_off_24_regular = "\ue1f2";
+ public const string briefcase_off_28_regular = "\ue1f3";
+ public const string briefcase_off_32_regular = "\ue1f4";
+ public const string briefcase_off_48_regular = "\ue1f5";
+ public const string briefcase_person_24_regular = "\U000f0208";
+ public const string briefcase_search_20_regular = "\U000f01c8";
+ public const string briefcase_search_24_regular = "\U000f01c9";
+ public const string brightness_high_16_regular = "\ue1f6";
+ public const string brightness_high_20_regular = "\ue1f7";
+ public const string brightness_high_24_regular = "\ue1f8";
+ public const string brightness_high_28_regular = "\ue1f9";
+ public const string brightness_high_32_regular = "\ue1fa";
+ public const string brightness_high_48_regular = "\ue1fb";
+ public const string brightness_low_16_regular = "\ue1fc";
+ public const string brightness_low_20_regular = "\ue1fd";
+ public const string brightness_low_24_regular = "\ue1fe";
+ public const string brightness_low_28_regular = "\ue1ff";
+ public const string brightness_low_32_regular = "\ue200";
+ public const string brightness_low_48_regular = "\ue201";
+ public const string broad_activity_feed_16_regular = "\ue202";
+ public const string broad_activity_feed_20_regular = "\ue203";
+ public const string broad_activity_feed_24_regular = "\uf200";
+ public const string broom_16_regular = "\uf1fe";
+ public const string broom_20_regular = "\uf201";
+ public const string broom_24_regular = "\uf202";
+ public const string broom_28_regular = "\ue204";
+ public const string broom_32_regular = "\U000f0429";
+ public const string bubble_multiple_20_regular = "\uf06a";
+ public const string bug_16_regular = "\ue205";
+ public const string bug_20_regular = "\ue206";
+ public const string bug_24_regular = "\ue207";
+ public const string bug_arrow_counterclockwise_20_regular = "\ue208";
+ public const string bug_prohibited_20_regular = "\ue209";
+ public const string building_16_regular = "\ue20a";
+ public const string building_20_regular = "\ue20b";
+ public const string building_24_regular = "\uf205";
+ public const string building_32_regular = "\uf6df";
+ public const string building_48_regular = "\uf6e0";
+ public const string building_bank_16_regular = "\ue20c";
+ public const string building_bank_20_regular = "\ue20d";
+ public const string building_bank_24_regular = "\ue20e";
+ public const string building_bank_28_regular = "\ue20f";
+ public const string building_bank_48_regular = "\ue210";
+ public const string building_bank_link_16_regular = "\ue211";
+ public const string building_bank_link_20_regular = "\ue212";
+ public const string building_bank_link_24_regular = "\ue213";
+ public const string building_bank_link_28_regular = "\ue214";
+ public const string building_bank_link_48_regular = "\ue215";
+ public const string building_bank_toolbox_20_regular = "\uf1ff";
+ public const string building_bank_toolbox_24_regular = "\uf83c";
+ public const string building_cloud_24_regular = "\U000f0209";
+ public const string building_desktop_16_regular = "\uef41";
+ public const string building_desktop_20_regular = "\uef42";
+ public const string building_desktop_24_regular = "\uef43";
+ public const string building_desktop_32_regular = "\U000f03d9";
+ public const string building_factory_16_regular = "\ue216";
+ public const string building_factory_20_regular = "\ue217";
+ public const string building_factory_24_regular = "\ue218";
+ public const string building_factory_28_regular = "\ue219";
+ public const string building_factory_32_regular = "\ue21a";
+ public const string building_factory_48_regular = "\ue21b";
+ public const string building_government_16_regular = "\U000f03da";
+ public const string building_government_20_regular = "\ue21c";
+ public const string building_government_24_regular = "\ue21d";
+ public const string building_government_32_regular = "\ue21e";
+ public const string building_government_search_16_regular = "\U000f03db";
+ public const string building_government_search_20_regular = "\U000f03dc";
+ public const string building_government_search_24_regular = "\U000f03dd";
+ public const string building_government_search_32_regular = "\U000f03de";
+ public const string building_home_16_regular = "\ue21f";
+ public const string building_home_20_regular = "\ue220";
+ public const string building_home_24_regular = "\ue221";
+ public const string building_lighthouse_16_regular = "\U000f04fe";
+ public const string building_lighthouse_20_regular = "\ue222";
+ public const string building_lighthouse_24_regular = "\U000f04e6";
+ public const string building_lighthouse_28_regular = "\U000f055e";
+ public const string building_lighthouse_32_regular = "\U000f04e7";
+ public const string building_lighthouse_48_regular = "\U000f04e8";
+ public const string building_mosque_12_regular = "\U000f02a6";
+ public const string building_mosque_16_regular = "\U000f02a7";
+ public const string building_mosque_20_regular = "\U000f02a8";
+ public const string building_mosque_24_regular = "\U000f02a9";
+ public const string building_mosque_28_regular = "\U000f02aa";
+ public const string building_mosque_32_regular = "\U000f02ab";
+ public const string building_mosque_48_regular = "\U000f02ac";
+ public const string building_multiple_20_regular = "\ue223";
+ public const string building_multiple_24_regular = "\ue224";
+ public const string building_people_16_regular = "\uefd7";
+ public const string building_people_20_regular = "\uefd8";
+ public const string building_people_24_regular = "\uefd9";
+ public const string building_retail_20_regular = "\ue225";
+ public const string building_retail_24_regular = "\uf209";
+ public const string building_retail_money_20_regular = "\ue226";
+ public const string building_retail_money_24_regular = "\ue227";
+ public const string building_retail_more_20_regular = "\ue228";
+ public const string building_retail_more_24_regular = "\ueeea";
+ public const string building_retail_more_32_regular = "\ueec2";
+ public const string building_retail_shield_20_regular = "\ue229";
+ public const string building_retail_shield_24_regular = "\ue22a";
+ public const string building_retail_toolbox_20_regular = "\ue22b";
+ public const string building_retail_toolbox_24_regular = "\ue22c";
+ public const string building_shop_16_regular = "\ue22d";
+ public const string building_shop_20_regular = "\ue22e";
+ public const string building_shop_24_regular = "\ue22f";
+ public const string building_skyscraper_16_regular = "\ue230";
+ public const string building_skyscraper_20_regular = "\ue231";
+ public const string building_skyscraper_24_regular = "\ue232";
+ public const string building_swap_16_regular = "\U000f0464";
+ public const string building_swap_20_regular = "\U000f0465";
+ public const string building_swap_24_regular = "\U000f0466";
+ public const string building_swap_32_regular = "\U000f0467";
+ public const string building_swap_48_regular = "\U000f0468";
+ public const string building_townhouse_20_regular = "\uf023";
+ public const string building_townhouse_24_regular = "\uf024";
+ public const string building_townhouse_32_regular = "\uf025";
+ public const string button_16_regular = "\U000f0167";
+ public const string button_20_regular = "\U000f0168";
+ public const string calculator_16_regular = "\uf06b";
+ public const string calculator_20_regular = "\uf20a";
+ public const string calculator_24_regular = "\ue233";
+ public const string calculator_arrow_clockwise_20_regular = "\ue234";
+ public const string calculator_arrow_clockwise_24_regular = "\ue235";
+ public const string calculator_multiple_16_regular = "\uf06c";
+ public const string calculator_multiple_20_regular = "\ue236";
+ public const string calculator_multiple_24_regular = "\ue237";
+ public const string calendar_ltr_12_regular = "\ue24c";
+ public const string calendar_ltr_16_regular = "\ue24d";
+ public const string calendar_ltr_20_regular = "\ue24e";
+ public const string calendar_ltr_24_regular = "\ue24f";
+ public const string calendar_ltr_28_regular = "\ue250";
+ public const string calendar_3_day_16_regular = "\ue238";
+ public const string calendar_3_day_20_regular = "\uf20e";
+ public const string calendar_3_day_24_regular = "\uf20f";
+ public const string calendar_3_day_28_regular = "\uf210";
+ public const string calendar_32_regular = "\U000f0287";
+ public const string calendar_ltr_48_regular = "\ue252";
+ public const string calendar_add_16_regular = "\ue239";
+ public const string calendar_add_20_regular = "\uf211";
+ public const string calendar_add_24_regular = "\uf212";
+ public const string calendar_add_28_regular = "\ue23a";
+ public const string calendar_agenda_20_regular = "\uf213";
+ public const string calendar_agenda_24_regular = "\uf214";
+ public const string calendar_agenda_28_regular = "\uf215";
+ public const string calendar_arrow_counterclockwise_16_regular = "\uf0a7";
+ public const string calendar_arrow_counterclockwise_20_regular = "\uf0a8";
+ public const string calendar_arrow_counterclockwise_24_regular = "\uf0a9";
+ public const string calendar_arrow_counterclockwise_28_regular = "\uf0aa";
+ public const string calendar_arrow_counterclockwise_32_regular = "\uf0ab";
+ public const string calendar_arrow_counterclockwise_48_regular = "\uf0ac";
+ public const string calendar_arrow_down_20_regular = "\ue23b";
+ public const string calendar_arrow_down_24_regular = "\ue23c";
+ public const string calendar_arrow_right_16_regular = "\ue23d";
+ public const string calendar_arrow_right_20_regular = "\uf216";
+ public const string calendar_arrow_right_24_regular = "\ue23e";
+ public const string calendar_assistant_16_regular = "\ue23f";
+ public const string calendar_assistant_20_regular = "\uf217";
+ public const string calendar_assistant_24_regular = "\uf218";
+ public const string calendar_cancel_16_regular = "\ue240";
+ public const string calendar_cancel_20_regular = "\uf219";
+ public const string calendar_cancel_24_regular = "\uf21a";
+ public const string calendar_chat_20_regular = "\ue241";
+ public const string calendar_chat_24_regular = "\ue242";
+ public const string calendar_checkmark_16_regular = "\uf21b";
+ public const string calendar_checkmark_20_regular = "\uf21c";
+ public const string calendar_checkmark_24_regular = "\uf8c9";
+ public const string calendar_checkmark_28_regular = "\uf85f";
+ public const string calendar_clock_16_regular = "\ue243";
+ public const string calendar_clock_20_regular = "\uf21d";
+ public const string calendar_clock_24_regular = "\uf21e";
+ public const string calendar_data_bar_16_regular = "\uee95";
+ public const string calendar_data_bar_20_regular = "\uee96";
+ public const string calendar_data_bar_24_regular = "\uee97";
+ public const string calendar_data_bar_28_regular = "\uee98";
+ public const string calendar_date_20_regular = "\U000f0289";
+ public const string calendar_date_24_regular = "\U000f028a";
+ public const string calendar_date_28_regular = "\U000f028b";
+ public const string calendar_day_16_regular = "\ue244";
+ public const string calendar_day_20_regular = "\uf222";
+ public const string calendar_day_24_regular = "\uf223";
+ public const string calendar_day_28_regular = "\uf224";
+ public const string calendar_edit_16_regular = "\ue245";
+ public const string calendar_edit_20_regular = "\ue246";
+ public const string calendar_edit_24_regular = "\ue247";
+ public const string calendar_edit_32_regular = "\U000f05a1";
+ public const string calendar_empty_16_regular = "\uf225";
+ public const string calendar_empty_20_regular = "\uf226";
+ public const string calendar_empty_24_regular = "\uf227";
+ public const string calendar_empty_28_regular = "\uf228";
+ public const string calendar_empty_32_regular = "\ue248";
+ public const string calendar_empty_48_regular = "\uef44";
+ public const string calendar_error_16_regular = "\uf6e1";
+ public const string calendar_error_20_regular = "\ue249";
+ public const string calendar_error_24_regular = "\ue24a";
+ public const string calendar_eye_20_regular = "\U000f020a";
+ public const string calendar_info_16_regular = "\uf203";
+ public const string calendar_info_20_regular = "\ue24b";
+ public const string calendar_link_24_regular = "\U000f04e9";
+ public const string calendar_link_28_regular = "\U000f04ea";
+ public const string calendar_lock_16_regular = "\uef45";
+ public const string calendar_lock_20_regular = "\uef46";
+ public const string calendar_lock_24_regular = "\uef47";
+ public const string calendar_lock_28_regular = "\uef48";
+ public const string calendar_lock_32_regular = "\uef49";
+ public const string calendar_lock_48_regular = "\uef4a";
+ public const string calendar_ltr_32_regular = "\ue251";
+ public const string calendar_mail_16_regular = "\ue253";
+ public const string calendar_mail_20_regular = "\ue254";
+ public const string calendar_mention_20_regular = "\ue255";
+ public const string calendar_month_20_regular = "\uf22a";
+ public const string calendar_month_24_regular = "\uf22b";
+ public const string calendar_month_28_regular = "\uf22c";
+ public const string calendar_month_32_regular = "\ueec3";
+ public const string calendar_multiple_16_regular = "\uf204";
+ public const string calendar_multiple_20_regular = "\uf22d";
+ public const string calendar_multiple_24_regular = "\uf22e";
+ public const string calendar_multiple_28_regular = "\ue256";
+ public const string calendar_multiple_32_regular = "\ue257";
+ public const string calendar_note_16_regular = "\U000f042a";
+ public const string calendar_note_20_regular = "\U000f042b";
+ public const string calendar_note_24_regular = "\U000f042c";
+ public const string calendar_note_32_regular = "\U000f042d";
+ public const string calendar_pattern_16_regular = "\ue258";
+ public const string calendar_pattern_20_regular = "\ue259";
+ public const string calendar_person_16_regular = "\ue25a";
+ public const string calendar_person_20_regular = "\uf230";
+ public const string calendar_person_24_regular = "\ue25b";
+ public const string calendar_phone_16_regular = "\ue25c";
+ public const string calendar_phone_20_regular = "\ue25d";
+ public const string calendar_play_16_regular = "\uf0ad";
+ public const string calendar_play_20_regular = "\uf0ae";
+ public const string calendar_play_24_regular = "\uf0af";
+ public const string calendar_play_28_regular = "\uf0b0";
+ public const string calendar_question_mark_16_regular = "\ue25e";
+ public const string calendar_question_mark_20_regular = "\ue25f";
+ public const string calendar_question_mark_24_regular = "\ue260";
+ public const string calendar_record_16_regular = "\U000f03df";
+ public const string calendar_record_20_regular = "\U000f03e0";
+ public const string calendar_record_24_regular = "\U000f03e1";
+ public const string calendar_record_28_regular = "\U000f03e2";
+ public const string calendar_record_32_regular = "\U000f03e3";
+ public const string calendar_record_48_regular = "\U000f03e4";
+ public const string calendar_reply_16_regular = "\uf231";
+ public const string calendar_reply_20_regular = "\uf232";
+ public const string calendar_reply_24_regular = "\uf233";
+ public const string calendar_reply_28_regular = "\uf234";
+ public const string calendar_rtl_12_regular = "\ue261";
+ public const string calendar_rtl_16_regular = "\ue262";
+ public const string calendar_rtl_20_regular = "\ue263";
+ public const string calendar_rtl_24_regular = "\ue264";
+ public const string calendar_rtl_28_regular = "\ue265";
+ public const string calendar_rtl_32_regular = "\ue266";
+ public const string calendar_rtl_48_regular = "\ue267";
+ public const string calendar_search_16_regular = "\uf860";
+ public const string calendar_search_20_regular = "\ue268";
+ public const string calendar_settings_16_regular = "\ue269";
+ public const string calendar_settings_20_regular = "\uf235";
+ public const string calendar_settings_24_regular = "\uef4b";
+ public const string calendar_settings_28_regular = "\uef4c";
+ public const string calendar_settings_32_regular = "\uef4d";
+ public const string calendar_settings_48_regular = "\uef4e";
+ public const string calendar_shield_16_regular = "\uf0b1";
+ public const string calendar_shield_20_regular = "\uf0b2";
+ public const string calendar_shield_24_regular = "\uf0b3";
+ public const string calendar_shield_28_regular = "\uf0b4";
+ public const string calendar_shield_32_regular = "\uf0b5";
+ public const string calendar_shield_48_regular = "\uf0b6";
+ public const string calendar_sparkle_16_regular = "\U000f04ff";
+ public const string calendar_sparkle_20_regular = "\U000f0500";
+ public const string calendar_sparkle_24_regular = "\U000f0501";
+ public const string calendar_sparkle_28_regular = "\U000f0502";
+ public const string calendar_sparkle_32_regular = "\U000f0503";
+ public const string calendar_sparkle_48_regular = "\U000f0504";
+ public const string calendar_star_16_regular = "\ue26a";
+ public const string calendar_star_20_regular = "\uf236";
+ public const string calendar_star_24_regular = "\uf237";
+ public const string calendar_sync_16_regular = "\uf238";
+ public const string calendar_sync_20_regular = "\uf239";
+ public const string calendar_sync_24_regular = "\uf23a";
+ public const string calendar_template_20_regular = "\U000f0505";
+ public const string calendar_template_24_regular = "\U000f0506";
+ public const string calendar_template_32_regular = "\U000f0507";
+ public const string calendar_today_16_regular = "\uf23b";
+ public const string calendar_today_20_regular = "\uf23c";
+ public const string calendar_today_24_regular = "\uf23d";
+ public const string calendar_today_28_regular = "\uf23e";
+ public const string calendar_toolbox_20_regular = "\ue26b";
+ public const string calendar_toolbox_24_regular = "\ue26c";
+ public const string calendar_video_20_regular = "\U000f055f";
+ public const string calendar_video_24_regular = "\U000f04eb";
+ public const string calendar_video_28_regular = "\U000f04ec";
+ public const string calendar_week_numbers_20_regular = "\ue26d";
+ public const string calendar_week_numbers_24_regular = "\uf23f";
+ public const string calendar_week_start_20_regular = "\uf240";
+ public const string calendar_week_start_24_regular = "\uf241";
+ public const string calendar_week_start_28_regular = "\uf242";
+ public const string calendar_work_week_16_regular = "\uf243";
+ public const string calendar_work_week_20_regular = "\uf244";
+ public const string calendar_work_week_24_regular = "\uf245";
+ public const string calendar_work_week_28_regular = "\ue26e";
+ public const string call_12_regular = "\uef4f";
+ public const string call_16_regular = "\ue26f";
+ public const string call_20_regular = "\ue270";
+ public const string call_24_regular = "\ue271";
+ public const string call_28_regular = "\ue272";
+ public const string call_32_regular = "\ue273";
+ public const string call_48_regular = "\ue274";
+ public const string call_add_16_regular = "\ue275";
+ public const string call_add_20_regular = "\ue276";
+ public const string call_add_24_regular = "\uf246";
+ public const string call_checkmark_20_regular = "\uf207";
+ public const string call_checkmark_24_regular = "\ue277";
+ public const string call_connecting_20_regular = "\ue278";
+ public const string call_dismiss_16_regular = "\ue279";
+ public const string call_dismiss_20_regular = "\uf208";
+ public const string call_dismiss_24_regular = "\uf20b";
+ public const string call_end_12_regular = "\U000f02fa";
+ public const string call_end_16_regular = "\ue27a";
+ public const string call_end_20_regular = "\uf247";
+ public const string call_end_24_regular = "\uf248";
+ public const string call_end_28_regular = "\uf249";
+ public const string call_end_32_regular = "\U000f02fb";
+ public const string call_end_48_regular = "\U000f02fc";
+ public const string call_exclamation_20_regular = "\ue27b";
+ public const string call_forward_16_regular = "\ue27c";
+ public const string call_forward_20_regular = "\ue27d";
+ public const string call_forward_24_regular = "\uf24a";
+ public const string call_forward_28_regular = "\ue27e";
+ public const string call_forward_32_regular = "\uf6e7";
+ public const string call_forward_48_regular = "\ue27f";
+ public const string call_inbound_16_regular = "\uf24b";
+ public const string call_inbound_20_regular = "\ue280";
+ public const string call_inbound_24_regular = "\uf24c";
+ public const string call_inbound_28_regular = "\ue281";
+ public const string call_inbound_48_regular = "\ue282";
+ public const string call_missed_12_regular = "\uef50";
+ public const string call_missed_16_regular = "\uf24d";
+ public const string call_missed_20_regular = "\ue283";
+ public const string call_missed_24_regular = "\uf24e";
+ public const string call_missed_28_regular = "\ue284";
+ public const string call_missed_48_regular = "\ue285";
+ public const string call_outbound_16_regular = "\uf24f";
+ public const string call_outbound_20_regular = "\ue286";
+ public const string call_outbound_24_regular = "\uf250";
+ public const string call_outbound_28_regular = "\ue287";
+ public const string call_outbound_48_regular = "\ue288";
+ public const string call_park_16_regular = "\ue289";
+ public const string call_park_20_regular = "\ue28a";
+ public const string call_park_24_regular = "\uf251";
+ public const string call_park_28_regular = "\ue28b";
+ public const string call_park_32_regular = "\uf861";
+ public const string call_park_48_regular = "\ue28c";
+ public const string call_pause_20_regular = "\uf20c";
+ public const string call_pause_24_regular = "\uf20d";
+ public const string call_prohibited_16_regular = "\ue28d";
+ public const string call_prohibited_20_regular = "\ue28e";
+ public const string call_prohibited_24_regular = "\ue28f";
+ public const string call_prohibited_28_regular = "\ue290";
+ public const string call_prohibited_48_regular = "\ue291";
+ public const string call_transfer_16_regular = "\ue292";
+ public const string call_transfer_20_regular = "\ue293";
+ public const string call_transfer_24_regular = "\uf0b7";
+ public const string call_transfer_32_regular = "\uf0b8";
+ public const string call_warning_16_regular = "\ue294";
+ public const string call_warning_20_regular = "\ue295";
+ public const string calligraphy_pen_20_regular = "\uf252";
+ public const string calligraphy_pen_24_regular = "\uf253";
+ public const string calligraphy_pen_checkmark_20_regular = "\ue296";
+ public const string calligraphy_pen_error_20_regular = "\ue297";
+ public const string calligraphy_pen_question_mark_20_regular = "\ue298";
+ public const string camera_16_regular = "\ue299";
+ public const string camera_20_regular = "\uf254";
+ public const string camera_24_regular = "\uf255";
+ public const string camera_28_regular = "\uf256";
+ public const string camera_add_20_regular = "\uf257";
+ public const string camera_add_24_regular = "\uf258";
+ public const string camera_add_48_regular = "\uf259";
+ public const string camera_arrow_up_16_regular = "\U000f05be";
+ public const string camera_arrow_up_20_regular = "\U000f05bf";
+ public const string camera_arrow_up_24_regular = "\U000f05c0";
+ public const string camera_dome_16_regular = "\ue29a";
+ public const string camera_dome_20_regular = "\ue29b";
+ public const string camera_dome_24_regular = "\ue29c";
+ public const string camera_dome_28_regular = "\ue29d";
+ public const string camera_dome_48_regular = "\ue29e";
+ public const string camera_edit_20_regular = "\ue29f";
+ public const string camera_off_16_regular = "\uf0b9";
+ public const string camera_off_20_regular = "\ue2a0";
+ public const string camera_off_24_regular = "\ue2a1";
+ public const string camera_sparkles_16_regular = "\uf06d";
+ public const string camera_sparkles_20_regular = "\uf026";
+ public const string camera_sparkles_24_regular = "\uf027";
+ public const string camera_switch_20_regular = "\ue2a2";
+ public const string camera_switch_24_regular = "\uf25a";
+ public const string card_ui_20_regular = "\U000f0169";
+ public const string card_ui_24_regular = "\U000f016a";
+ public const string card_ui_portrait_flip_16_regular = "\U000f05f9";
+ public const string card_ui_portrait_flip_20_regular = "\U000f05fa";
+ public const string card_ui_portrait_flip_24_regular = "\U000f05fb";
+ public const string caret_down_12_regular = "\uf25f";
+ public const string caret_down_16_regular = "\uf260";
+ public const string caret_down_20_regular = "\uf261";
+ public const string caret_down_24_regular = "\uf262";
+ public const string caret_down_right_12_regular = "\ue2a3";
+ public const string caret_down_right_16_regular = "\ue2a4";
+ public const string caret_down_right_20_regular = "\ue2a5";
+ public const string caret_down_right_24_regular = "\ue2a6";
+ public const string caret_left_12_regular = "\uf263";
+ public const string caret_left_16_regular = "\uf264";
+ public const string caret_left_20_regular = "\uf265";
+ public const string caret_left_24_regular = "\uf266";
+ public const string caret_right_12_regular = "\uf267";
+ public const string caret_right_16_regular = "\uf268";
+ public const string caret_right_20_regular = "\uf269";
+ public const string caret_right_24_regular = "\uf26a";
+ public const string caret_up_12_regular = "\ue2a7";
+ public const string caret_up_16_regular = "\ue2a8";
+ public const string caret_up_20_regular = "\ue2a9";
+ public const string caret_up_24_regular = "\ue2aa";
+ public const string cart_16_regular = "\ue2ab";
+ public const string cart_20_regular = "\ue2ac";
+ public const string cart_24_regular = "\uf26b";
+ public const string cast_20_regular = "\uf26c";
+ public const string cast_24_regular = "\uf26d";
+ public const string cast_28_regular = "\uf26e";
+ public const string cast_multiple_20_regular = "\U000f02d0";
+ public const string cast_multiple_24_regular = "\U000f02d1";
+ public const string cast_multiple_28_regular = "\U000f02d2";
+ public const string catch_up_16_regular = "\ue2ad";
+ public const string catch_up_20_regular = "\ue2ae";
+ public const string catch_up_24_regular = "\ue2af";
+ public const string cd_16_regular = "\uf0ba";
+ public const string cellular_3g_20_regular = "\ue2b0";
+ public const string cellular_3g_24_regular = "\uf26f";
+ public const string cellular_4g_20_regular = "\ue2b1";
+ public const string cellular_4g_24_regular = "\uf270";
+ public const string cellular_5g_20_regular = "\ue2b2";
+ public const string cellular_5g_24_regular = "\ue2b3";
+ public const string cellular_data_1_20_regular = "\uf271";
+ public const string cellular_data_1_24_regular = "\uf272";
+ public const string cellular_data_2_20_regular = "\uf273";
+ public const string cellular_data_2_24_regular = "\uf274";
+ public const string cellular_data_3_20_regular = "\uf275";
+ public const string cellular_data_3_24_regular = "\uf276";
+ public const string cellular_data_4_20_regular = "\uf277";
+ public const string cellular_data_4_24_regular = "\uf278";
+ public const string cellular_data_5_20_regular = "\uf279";
+ public const string cellular_data_5_24_regular = "\uf27a";
+ public const string cellular_off_20_regular = "\ue2b4";
+ public const string cellular_off_24_regular = "\ue2b5";
+ public const string cellular_warning_20_regular = "\ue2b6";
+ public const string cellular_warning_24_regular = "\ue2b7";
+ public const string center_horizontal_20_regular = "\ue2b8";
+ public const string center_horizontal_24_regular = "\ue2b9";
+ public const string center_vertical_20_regular = "\ue2ba";
+ public const string center_vertical_24_regular = "\ue2bb";
+ public const string certificate_16_regular = "\uf0bb";
+ public const string certificate_20_regular = "\uf27e";
+ public const string certificate_24_regular = "\uf27f";
+ public const string certificate_32_regular = "\U000f0469";
+ public const string channel_16_regular = "\uf280";
+ public const string channel_20_regular = "\uf281";
+ public const string channel_24_regular = "\uf282";
+ public const string channel_28_regular = "\ue2bc";
+ public const string channel_48_regular = "\ue2bd";
+ public const string channel_add_16_regular = "\ue2be";
+ public const string channel_add_20_regular = "\ue2bf";
+ public const string channel_add_24_regular = "\ue2c0";
+ public const string channel_add_28_regular = "\ue2c1";
+ public const string channel_add_48_regular = "\ue2c2";
+ public const string channel_alert_16_regular = "\ue2c3";
+ public const string channel_alert_20_regular = "\ue2c4";
+ public const string channel_alert_24_regular = "\ue2c5";
+ public const string channel_alert_28_regular = "\ue2c6";
+ public const string channel_alert_48_regular = "\ue2c7";
+ public const string channel_arrow_left_16_regular = "\ue2c8";
+ public const string channel_arrow_left_20_regular = "\ue2c9";
+ public const string channel_arrow_left_24_regular = "\ue2ca";
+ public const string channel_arrow_left_28_regular = "\ue2cb";
+ public const string channel_arrow_left_48_regular = "\ue2cc";
+ public const string channel_dismiss_16_regular = "\ue2cd";
+ public const string channel_dismiss_20_regular = "\ue2ce";
+ public const string channel_dismiss_24_regular = "\ue2cf";
+ public const string channel_dismiss_28_regular = "\ue2d0";
+ public const string channel_dismiss_48_regular = "\ue2d1";
+ public const string channel_share_12_regular = "\ue2d2";
+ public const string channel_share_16_regular = "\ue2d3";
+ public const string channel_share_20_regular = "\ue2d4";
+ public const string channel_share_24_regular = "\ue2d5";
+ public const string channel_share_28_regular = "\ue2d6";
+ public const string channel_share_48_regular = "\ue2d7";
+ public const string channel_subtract_16_regular = "\ue2d8";
+ public const string channel_subtract_20_regular = "\ue2d9";
+ public const string channel_subtract_24_regular = "\ue2da";
+ public const string channel_subtract_28_regular = "\ue2db";
+ public const string channel_subtract_48_regular = "\ue2dc";
+ public const string chart_multiple_16_regular = "\U000f05d4";
+ public const string chart_multiple_20_regular = "\ue2dd";
+ public const string chart_multiple_24_regular = "\ue2de";
+ public const string chart_person_20_regular = "\ue2df";
+ public const string chart_person_24_regular = "\ue2e0";
+ public const string chart_person_28_regular = "\ue2e1";
+ public const string chart_person_48_regular = "\ue2e2";
+ public const string chat_12_regular = "\ue2e3";
+ public const string chat_16_regular = "\ue2e4";
+ public const string chat_20_regular = "\uf286";
+ public const string chat_24_regular = "\uf287";
+ public const string chat_28_regular = "\uf288";
+ public const string chat_32_regular = "\ue2e5";
+ public const string chat_48_regular = "\ue2e6";
+ public const string chat_add_16_regular = "\uef51";
+ public const string chat_add_20_regular = "\uef52";
+ public const string chat_add_24_regular = "\uef53";
+ public const string chat_add_28_regular = "\uef54";
+ public const string chat_add_32_regular = "\uef55";
+ public const string chat_add_48_regular = "\uef56";
+ public const string chat_arrow_back_16_regular = "\ue2e7";
+ public const string chat_arrow_back_20_regular = "\ue2e8";
+ public const string chat_arrow_back_down_16_regular = "\U000f0625";
+ public const string chat_arrow_back_down_20_regular = "\U000f0626";
+ public const string chat_arrow_back_down_24_regular = "\U000f0627";
+ public const string chat_arrow_back_down_28_regular = "\U000f0628";
+ public const string chat_arrow_back_down_32_regular = "\U000f0629";
+ public const string chat_arrow_back_down_48_regular = "\U000f062a";
+ public const string chat_arrow_double_back_16_regular = "\ue2e9";
+ public const string chat_arrow_double_back_20_regular = "\ue2ea";
+ public const string chat_bubbles_question_16_regular = "\uf8a8";
+ public const string chat_bubbles_question_20_regular = "\ue2eb";
+ public const string chat_bubbles_question_24_regular = "\uf289";
+ public const string chat_bubbles_question_28_regular = "\uf02a";
+ public const string chat_bubbles_question_32_regular = "\uf02b";
+ public const string chat_cursor_16_regular = "\uef57";
+ public const string chat_cursor_20_regular = "\uef58";
+ public const string chat_cursor_24_regular = "\uef59";
+ public const string chat_dismiss_16_regular = "\ue2ec";
+ public const string chat_dismiss_20_regular = "\ue2ed";
+ public const string chat_dismiss_24_regular = "\ue2ee";
+ public const string chat_empty_12_regular = "\uef5a";
+ public const string chat_empty_16_regular = "\uef5b";
+ public const string chat_empty_20_regular = "\uef5c";
+ public const string chat_empty_24_regular = "\uef5d";
+ public const string chat_empty_28_regular = "\uef5e";
+ public const string chat_empty_32_regular = "\uef5f";
+ public const string chat_empty_48_regular = "\uef60";
+ public const string chat_help_20_regular = "\uf220";
+ public const string chat_help_24_regular = "\uf28a";
+ public const string chat_lock_16_regular = "\U000f03b1";
+ public const string chat_lock_20_regular = "\U000f03b2";
+ public const string chat_lock_24_regular = "\U000f03b3";
+ public const string chat_lock_28_regular = "\U000f03b4";
+ public const string chat_mail_20_regular = "\ue2ef";
+ public const string chat_multiple_16_regular = "\uf8a9";
+ public const string chat_multiple_20_regular = "\uf8c8";
+ public const string chat_multiple_24_regular = "\uf8d3";
+ public const string chat_multiple_28_regular = "\uecdb";
+ public const string chat_multiple_32_regular = "\uecdc";
+ public const string chat_multiple_heart_16_regular = "\uf793";
+ public const string chat_multiple_heart_20_regular = "\uf794";
+ public const string chat_multiple_heart_24_regular = "\uf7cf";
+ public const string chat_multiple_heart_28_regular = "\uf7d0";
+ public const string chat_multiple_heart_32_regular = "\uf7d1";
+ public const string chat_off_20_regular = "\ue2f0";
+ public const string chat_off_24_regular = "\uf28b";
+ public const string chat_settings_16_regular = "\U000f05c1";
+ public const string chat_settings_20_regular = "\uf221";
+ public const string chat_settings_24_regular = "\uf229";
+ public const string chat_sparkle_16_regular = "\uf7d2";
+ public const string chat_sparkle_20_regular = "\uf7d3";
+ public const string chat_sparkle_24_regular = "\uf7d4";
+ public const string chat_sparkle_28_regular = "\uf7d5";
+ public const string chat_sparkle_32_regular = "\uf7d6";
+ public const string chat_sparkle_48_regular = "\uf7f2";
+ public const string chat_video_20_regular = "\ue2f1";
+ public const string chat_video_24_regular = "\ue2f2";
+ public const string chat_warning_16_regular = "\ue2f3";
+ public const string chat_warning_20_regular = "\ue2f4";
+ public const string chat_warning_24_regular = "\uf28c";
+ public const string check_20_regular = "\uf27b";
+ public const string check_24_regular = "\ue2f5";
+ public const string checkbox_1_20_regular = "\ue2f6";
+ public const string checkbox_1_24_regular = "\ue2f7";
+ public const string checkbox_2_20_regular = "\ue2f8";
+ public const string checkbox_2_24_regular = "\ue2f9";
+ public const string checkbox_arrow_right_20_regular = "\ue2fa";
+ public const string checkbox_arrow_right_24_regular = "\ue2fb";
+ public const string checkbox_checked_16_regular = "\uf27c";
+ public const string checkbox_checked_20_regular = "\uf28d";
+ public const string checkbox_checked_24_regular = "\uf28e";
+ public const string checkbox_checked_sync_16_regular = "\uf27d";
+ public const string checkbox_checked_sync_20_regular = "\ue2fc";
+ public const string checkbox_indeterminate_16_regular = "\ue2fd";
+ public const string checkbox_indeterminate_20_regular = "\ue2fe";
+ public const string checkbox_indeterminate_24_regular = "\ue2ff";
+ public const string checkbox_person_16_regular = "\ue300";
+ public const string checkbox_person_20_regular = "\ue301";
+ public const string checkbox_person_24_regular = "\ue302";
+ public const string square_12_regular = "\ueb73";
+ public const string square_16_regular = "\ueb74";
+ public const string square_24_regular = "\ueb76";
+ public const string checkbox_warning_20_regular = "\ue303";
+ public const string checkbox_warning_24_regular = "\ue304";
+ public const string checkmark_12_regular = "\uf293";
+ public const string checkmark_16_regular = "\ue305";
+ public const string checkmark_20_regular = "\uf294";
+ public const string checkmark_24_regular = "\uf295";
+ public const string checkmark_28_regular = "\uf296";
+ public const string checkmark_32_regular = "\uf8d4";
+ public const string checkmark_48_regular = "\ue306";
+ public const string checkmark_circle_12_regular = "\ue307";
+ public const string checkmark_circle_16_regular = "\uf297";
+ public const string checkmark_circle_20_regular = "\uf298";
+ public const string checkmark_circle_24_regular = "\uf299";
+ public const string checkmark_circle_32_regular = "\uf8e8";
+ public const string checkmark_circle_48_regular = "\uf29a";
+ public const string checkmark_circle_square_16_regular = "\U000f02ad";
+ public const string checkmark_circle_square_20_regular = "\U000f02ae";
+ public const string checkmark_circle_square_24_regular = "\U000f02af";
+ public const string checkmark_circle_warning_16_regular = "\U000f0521";
+ public const string checkmark_circle_warning_20_regular = "\U000f0522";
+ public const string checkmark_circle_warning_24_regular = "\U000f0523";
+ public const string checkmark_lock_16_regular = "\uf29b";
+ public const string checkmark_lock_20_regular = "\uf29c";
+ public const string checkmark_lock_24_regular = "\uf29d";
+ public const string checkmark_note_20_regular = "\ue308";
+ public const string checkmark_square_20_regular = "\ue309";
+ public const string checkmark_square_24_regular = "\uf29e";
+ public const string checkmark_starburst_16_regular = "\uf283";
+ public const string checkmark_starburst_20_regular = "\ue30a";
+ public const string checkmark_starburst_24_regular = "\ue30b";
+ public const string checkmark_underline_circle_16_regular = "\uf29f";
+ public const string checkmark_underline_circle_20_regular = "\uf2a0";
+ public const string checkmark_underline_circle_24_regular = "\U000f042e";
+ public const string chess_20_regular = "\ue30c";
+ public const string chevron_circle_down_12_regular = "\ue30d";
+ public const string chevron_circle_down_16_regular = "\ue30e";
+ public const string chevron_circle_down_20_regular = "\ue30f";
+ public const string chevron_circle_down_24_regular = "\ue310";
+ public const string chevron_circle_down_28_regular = "\ue311";
+ public const string chevron_circle_down_32_regular = "\ue312";
+ public const string chevron_circle_down_48_regular = "\ue313";
+ public const string chevron_circle_left_12_regular = "\ue314";
+ public const string chevron_circle_left_16_regular = "\ue315";
+ public const string chevron_circle_left_20_regular = "\ue316";
+ public const string chevron_circle_left_24_regular = "\ue317";
+ public const string chevron_circle_left_28_regular = "\ue318";
+ public const string chevron_circle_left_32_regular = "\ue319";
+ public const string chevron_circle_left_48_regular = "\ue31a";
+ public const string chevron_circle_right_12_regular = "\ue31b";
+ public const string chevron_circle_right_16_regular = "\ue31c";
+ public const string chevron_circle_right_20_regular = "\ue31d";
+ public const string chevron_circle_right_24_regular = "\ue31e";
+ public const string chevron_circle_right_28_regular = "\ue31f";
+ public const string chevron_circle_right_32_regular = "\ue320";
+ public const string chevron_circle_right_48_regular = "\ue321";
+ public const string chevron_circle_up_12_regular = "\ue322";
+ public const string chevron_circle_up_16_regular = "\ue323";
+ public const string chevron_circle_up_20_regular = "\ue324";
+ public const string chevron_circle_up_24_regular = "\ue325";
+ public const string chevron_circle_up_28_regular = "\ue326";
+ public const string chevron_circle_up_32_regular = "\ue327";
+ public const string chevron_circle_up_48_regular = "\ue328";
+ public const string chevron_double_down_16_regular = "\uf284";
+ public const string chevron_double_down_20_regular = "\ue329";
+ public const string chevron_double_left_16_regular = "\uf285";
+ public const string chevron_double_left_20_regular = "\ue32a";
+ public const string chevron_double_right_16_regular = "\uf2a7";
+ public const string chevron_double_right_20_regular = "\ue32b";
+ public const string chevron_double_up_16_regular = "\ue32c";
+ public const string chevron_double_up_20_regular = "\ue32d";
+ public const string chevron_down_12_regular = "\uf2a1";
+ public const string chevron_down_16_regular = "\uf2a2";
+ public const string chevron_down_20_regular = "\uf2a3";
+ public const string chevron_down_24_regular = "\uf2a4";
+ public const string chevron_down_28_regular = "\uf2a5";
+ public const string chevron_down_32_regular = "\U000f0320";
+ public const string chevron_down_48_regular = "\uf2a6";
+ public const string chevron_down_up_16_regular = "\U000f016b";
+ public const string chevron_down_up_20_regular = "\U000f016c";
+ public const string chevron_down_up_24_regular = "\U000f016d";
+ public const string chevron_left_12_regular = "\uf2a8";
+ public const string chevron_left_16_regular = "\uf2a9";
+ public const string chevron_left_20_regular = "\uf2aa";
+ public const string chevron_left_24_regular = "\uf2ab";
+ public const string chevron_left_28_regular = "\uf2ac";
+ public const string chevron_left_32_regular = "\U000f0321";
+ public const string chevron_left_48_regular = "\uf2ad";
+ public const string chevron_right_12_regular = "\uf2ae";
+ public const string chevron_right_16_regular = "\uf2af";
+ public const string chevron_right_20_regular = "\uf2b0";
+ public const string chevron_right_24_regular = "\uf2b1";
+ public const string chevron_right_28_regular = "\uf2b2";
+ public const string chevron_right_32_regular = "\U000f0322";
+ public const string chevron_right_48_regular = "\uf2b3";
+ public const string chevron_up_12_regular = "\uf2b4";
+ public const string chevron_up_16_regular = "\uf2b5";
+ public const string chevron_up_20_regular = "\uf2b6";
+ public const string chevron_up_24_regular = "\uf2b7";
+ public const string chevron_up_28_regular = "\uf2b8";
+ public const string chevron_up_32_regular = "\U000f0323";
+ public const string chevron_up_48_regular = "\uf2b9";
+ public const string chevron_up_down_16_regular = "\ue32e";
+ public const string chevron_up_down_20_regular = "\ue32f";
+ public const string chevron_up_down_24_regular = "\ue330";
+ public const string circle_12_regular = "\ue331";
+ public const string circle_16_regular = "\uf2ba";
+ public const string circle_20_regular = "\uf2bb";
+ public const string circle_24_regular = "\uf2bc";
+ public const string circle_28_regular = "\U000f00d6";
+ public const string circle_32_regular = "\ue332";
+ public const string circle_48_regular = "\ue333";
+ public const string circle_edit_20_regular = "\ue334";
+ public const string circle_edit_24_regular = "\ue335";
+ public const string circle_eraser_20_regular = "\ue336";
+ public const string circle_half_fill_12_regular = "\ue337";
+ public const string circle_half_fill_16_regular = "\uf30a";
+ public const string circle_half_fill_20_regular = "\uf2bd";
+ public const string circle_half_fill_24_regular = "\uf2be";
+ public const string circle_highlight_20_regular = "\U000f05c2";
+ public const string circle_highlight_24_regular = "\U000f05c3";
+ public const string circle_hint_16_regular = "\U000f0110";
+ public const string circle_hint_20_regular = "\U000f0111";
+ public const string circle_hint_24_regular = "\U000f05c4";
+ public const string circle_hint_half_vertical_16_regular = "\U000f02d3";
+ public const string circle_hint_half_vertical_20_regular = "\U000f02d4";
+ public const string circle_hint_half_vertical_24_regular = "\U000f02d5";
+ public const string circle_image_16_regular = "\uef61";
+ public const string circle_image_20_regular = "\ue338";
+ public const string circle_image_24_regular = "\uef62";
+ public const string circle_image_28_regular = "\uef63";
+ public const string circle_line_12_regular = "\ue339";
+ public const string circle_line_16_regular = "\U000f01ca";
+ public const string circle_line_20_regular = "\ue33a";
+ public const string circle_line_24_regular = "\uf2bf";
+ public const string circle_multiple_subtract_checkmark_20_regular = "\ue33b";
+ public const string circle_off_16_regular = "\ue33c";
+ public const string circle_off_20_regular = "\ue33d";
+ public const string circle_shadow_20_regular = "\U000f05c5";
+ public const string circle_shadow_24_regular = "\U000f05c6";
+ public const string circle_small_20_regular = "\ue33e";
+ public const string circle_small_24_regular = "\uf2c0";
+ public const string city_16_regular = "\uf2c1";
+ public const string city_20_regular = "\uf2c2";
+ public const string city_24_regular = "\uf2c3";
+ public const string class_20_regular = "\ue33f";
+ public const string class_24_regular = "\uf2c4";
+ public const string classification_16_regular = "\uf2c5";
+ public const string classification_20_regular = "\uf2c6";
+ public const string classification_24_regular = "\uf2c7";
+ public const string classification_32_regular = "\U000f0580";
+ public const string clear_formatting_16_regular = "\ue340";
+ public const string clear_formatting_20_regular = "\ue341";
+ public const string clear_formatting_24_regular = "\uf2c8";
+ public const string clipboard_12_regular = "\U000f0508";
+ public const string clipboard_16_regular = "\ue342";
+ public const string clipboard_20_regular = "\uf2c9";
+ public const string clipboard_24_regular = "\uf2ca";
+ public const string clipboard_28_regular = "\U000f03e5";
+ public const string clipboard_3_day_16_regular = "\uee99";
+ public const string clipboard_3_day_20_regular = "\uee9a";
+ public const string clipboard_3_day_24_regular = "\uee9b";
+ public const string clipboard_32_regular = "\ue343";
+ public const string clipboard_48_regular = "\U000f0509";
+ public const string clipboard_arrow_right_16_regular = "\ue344";
+ public const string clipboard_arrow_right_20_regular = "\ue345";
+ public const string clipboard_arrow_right_24_regular = "\ue346";
+ public const string clipboard_brush_16_regular = "\U000f046a";
+ public const string clipboard_brush_20_regular = "\U000f046b";
+ public const string clipboard_brush_24_regular = "\U000f046c";
+ public const string clipboard_brush_28_regular = "\U000f046d";
+ public const string clipboard_brush_32_regular = "\U000f046e";
+ public const string clipboard_bullet_list_ltr_16_regular = "\ue347";
+ public const string clipboard_bullet_list_ltr_20_regular = "\ue348";
+ public const string clipboard_bullet_list_rtl_16_regular = "\ue349";
+ public const string clipboard_bullet_list_rtl_20_regular = "\ue34a";
+ public const string clipboard_checkmark_16_regular = "\uf7f3";
+ public const string clipboard_checkmark_20_regular = "\ue34b";
+ public const string clipboard_checkmark_24_regular = "\ue34c";
+ public const string clipboard_clock_20_regular = "\ue34d";
+ public const string clipboard_clock_24_regular = "\ue34e";
+ public const string clipboard_code_16_regular = "\uf2cb";
+ public const string clipboard_code_20_regular = "\uf2cc";
+ public const string clipboard_code_24_regular = "\uf2cd";
+ public const string clipboard_data_bar_20_regular = "\ue34f";
+ public const string clipboard_data_bar_24_regular = "\ue350";
+ public const string clipboard_data_bar_32_regular = "\ue351";
+ public const string clipboard_day_16_regular = "\uee9c";
+ public const string clipboard_day_20_regular = "\uee9d";
+ public const string clipboard_day_24_regular = "\uee9e";
+ public const string clipboard_edit_20_regular = "\ue352";
+ public const string clipboard_error_16_regular = "\uf0bc";
+ public const string clipboard_error_20_regular = "\ue353";
+ public const string clipboard_error_24_regular = "\ue354";
+ public const string clipboard_heart_20_regular = "\uf30b";
+ public const string clipboard_heart_24_regular = "\ue355";
+ public const string clipboard_image_20_regular = "\ue356";
+ public const string clipboard_image_24_regular = "\ue357";
+ public const string clipboard_letter_16_regular = "\uf2ce";
+ public const string clipboard_letter_20_regular = "\uf2cf";
+ public const string clipboard_letter_24_regular = "\uf2d0";
+ public const string clipboard_link_16_regular = "\uf2d1";
+ public const string clipboard_link_20_regular = "\uf2d2";
+ public const string clipboard_link_24_regular = "\uf2d3";
+ public const string clipboard_math_formula_16_regular = "\U000f03e6";
+ public const string clipboard_math_formula_20_regular = "\U000f03e7";
+ public const string clipboard_math_formula_24_regular = "\U000f03e8";
+ public const string clipboard_math_formula_28_regular = "\U000f03e9";
+ public const string clipboard_math_formula_32_regular = "\U000f03ea";
+ public const string clipboard_month_16_regular = "\uee9f";
+ public const string clipboard_month_20_regular = "\ueea0";
+ public const string clipboard_month_24_regular = "\ueea1";
+ public const string clipboard_more_20_regular = "\ue358";
+ public const string clipboard_more_24_regular = "\uf2d4";
+ public const string clipboard_multiple_16_regular = "\uf0bd";
+ public const string clipboard_note_16_regular = "\uf0be";
+ public const string clipboard_note_20_regular = "\ue359";
+ public const string clipboard_number_123_16_regular = "\U000f03eb";
+ public const string clipboard_number_123_20_regular = "\U000f03ec";
+ public const string clipboard_number_123_24_regular = "\U000f03ed";
+ public const string clipboard_number_123_28_regular = "\U000f03ee";
+ public const string clipboard_number_123_32_regular = "\U000f03ef";
+ public const string clipboard_paste_16_regular = "\ue35a";
+ public const string clipboard_paste_20_regular = "\uf2d5";
+ public const string clipboard_paste_24_regular = "\uf2d6";
+ public const string clipboard_paste_32_regular = "\U000f020b";
+ public const string clipboard_pulse_20_regular = "\uf322";
+ public const string clipboard_pulse_24_regular = "\ue35b";
+ public const string clipboard_search_20_regular = "\uf2d7";
+ public const string clipboard_search_24_regular = "\uf2d8";
+ public const string clipboard_settings_20_regular = "\uf32d";
+ public const string clipboard_settings_24_regular = "\ue35c";
+ public const string clipboard_task_16_regular = "\uf0bf";
+ public const string clipboard_task_20_regular = "\ue35d";
+ public const string clipboard_task_24_regular = "\ue35e";
+ public const string clipboard_task_add_20_regular = "\ue35f";
+ public const string clipboard_task_add_24_regular = "\ue360";
+ public const string clipboard_task_list_16_regular = "\U000f038b";
+ public const string clipboard_task_list_ltr_20_regular = "\ue361";
+ public const string clipboard_task_list_ltr_24_regular = "\ue362";
+ public const string clipboard_task_list_rtl_20_regular = "\ue363";
+ public const string clipboard_task_list_rtl_24_regular = "\ue364";
+ public const string clipboard_text_32_regular = "\ue365";
+ public const string clipboard_text_edit_20_regular = "\ue366";
+ public const string clipboard_text_edit_24_regular = "\ue367";
+ public const string clipboard_text_edit_32_regular = "\ue368";
+ public const string clipboard_text_ltr_16_regular = "\uf0c0";
+ public const string clipboard_text_ltr_20_regular = "\ue369";
+ public const string clipboard_text_ltr_24_regular = "\ue36a";
+ public const string clipboard_text_rtl_16_regular = "\uf0c1";
+ public const string clipboard_text_rtl_20_regular = "\ue36c";
+ public const string clipboard_text_rtl_24_regular = "\ue36d";
+ public const string clock_12_regular = "\uf2db";
+ public const string clock_16_regular = "\uf2dc";
+ public const string clock_20_regular = "\uf2dd";
+ public const string clock_24_regular = "\uf2de";
+ public const string clock_28_regular = "\uf2df";
+ public const string clock_32_regular = "\ue36e";
+ public const string clock_48_regular = "\uf2e0";
+ public const string clock_alarm_16_regular = "\ue36f";
+ public const string clock_alarm_20_regular = "\uf2e1";
+ public const string clock_alarm_24_regular = "\uf2e2";
+ public const string clock_alarm_32_regular = "\ue370";
+ public const string clock_arrow_download_20_regular = "\uf32e";
+ public const string clock_arrow_download_24_regular = "\ue371";
+ public const string clock_bill_16_regular = "\U000f0560";
+ public const string clock_bill_20_regular = "\U000f0561";
+ public const string clock_bill_24_regular = "\U000f0562";
+ public const string clock_bill_32_regular = "\U000f0563";
+ public const string clock_dismiss_20_regular = "\ue372";
+ public const string clock_dismiss_24_regular = "\ue373";
+ public const string clock_lock_16_regular = "\uf819";
+ public const string clock_lock_20_regular = "\uf81a";
+ public const string clock_lock_24_regular = "\uf83d";
+ public const string clock_pause_20_regular = "\ue374";
+ public const string clock_pause_24_regular = "\ue375";
+ public const string clock_toolbox_20_regular = "\ue376";
+ public const string clock_toolbox_24_regular = "\ue377";
+ public const string closed_caption_16_regular = "\ue378";
+ public const string closed_caption_20_regular = "\ue379";
+ public const string closed_caption_24_regular = "\uf2e3";
+ public const string closed_caption_28_regular = "\ue37a";
+ public const string closed_caption_32_regular = "\ue37b";
+ public const string closed_caption_48_regular = "\ue37c";
+ public const string closed_caption_off_16_regular = "\ue37d";
+ public const string closed_caption_off_20_regular = "\ue37e";
+ public const string closed_caption_off_24_regular = "\ue37f";
+ public const string closed_caption_off_28_regular = "\ue380";
+ public const string closed_caption_off_48_regular = "\ue381";
+ public const string cloud_16_regular = "\ue382";
+ public const string cloud_20_regular = "\uf2e4";
+ public const string cloud_24_regular = "\uf2e5";
+ public const string cloud_28_regular = "\ue383";
+ public const string cloud_32_regular = "\ue384";
+ public const string cloud_48_regular = "\uf2e6";
+ public const string cloud_add_16_regular = "\uf32f";
+ public const string cloud_add_20_regular = "\ue385";
+ public const string cloud_add_24_regular = "\uf0c2";
+ public const string cloud_archive_16_regular = "\ue386";
+ public const string cloud_archive_20_regular = "\ue387";
+ public const string cloud_archive_24_regular = "\ue388";
+ public const string cloud_archive_28_regular = "\ue389";
+ public const string cloud_archive_32_regular = "\ue38a";
+ public const string cloud_archive_48_regular = "\ue38b";
+ public const string cloud_arrow_down_16_regular = "\ue38c";
+ public const string cloud_arrow_down_20_regular = "\ue38d";
+ public const string cloud_arrow_down_24_regular = "\ue38e";
+ public const string cloud_arrow_down_28_regular = "\ue38f";
+ public const string cloud_arrow_down_32_regular = "\ue390";
+ public const string cloud_arrow_down_48_regular = "\ue391";
+ public const string cloud_arrow_right_16_regular = "\U000f0524";
+ public const string cloud_arrow_right_20_regular = "\U000f0525";
+ public const string cloud_arrow_right_24_regular = "\U000f0526";
+ public const string cloud_arrow_up_16_regular = "\ue392";
+ public const string cloud_arrow_up_20_regular = "\ue393";
+ public const string cloud_arrow_up_24_regular = "\ue394";
+ public const string cloud_arrow_up_28_regular = "\ue395";
+ public const string cloud_arrow_up_32_regular = "\ue396";
+ public const string cloud_arrow_up_48_regular = "\ue397";
+ public const string cloud_beaker_16_regular = "\U000f046f";
+ public const string cloud_beaker_20_regular = "\U000f0470";
+ public const string cloud_beaker_24_regular = "\U000f0471";
+ public const string cloud_beaker_28_regular = "\U000f0472";
+ public const string cloud_beaker_32_regular = "\U000f0473";
+ public const string cloud_beaker_48_regular = "\U000f0474";
+ public const string cloud_bidirectional_20_regular = "\U000f020c";
+ public const string cloud_bidirectional_24_regular = "\U000f020d";
+ public const string cloud_checkmark_16_regular = "\ue398";
+ public const string cloud_checkmark_20_regular = "\ue399";
+ public const string cloud_checkmark_24_regular = "\ue39a";
+ public const string cloud_checkmark_28_regular = "\ue39b";
+ public const string cloud_checkmark_32_regular = "\ue39c";
+ public const string cloud_checkmark_48_regular = "\ue39d";
+ public const string cloud_cube_16_regular = "\U000f0475";
+ public const string cloud_cube_20_regular = "\U000f0476";
+ public const string cloud_cube_24_regular = "\U000f0477";
+ public const string cloud_cube_28_regular = "\U000f0478";
+ public const string cloud_cube_32_regular = "\U000f0479";
+ public const string cloud_cube_48_regular = "\U000f047a";
+ public const string cloud_database_20_regular = "\U000f0112";
+ public const string cloud_desktop_20_regular = "\U000f0113";
+ public const string cloud_dismiss_16_regular = "\ue39e";
+ public const string cloud_dismiss_20_regular = "\ue39f";
+ public const string cloud_dismiss_24_regular = "\ue3a0";
+ public const string cloud_dismiss_28_regular = "\ue3a1";
+ public const string cloud_dismiss_32_regular = "\ue3a2";
+ public const string cloud_dismiss_48_regular = "\ue3a3";
+ public const string cloud_edit_16_regular = "\uf330";
+ public const string cloud_edit_20_regular = "\ue3a4";
+ public const string cloud_edit_24_regular = "\uf0c3";
+ public const string cloud_error_16_regular = "\uefda";
+ public const string cloud_error_20_regular = "\uefdb";
+ public const string cloud_error_24_regular = "\uefdc";
+ public const string cloud_error_28_regular = "\uefdd";
+ public const string cloud_error_32_regular = "\uefde";
+ public const string cloud_error_48_regular = "\uefdf";
+ public const string cloud_flow_20_regular = "\uf337";
+ public const string cloud_flow_24_regular = "\ue3a5";
+ public const string cloud_link_16_regular = "\uf338";
+ public const string cloud_link_20_regular = "\ue3a6";
+ public const string cloud_link_24_regular = "\uf0c4";
+ public const string cloud_off_16_regular = "\ue3a7";
+ public const string cloud_off_20_regular = "\ue3a8";
+ public const string cloud_off_24_regular = "\uf2ea";
+ public const string cloud_off_28_regular = "\ue3a9";
+ public const string cloud_off_32_regular = "\ue3aa";
+ public const string cloud_off_48_regular = "\uf2eb";
+ public const string cloud_swap_20_regular = "\ue3ab";
+ public const string cloud_swap_24_regular = "\ue3ac";
+ public const string cloud_sync_16_regular = "\ue3ad";
+ public const string cloud_sync_20_regular = "\ue3ae";
+ public const string cloud_sync_24_regular = "\ue3af";
+ public const string cloud_sync_28_regular = "\ue3b0";
+ public const string cloud_sync_32_regular = "\ue3b1";
+ public const string cloud_sync_48_regular = "\ue3b2";
+ public const string cloud_words_16_regular = "\ue3b3";
+ public const string cloud_words_20_regular = "\ue3b4";
+ public const string cloud_words_24_regular = "\ue3b5";
+ public const string cloud_words_28_regular = "\ue3b6";
+ public const string cloud_words_32_regular = "\ue3b7";
+ public const string cloud_words_48_regular = "\ue3b8";
+ public const string clover_16_regular = "\uf83e";
+ public const string clover_20_regular = "\uf8b4";
+ public const string clover_24_regular = "\uf8e9";
+ public const string clover_28_regular = "\uf8ea";
+ public const string clover_32_regular = "\uf8ef";
+ public const string clover_48_regular = "\U000f0000";
+ public const string code_16_regular = "\uf339";
+ public const string code_20_regular = "\uf2ef";
+ public const string code_24_regular = "\uf2f0";
+ public const string code_block_16_regular = "\uefba";
+ public const string code_block_20_regular = "\uefbb";
+ public const string code_block_24_regular = "\uefbc";
+ public const string code_block_28_regular = "\uefbd";
+ public const string code_block_32_regular = "\uefbe";
+ public const string code_block_48_regular = "\uefbf";
+ public const string code_circle_20_regular = "\ue3b9";
+ public const string code_circle_24_regular = "\U000f0114";
+ public const string code_circle_32_regular = "\U000f0115";
+ public const string code_cs_16_regular = "\uf0c5";
+ public const string code_cs_rectangle_16_regular = "\uf0c6";
+ public const string code_fs_16_regular = "\uf0c7";
+ public const string code_fs_rectangle_16_regular = "\uf0c8";
+ public const string code_js_16_regular = "\uf0c9";
+ public const string code_js_rectangle_16_regular = "\uf0ca";
+ public const string code_py_16_regular = "\uf0cb";
+ public const string code_py_rectangle_16_regular = "\uf0cc";
+ public const string code_rb_16_regular = "\uf0cd";
+ public const string code_rb_rectangle_16_regular = "\uf0ce";
+ public const string code_text_16_regular = "\uef64";
+ public const string code_text_20_regular = "\ue3ba";
+ public const string code_text_edit_20_regular = "\ue3bb";
+ public const string code_text_off_16_regular = "\uf0cf";
+ public const string code_ts_16_regular = "\uf0d0";
+ public const string code_ts_rectangle_16_regular = "\uf0d1";
+ public const string code_vb_16_regular = "\uf0d2";
+ public const string code_vb_rectangle_16_regular = "\uf0d3";
+ public const string collections_16_regular = "\U000f03f0";
+ public const string collections_20_regular = "\uf2f1";
+ public const string collections_24_regular = "\uf2f2";
+ public const string collections_add_20_regular = "\uf2f3";
+ public const string collections_add_24_regular = "\uf2f4";
+ public const string color_16_regular = "\ue3bc";
+ public const string color_20_regular = "\uf2f5";
+ public const string color_24_regular = "\uf2f6";
+ public const string color_background_20_regular = "\uf2f7";
+ public const string color_background_24_regular = "\uf2f8";
+ public const string color_background_accent_20_regular = "\ue3bd";
+ public const string color_background_accent_24_regular = "\ue3be";
+ public const string color_fill_16_regular = "\ue3bf";
+ public const string color_fill_20_regular = "\uf2f9";
+ public const string color_fill_24_regular = "\uf2fa";
+ public const string color_fill_28_regular = "\ue3c0";
+ public const string color_fill_accent_16_regular = "\ue3c1";
+ public const string color_fill_accent_20_regular = "\ue3c2";
+ public const string color_fill_accent_24_regular = "\ue3c3";
+ public const string color_fill_accent_28_regular = "\ue3c4";
+ public const string color_line_16_regular = "\ue3c5";
+ public const string color_line_20_regular = "\uf2fb";
+ public const string color_line_24_regular = "\uf2fc";
+ public const string color_line_accent_16_regular = "\ue3c6";
+ public const string color_line_accent_20_regular = "\ue3c7";
+ public const string color_line_accent_24_regular = "\ue3c8";
+ public const string column_20_regular = "\ue3c9";
+ public const string column_24_regular = "\U000f05d5";
+ public const string column_arrow_right_20_regular = "\ue3ca";
+ public const string column_double_compare_20_regular = "\ue3cb";
+ public const string column_edit_20_regular = "\ue3cc";
+ public const string column_edit_24_regular = "\ue3cd";
+ public const string column_single_16_regular = "\U000f0116";
+ public const string column_single_compare_16_regular = "\U000f016e";
+ public const string column_single_compare_20_regular = "\U000f016f";
+ public const string column_triple_20_regular = "\ue3ce";
+ public const string column_triple_24_regular = "\uf2fd";
+ public const string column_triple_edit_20_regular = "\ue3cf";
+ public const string column_triple_edit_24_regular = "\ue3d0";
+ public const string comma_20_regular = "\ue3d1";
+ public const string comma_24_regular = "\ue3d2";
+ public const string comment_12_regular = "\ue3d3";
+ public const string comment_16_regular = "\uf2fe";
+ public const string comment_20_regular = "\uf2ff";
+ public const string comment_24_regular = "\uf300";
+ public const string comment_28_regular = "\ue3d4";
+ public const string comment_32_regular = "\U000f05e6";
+ public const string comment_48_regular = "\ue3d5";
+ public const string comment_add_12_regular = "\ue3d6";
+ public const string comment_add_16_regular = "\ue3d7";
+ public const string comment_add_20_regular = "\ue3d8";
+ public const string comment_add_24_regular = "\uf301";
+ public const string comment_add_28_regular = "\ue3d9";
+ public const string comment_add_32_regular = "\U000f05e7";
+ public const string comment_add_48_regular = "\ue3da";
+ public const string comment_arrow_left_12_regular = "\ue3db";
+ public const string comment_arrow_left_16_regular = "\ue3dc";
+ public const string comment_arrow_left_20_regular = "\ue3dd";
+ public const string comment_arrow_left_24_regular = "\ue3de";
+ public const string comment_arrow_left_28_regular = "\ue3df";
+ public const string comment_arrow_left_48_regular = "\ue3e0";
+ public const string comment_arrow_right_12_regular = "\ue3e1";
+ public const string comment_arrow_right_16_regular = "\ue3e2";
+ public const string comment_arrow_right_20_regular = "\ue3e3";
+ public const string comment_arrow_right_24_regular = "\ue3e4";
+ public const string comment_arrow_right_28_regular = "\ue3e5";
+ public const string comment_arrow_right_48_regular = "\ue3e6";
+ public const string comment_checkmark_12_regular = "\ue3e7";
+ public const string comment_checkmark_16_regular = "\ue3e8";
+ public const string comment_checkmark_20_regular = "\ue3e9";
+ public const string comment_checkmark_24_regular = "\ue3ea";
+ public const string comment_checkmark_28_regular = "\ue3eb";
+ public const string comment_checkmark_48_regular = "\ue3ec";
+ public const string comment_dismiss_20_regular = "\ue3ed";
+ public const string comment_dismiss_24_regular = "\ue3ee";
+ public const string comment_edit_16_regular = "\U000f020e";
+ public const string comment_edit_20_regular = "\ue3ef";
+ public const string comment_edit_24_regular = "\ue3f0";
+ public const string comment_error_16_regular = "\uf350";
+ public const string comment_error_20_regular = "\ue3f1";
+ public const string comment_error_24_regular = "\ue3f2";
+ public const string comment_lightning_20_regular = "\uf351";
+ public const string comment_lightning_24_regular = "\uf361";
+ public const string comment_link_16_regular = "\U000f0001";
+ public const string comment_link_20_regular = "\U000f0002";
+ public const string comment_link_24_regular = "\U000f0003";
+ public const string comment_link_28_regular = "\U000f0004";
+ public const string comment_link_48_regular = "\U000f0005";
+ public const string comment_mention_16_regular = "\uf303";
+ public const string comment_mention_20_regular = "\uf304";
+ public const string comment_mention_24_regular = "\uf305";
+ public const string comment_multiple_16_regular = "\uf306";
+ public const string comment_multiple_20_regular = "\uf307";
+ public const string comment_multiple_24_regular = "\uf308";
+ public const string comment_multiple_28_regular = "\ue3f3";
+ public const string comment_multiple_32_regular = "\ue3f4";
+ public const string comment_multiple_checkmark_16_regular = "\ue3f5";
+ public const string comment_multiple_checkmark_20_regular = "\ue3f6";
+ public const string comment_multiple_checkmark_24_regular = "\ue3f7";
+ public const string comment_multiple_checkmark_28_regular = "\ue3f8";
+ public const string comment_multiple_link_16_regular = "\ue3f9";
+ public const string comment_multiple_link_20_regular = "\ue3fa";
+ public const string comment_multiple_link_24_regular = "\ue3fb";
+ public const string comment_multiple_link_28_regular = "\ue3fc";
+ public const string comment_multiple_link_32_regular = "\ue3fd";
+ public const string comment_note_20_regular = "\ue3fe";
+ public const string comment_note_24_regular = "\ue3ff";
+ public const string comment_off_16_regular = "\ue400";
+ public const string comment_off_20_regular = "\ue401";
+ public const string comment_off_24_regular = "\ue402";
+ public const string comment_off_28_regular = "\ue403";
+ public const string comment_off_48_regular = "\ue404";
+ public const string communication_16_regular = "\uf30c";
+ public const string communication_20_regular = "\uf30d";
+ public const string communication_24_regular = "\uf30e";
+ public const string communication_person_20_regular = "\ue405";
+ public const string communication_person_24_regular = "\ue406";
+ public const string communication_shield_16_regular = "\U000f03f1";
+ public const string communication_shield_20_regular = "\U000f03f2";
+ public const string communication_shield_24_regular = "\U000f03f3";
+ public const string compass_northwest_16_regular = "\uf30f";
+ public const string compass_northwest_20_regular = "\uf310";
+ public const string compass_northwest_24_regular = "\uf311";
+ public const string compass_northwest_28_regular = "\uf312";
+ public const string component_2_double_tap_swipe_down_24_regular = "\ue407";
+ public const string component_2_double_tap_swipe_up_24_regular = "\ue408";
+ public const string compose_12_regular = "\U000f050a";
+ public const string compose_16_regular = "\uf313";
+ public const string compose_20_regular = "\uf314";
+ public const string compose_24_regular = "\uf315";
+ public const string compose_28_regular = "\uf316";
+ public const string compose_32_regular = "\U000f050b";
+ public const string compose_48_regular = "\U000f050c";
+ public const string cone_16_regular = "\uf0d4";
+ public const string conference_room_16_regular = "\uf317";
+ public const string conference_room_20_regular = "\uf318";
+ public const string conference_room_24_regular = "\uf319";
+ public const string conference_room_28_regular = "\uf31a";
+ public const string conference_room_48_regular = "\uf31b";
+ public const string connected_16_regular = "\ueeeb";
+ public const string connected_20_regular = "\ueeec";
+ public const string connector_16_regular = "\uf31c";
+ public const string connector_20_regular = "\uf31d";
+ public const string connector_24_regular = "\uf31e";
+ public const string contact_card_16_regular = "\uf362";
+ public const string contact_card_20_regular = "\uf31f";
+ public const string contact_card_24_regular = "\uf320";
+ public const string contact_card_28_regular = "\ue409";
+ public const string contact_card_32_regular = "\ue40a";
+ public const string contact_card_48_regular = "\ue40b";
+ public const string contact_card_group_16_regular = "\ue40c";
+ public const string contact_card_group_20_regular = "\ue40d";
+ public const string contact_card_group_24_regular = "\uf321";
+ public const string contact_card_group_28_regular = "\ue40e";
+ public const string contact_card_group_48_regular = "\ue40f";
+ public const string contact_card_link_16_regular = "\uf363";
+ public const string contact_card_link_20_regular = "\ue410";
+ public const string contact_card_ribbon_16_regular = "\ue411";
+ public const string contact_card_ribbon_20_regular = "\ue412";
+ public const string contact_card_ribbon_24_regular = "\ue413";
+ public const string contact_card_ribbon_28_regular = "\ue414";
+ public const string contact_card_ribbon_32_regular = "\ue415";
+ public const string contact_card_ribbon_48_regular = "\ue416";
+ public const string content_settings_16_regular = "\uf323";
+ public const string content_settings_20_regular = "\uf324";
+ public const string content_settings_24_regular = "\uf325";
+ public const string content_settings_32_regular = "\ue417";
+ public const string content_view_16_regular = "\U000f05c7";
+ public const string content_view_20_regular = "\ue418";
+ public const string content_view_24_regular = "\ueec4";
+ public const string content_view_28_regular = "\ueec5";
+ public const string content_view_32_regular = "\ue419";
+ public const string content_view_gallery_16_regular = "\U000f02fd";
+ public const string content_view_gallery_20_regular = "\ue41a";
+ public const string content_view_gallery_24_regular = "\ueea2";
+ public const string content_view_gallery_28_regular = "\ueea3";
+ public const string content_view_gallery_lightning_16_regular = "\U000f02fe";
+ public const string content_view_gallery_lightning_20_regular = "\U000f02ff";
+ public const string content_view_gallery_lightning_24_regular = "\U000f0300";
+ public const string content_view_gallery_lightning_28_regular = "\U000f0301";
+ public const string contract_down_left_16_regular = "\uf364";
+ public const string contract_down_left_20_regular = "\uf373";
+ public const string contract_down_left_24_regular = "\uf374";
+ public const string contract_down_left_28_regular = "\uf375";
+ public const string contract_down_left_32_regular = "\uf37b";
+ public const string contract_down_left_48_regular = "\uf397";
+ public const string contract_up_right_16_regular = "\U000f047b";
+ public const string contract_up_right_20_regular = "\U000f047c";
+ public const string contract_up_right_24_regular = "\U000f047d";
+ public const string contract_up_right_28_regular = "\U000f047e";
+ public const string contract_up_right_32_regular = "\U000f047f";
+ public const string contract_up_right_48_regular = "\U000f0480";
+ public const string control_button_20_regular = "\ue41b";
+ public const string control_button_24_regular = "\ue41c";
+ public const string convert_range_20_regular = "\ue41d";
+ public const string convert_range_24_regular = "\ue41e";
+ public const string cookies_16_regular = "\U000f04ed";
+ public const string cookies_20_regular = "\uf328";
+ public const string cookies_24_regular = "\uf329";
+ public const string cookies_28_regular = "\U000f04ee";
+ public const string cookies_32_regular = "\U000f04ef";
+ public const string cookies_48_regular = "\U000f04f0";
+ public const string copy_16_regular = "\uf32a";
+ public const string copy_20_regular = "\uf32b";
+ public const string copy_24_regular = "\uf32c";
+ public const string copy_32_regular = "\U000f0006";
+ public const string copy_add_20_regular = "\ue41f";
+ public const string copy_add_24_regular = "\ue420";
+ public const string copy_arrow_right_16_regular = "\ue421";
+ public const string copy_arrow_right_20_regular = "\ue422";
+ public const string copy_arrow_right_24_regular = "\ue423";
+ public const string copy_select_20_regular = "\ue424";
+ public const string copy_select_24_regular = "\U000f0007";
+ public const string couch_12_regular = "\ue425";
+ public const string couch_20_regular = "\ue426";
+ public const string couch_24_regular = "\ue427";
+ public const string couch_32_regular = "\uefe0";
+ public const string couch_48_regular = "\uefe1";
+ public const string credit_card_clock_20_regular = "\ueec6";
+ public const string credit_card_clock_24_regular = "\ueec7";
+ public const string credit_card_clock_28_regular = "\ueec8";
+ public const string credit_card_clock_32_regular = "\ueec9";
+ public const string credit_card_person_20_regular = "\ue428";
+ public const string credit_card_person_24_regular = "\ue429";
+ public const string credit_card_toolbox_20_regular = "\uf398";
+ public const string credit_card_toolbox_24_regular = "\ue42a";
+ public const string crop_16_regular = "\uf02c";
+ public const string crop_20_regular = "\ue42b";
+ public const string crop_24_regular = "\uf331";
+ public const string crop_28_regular = "\uf02d";
+ public const string crop_32_regular = "\uf02e";
+ public const string crop_48_regular = "\uf02f";
+ public const string crop_arrow_rotate_16_regular = "\U000f05e8";
+ public const string crop_arrow_rotate_20_regular = "\U000f05e9";
+ public const string crop_arrow_rotate_24_regular = "\U000f05ea";
+ public const string crop_interim_20_regular = "\ue42c";
+ public const string crop_interim_24_regular = "\uf332";
+ public const string crop_interim_off_20_regular = "\ue42d";
+ public const string crop_interim_off_24_regular = "\uf333";
+ public const string crop_sparkle_24_regular = "\U000f0170";
+ public const string crown_16_regular = "\uf06e";
+ public const string crown_20_regular = "\uf06f";
+ public const string crown_24_regular = "\U000f020f";
+ public const string crown_subtract_24_regular = "\U000f0210";
+ public const string cube_12_regular = "\ue42e";
+ public const string cube_16_regular = "\uf334";
+ public const string cube_20_regular = "\uf335";
+ public const string cube_24_regular = "\uf336";
+ public const string cube_32_regular = "\ueeca";
+ public const string cube_48_regular = "\U000f0268";
+ public const string cube_add_20_regular = "\ue42f";
+ public const string cube_arrow_curve_down_20_regular = "\ue430";
+ public const string cube_link_20_regular = "\ue431";
+ public const string cube_multiple_20_regular = "\ue432";
+ public const string cube_multiple_24_regular = "\ue433";
+ public const string cube_quick_16_regular = "\ue434";
+ public const string cube_quick_20_regular = "\ue435";
+ public const string cube_quick_24_regular = "\ue436";
+ public const string cube_quick_28_regular = "\ue437";
+ public const string cube_rotate_20_regular = "\ue438";
+ public const string cube_sync_20_regular = "\ue439";
+ public const string cube_sync_24_regular = "\ue43a";
+ public const string cube_tree_20_regular = "\ue43b";
+ public const string cube_tree_24_regular = "\ue43c";
+ public const string currency_dollar_euro_16_regular = "\ue43d";
+ public const string currency_dollar_euro_20_regular = "\ue43e";
+ public const string currency_dollar_euro_24_regular = "\ue43f";
+ public const string currency_dollar_rupee_16_regular = "\ue440";
+ public const string currency_dollar_rupee_20_regular = "\ue441";
+ public const string currency_dollar_rupee_24_regular = "\ue442";
+ public const string cursor_16_regular = "\U000f0171";
+ public const string cursor_20_regular = "\ue443";
+ public const string cursor_24_regular = "\ue444";
+ public const string cursor_28_regular = "\U000f05fc";
+ public const string cursor_32_regular = "\U000f05fd";
+ public const string cursor_click_20_regular = "\ue445";
+ public const string cursor_click_24_regular = "\ue446";
+ public const string cursor_hover_16_regular = "\ue447";
+ public const string cursor_hover_20_regular = "\ue448";
+ public const string cursor_hover_24_regular = "\ue449";
+ public const string cursor_hover_28_regular = "\ue44a";
+ public const string cursor_hover_32_regular = "\ue44b";
+ public const string cursor_hover_48_regular = "\ue44c";
+ public const string cursor_hover_off_16_regular = "\ue44d";
+ public const string cursor_hover_off_20_regular = "\ue44e";
+ public const string cursor_hover_off_24_regular = "\ue44f";
+ public const string cursor_hover_off_28_regular = "\ue450";
+ public const string cursor_hover_off_48_regular = "\ue451";
+ public const string cursor_prohibited_16_regular = "\U000f0172";
+ public const string cursor_prohibited_20_regular = "\U000f0173";
+ public const string cut_16_regular = "\U000f038c";
+ public const string cut_20_regular = "\uf33a";
+ public const string cut_24_regular = "\uf33b";
+ public const string dark_theme_20_regular = "\ue452";
+ public const string dark_theme_24_regular = "\uf33c";
+ public const string data_area_20_regular = "\ue453";
+ public const string data_area_24_regular = "\uf33d";
+ public const string data_bar_horizontal_20_regular = "\uf39b";
+ public const string data_bar_horizontal_24_regular = "\uf33e";
+ public const string data_bar_horizontal_descending_16_regular = "\uf0d5";
+ public const string data_bar_vertical_16_regular = "\ueea4";
+ public const string data_bar_vertical_20_regular = "\uf33f";
+ public const string data_bar_vertical_24_regular = "\uf340";
+ public const string data_bar_vertical_32_regular = "\ueecb";
+ public const string data_bar_vertical_add_20_regular = "\ue454";
+ public const string data_bar_vertical_add_24_regular = "\ue455";
+ public const string data_bar_vertical_arrow_down_16_regular = "\U000f05a2";
+ public const string data_bar_vertical_arrow_down_20_regular = "\U000f05a3";
+ public const string data_bar_vertical_arrow_down_24_regular = "\U000f05a4";
+ public const string data_bar_vertical_ascending_16_regular = "\uf0d6";
+ public const string data_bar_vertical_ascending_20_regular = "\U000f042f";
+ public const string data_bar_vertical_ascending_24_regular = "\U000f0430";
+ public const string data_bar_vertical_star_16_regular = "\uefc0";
+ public const string data_bar_vertical_star_20_regular = "\uefc1";
+ public const string data_bar_vertical_star_24_regular = "\uefc2";
+ public const string data_bar_vertical_star_32_regular = "\uefc3";
+ public const string data_funnel_20_regular = "\ue456";
+ public const string data_funnel_24_regular = "\uf341";
+ public const string data_histogram_16_regular = "\U000f0174";
+ public const string data_histogram_20_regular = "\ue457";
+ public const string data_histogram_24_regular = "\uf342";
+ public const string data_line_20_regular = "\ue458";
+ public const string data_line_24_regular = "\uf343";
+ public const string data_pie_16_regular = "\U000f05d6";
+ public const string data_pie_20_regular = "\uf344";
+ public const string data_pie_24_regular = "\uf345";
+ public const string data_scatter_20_regular = "\ue459";
+ public const string data_scatter_24_regular = "\uf346";
+ public const string data_sunburst_20_regular = "\ue45a";
+ public const string data_sunburst_24_regular = "\uf347";
+ public const string data_treemap_20_regular = "\ue45b";
+ public const string data_treemap_24_regular = "\uf348";
+ public const string data_trending_16_regular = "\ue45c";
+ public const string data_trending_20_regular = "\ue45d";
+ public const string data_trending_24_regular = "\ue45e";
+ public const string data_trending_28_regular = "\uf030";
+ public const string data_trending_32_regular = "\uf031";
+ public const string data_trending_48_regular = "\uf032";
+ public const string data_usage_16_regular = "\U000f0564";
+ public const string data_usage_20_regular = "\ue45f";
+ public const string data_usage_24_regular = "\uf349";
+ public const string data_usage_edit_20_regular = "\uf3b2";
+ public const string data_usage_edit_24_regular = "\ue460";
+ public const string data_usage_settings_16_regular = "\U000f0565";
+ public const string data_usage_settings_20_regular = "\ue461";
+ public const string data_usage_settings_24_regular = "\U000f0566";
+ public const string data_usage_toolbox_20_regular = "\ue462";
+ public const string data_usage_toolbox_24_regular = "\ue463";
+ public const string data_waterfall_20_regular = "\ue464";
+ public const string data_waterfall_24_regular = "\uf34a";
+ public const string data_whisker_20_regular = "\ue465";
+ public const string data_whisker_24_regular = "\uf34b";
+ public const string database_16_regular = "\uf0d7";
+ public const string database_20_regular = "\ue466";
+ public const string database_24_regular = "\ue467";
+ public const string database_32_regular = "\ueecc";
+ public const string database_48_regular = "\U000f0008";
+ public const string database_arrow_down_20_regular = "\ue468";
+ public const string database_arrow_right_20_regular = "\ue469";
+ public const string database_arrow_right_24_regular = "\uefe2";
+ public const string database_arrow_right_32_regular = "\uefc4";
+ public const string database_arrow_up_20_regular = "\ue46a";
+ public const string database_lightning_20_regular = "\ue46b";
+ public const string database_link_20_regular = "\ue46c";
+ public const string database_link_24_regular = "\ue46d";
+ public const string database_multiple_20_regular = "\ue46e";
+ public const string database_multiple_32_regular = "\U000f0009";
+ public const string database_person_20_regular = "\ue46f";
+ public const string database_person_24_regular = "\ue470";
+ public const string database_plug_connected_20_regular = "\ue471";
+ public const string database_search_20_regular = "\ue472";
+ public const string database_search_24_regular = "\ue473";
+ public const string database_stack_16_regular = "\uf0d8";
+ public const string database_switch_20_regular = "\ue474";
+ public const string database_warning_20_regular = "\ue475";
+ public const string database_window_20_regular = "\ue476";
+ public const string decimal_arrow_left_20_regular = "\ue477";
+ public const string decimal_arrow_left_24_regular = "\ue478";
+ public const string decimal_arrow_right_20_regular = "\ue479";
+ public const string decimal_arrow_right_24_regular = "\ue47a";
+ public const string delete_12_regular = "\ueea5";
+ public const string delete_16_regular = "\ue47b";
+ public const string delete_20_regular = "\uf34c";
+ public const string delete_24_regular = "\uf34d";
+ public const string delete_28_regular = "\uf34e";
+ public const string delete_32_regular = "\ueea6";
+ public const string delete_48_regular = "\uf34f";
+ public const string delete_arrow_back_16_regular = "\ue47c";
+ public const string delete_arrow_back_20_regular = "\ue47d";
+ public const string delete_dismiss_20_regular = "\ue47e";
+ public const string delete_dismiss_24_regular = "\ue47f";
+ public const string delete_dismiss_28_regular = "\ue480";
+ public const string delete_lines_20_regular = "\ue481";
+ public const string delete_off_20_regular = "\uf352";
+ public const string delete_off_24_regular = "\uf353";
+ public const string dentist_12_regular = "\ue482";
+ public const string dentist_16_regular = "\ue483";
+ public const string dentist_20_regular = "\ue484";
+ public const string dentist_24_regular = "\uf354";
+ public const string dentist_28_regular = "\ue485";
+ public const string dentist_48_regular = "\ue486";
+ public const string design_ideas_16_regular = "\uf355";
+ public const string design_ideas_20_regular = "\uf356";
+ public const string design_ideas_24_regular = "\uf357";
+ public const string desk_16_regular = "\U000f0269";
+ public const string desk_20_regular = "\U000f01cb";
+ public const string desk_24_regular = "\U000f01cc";
+ public const string desk_28_regular = "\U000f026a";
+ public const string desk_32_regular = "\U000f026b";
+ public const string desk_48_regular = "\U000f026c";
+ public const string desktop_16_regular = "\uf358";
+ public const string desktop_20_regular = "\uf359";
+ public const string desktop_24_regular = "\uf35a";
+ public const string desktop_28_regular = "\uf35b";
+ public const string desktop_32_regular = "\ue487";
+ public const string desktop_arrow_down_16_regular = "\U000f0117";
+ public const string desktop_arrow_down_20_regular = "\U000f0118";
+ public const string desktop_arrow_down_24_regular = "\U000f0119";
+ public const string desktop_arrow_down_32_regular = "\U000f062b";
+ public const string desktop_arrow_right_16_regular = "\ue488";
+ public const string desktop_arrow_right_20_regular = "\ue489";
+ public const string desktop_arrow_right_24_regular = "\ue48a";
+ public const string desktop_checkmark_16_regular = "\uef65";
+ public const string desktop_checkmark_20_regular = "\uef66";
+ public const string desktop_checkmark_24_regular = "\uef67";
+ public const string desktop_cursor_16_regular = "\ue48b";
+ public const string desktop_cursor_20_regular = "\ue48c";
+ public const string desktop_cursor_24_regular = "\ue48d";
+ public const string desktop_cursor_28_regular = "\ue48e";
+ public const string desktop_edit_16_regular = "\ue48f";
+ public const string desktop_edit_20_regular = "\ue490";
+ public const string desktop_edit_24_regular = "\ue491";
+ public const string desktop_flow_20_regular = "\ue492";
+ public const string desktop_flow_24_regular = "\ue493";
+ public const string desktop_keyboard_16_regular = "\ue494";
+ public const string desktop_keyboard_20_regular = "\ue495";
+ public const string desktop_keyboard_24_regular = "\ue496";
+ public const string desktop_keyboard_28_regular = "\ue497";
+ public const string desktop_mac_16_regular = "\ue498";
+ public const string desktop_mac_20_regular = "\ue499";
+ public const string desktop_mac_24_regular = "\ue49a";
+ public const string desktop_mac_32_regular = "\ue49b";
+ public const string desktop_off_20_regular = "\U000f05eb";
+ public const string desktop_off_24_regular = "\U000f05ec";
+ public const string desktop_pulse_16_regular = "\ue49c";
+ public const string desktop_pulse_20_regular = "\ue49d";
+ public const string desktop_pulse_24_regular = "\ue49e";
+ public const string desktop_pulse_28_regular = "\ue49f";
+ public const string desktop_pulse_32_regular = "\ue4a0";
+ public const string desktop_pulse_48_regular = "\ue4a1";
+ public const string desktop_signal_20_regular = "\ue4a2";
+ public const string desktop_signal_24_regular = "\ue4a3";
+ public const string desktop_speaker_20_regular = "\ue4a4";
+ public const string desktop_speaker_24_regular = "\ue4a5";
+ public const string desktop_speaker_off_20_regular = "\ue4a6";
+ public const string desktop_speaker_off_24_regular = "\ue4a7";
+ public const string desktop_sync_16_regular = "\uf3b3";
+ public const string desktop_sync_20_regular = "\ue4a8";
+ public const string desktop_sync_24_regular = "\ue4a9";
+ public const string desktop_toolbox_20_regular = "\ue4aa";
+ public const string desktop_toolbox_24_regular = "\ue4ab";
+ public const string desktop_tower_20_regular = "\U000f011a";
+ public const string desktop_tower_24_regular = "\U000f011b";
+ public const string developer_board_16_regular = "\uf0d9";
+ public const string developer_board_20_regular = "\ue4ac";
+ public const string developer_board_24_regular = "\uf35c";
+ public const string developer_board_lightning_20_regular = "\ue4ad";
+ public const string developer_board_lightning_toolbox_20_regular = "\ue4ae";
+ public const string developer_board_search_20_regular = "\ue4af";
+ public const string developer_board_search_24_regular = "\ue4b0";
+ public const string device_eq_16_regular = "\U000f000a";
+ public const string device_eq_20_regular = "\ue4b1";
+ public const string device_eq_24_regular = "\uf35d";
+ public const string device_meeting_room_16_regular = "\uf3b4";
+ public const string device_meeting_room_20_regular = "\ue4b2";
+ public const string device_meeting_room_24_regular = "\uf3b5";
+ public const string device_meeting_room_28_regular = "\uf3b6";
+ public const string device_meeting_room_32_regular = "\uf3b7";
+ public const string device_meeting_room_48_regular = "\uf3bc";
+ public const string device_meeting_room_remote_16_regular = "\uf3bd";
+ public const string device_meeting_room_remote_20_regular = "\ue4b3";
+ public const string device_meeting_room_remote_24_regular = "\uf3c2";
+ public const string device_meeting_room_remote_28_regular = "\uf3cd";
+ public const string device_meeting_room_remote_32_regular = "\uf3ed";
+ public const string device_meeting_room_remote_48_regular = "\uf3ee";
+ public const string diagram_20_regular = "\ue4b4";
+ public const string diagram_24_regular = "\ue4b5";
+ public const string dialpad_20_regular = "\uf35e";
+ public const string dialpad_24_regular = "\uf35f";
+ public const string dialpad_28_regular = "\ue4b6";
+ public const string dialpad_32_regular = "\ue4b7";
+ public const string dialpad_48_regular = "\ue4b8";
+ public const string dialpad_off_20_regular = "\ue4b9";
+ public const string dialpad_off_24_regular = "\uf360";
+ public const string dialpad_question_mark_20_regular = "\U000f03f4";
+ public const string dialpad_question_mark_24_regular = "\U000f03f5";
+ public const string diamond_16_regular = "\ue4ba";
+ public const string diamond_20_regular = "\ue4bb";
+ public const string diamond_24_regular = "\ue4bc";
+ public const string diamond_28_regular = "\ue4bd";
+ public const string diamond_32_regular = "\ue4be";
+ public const string diamond_48_regular = "\ue4bf";
+ public const string directions_16_regular = "\ue4c0";
+ public const string directions_20_regular = "\uf365";
+ public const string directions_24_regular = "\uf366";
+ public const string dishwasher_20_regular = "\uefe3";
+ public const string dishwasher_24_regular = "\uefe4";
+ public const string dishwasher_32_regular = "\uefe5";
+ public const string dishwasher_48_regular = "\uefe6";
+ public const string dismiss_12_regular = "\uf367";
+ public const string dismiss_16_regular = "\uf368";
+ public const string dismiss_20_regular = "\uf369";
+ public const string dismiss_24_regular = "\uf36a";
+ public const string dismiss_28_regular = "\uf36b";
+ public const string dismiss_32_regular = "\uf3f3";
+ public const string dismiss_48_regular = "\uf400";
+ public const string dismiss_circle_12_regular = "\ue4c1";
+ public const string dismiss_circle_16_regular = "\uf36c";
+ public const string dismiss_circle_20_regular = "\uf36d";
+ public const string dismiss_circle_24_regular = "\uf36e";
+ public const string dismiss_circle_28_regular = "\ue4c2";
+ public const string dismiss_circle_32_regular = "\ue4c3";
+ public const string dismiss_circle_48_regular = "\uf36f";
+ public const string dismiss_square_20_regular = "\ue4c4";
+ public const string dismiss_square_24_regular = "\ue4c5";
+ public const string dismiss_square_multiple_16_regular = "\ue4c6";
+ public const string dismiss_square_multiple_20_regular = "\ue4c7";
+ public const string diversity_16_regular = "\U000f0431";
+ public const string diversity_20_regular = "\ue4c8";
+ public const string diversity_24_regular = "\ue4c9";
+ public const string diversity_28_regular = "\ue4ca";
+ public const string diversity_48_regular = "\ue4cb";
+ public const string divider_short_16_regular = "\ue4cc";
+ public const string divider_short_20_regular = "\ue4cd";
+ public const string divider_short_24_regular = "\uf370";
+ public const string divider_tall_16_regular = "\ue4ce";
+ public const string divider_tall_20_regular = "\ue4cf";
+ public const string divider_tall_24_regular = "\uf371";
+ public const string dock_20_regular = "\ue4d0";
+ public const string dock_24_regular = "\uf372";
+ public const string dock_row_20_regular = "\ue4d1";
+ public const string dock_row_24_regular = "\uf376";
+ public const string doctor_12_regular = "\ue4d2";
+ public const string doctor_16_regular = "\ue4d3";
+ public const string doctor_20_regular = "\ue4d4";
+ public const string doctor_24_regular = "\uf377";
+ public const string doctor_28_regular = "\ue4d5";
+ public const string doctor_48_regular = "\ue4d6";
+ public const string document_100_16_regular = "\U000f000b";
+ public const string document_100_20_regular = "\U000f000c";
+ public const string document_100_24_regular = "\U000f000d";
+ public const string document_16_regular = "\ue4d7";
+ public const string document_20_regular = "\uf378";
+ public const string document_24_regular = "\uf379";
+ public const string document_28_regular = "\uf37a";
+ public const string document_32_regular = "\ue4d8";
+ public const string document_48_regular = "\ue4d9";
+ public const string document_add_16_regular = "\ue4da";
+ public const string document_add_20_regular = "\ue4db";
+ public const string document_add_24_regular = "\ue4dc";
+ public const string document_add_28_regular = "\ue4dd";
+ public const string document_add_48_regular = "\ue4de";
+ public const string document_arrow_down_16_regular = "\ue4df";
+ public const string document_arrow_down_20_regular = "\ue4e0";
+ public const string document_arrow_down_24_regular = "\U000f0527";
+ public const string document_arrow_left_16_regular = "\ue4e1";
+ public const string document_arrow_left_20_regular = "\ue4e2";
+ public const string document_arrow_left_24_regular = "\ue4e3";
+ public const string document_arrow_left_28_regular = "\ue4e4";
+ public const string document_arrow_left_48_regular = "\ue4e5";
+ public const string document_arrow_right_20_regular = "\ue4e6";
+ public const string document_arrow_right_24_regular = "\ue4e7";
+ public const string document_arrow_up_16_regular = "\uf401";
+ public const string document_arrow_up_20_regular = "\ue4e8";
+ public const string document_border_20_regular = "\U000f000e";
+ public const string document_border_24_regular = "\U000f000f";
+ public const string document_border_32_regular = "\U000f0010";
+ public const string document_border_print_20_regular = "\U000f0011";
+ public const string document_border_print_24_regular = "\U000f0012";
+ public const string document_border_print_32_regular = "\U000f0013";
+ public const string document_briefcase_16_regular = "\U000f03f6";
+ public const string document_briefcase_20_regular = "\uf37c";
+ public const string document_briefcase_24_regular = "\uf37d";
+ public const string document_briefcase_32_regular = "\U000f03f7";
+ public const string document_bullet_list_16_regular = "\U000f0014";
+ public const string document_bullet_list_20_regular = "\uf402";
+ public const string document_bullet_list_24_regular = "\uf403";
+ public const string document_bullet_list_arrow_left_16_regular = "\U000f0015";
+ public const string document_bullet_list_arrow_left_20_regular = "\U000f0016";
+ public const string document_bullet_list_arrow_left_24_regular = "\U000f0017";
+ public const string document_bullet_list_clock_20_regular = "\ue4e9";
+ public const string document_bullet_list_clock_24_regular = "\ue4ea";
+ public const string document_bullet_list_cube_16_regular = "\U000f0018";
+ public const string document_bullet_list_cube_20_regular = "\U000f0019";
+ public const string document_bullet_list_cube_24_regular = "\U000f001a";
+ public const string document_bullet_list_multiple_20_regular = "\ue4eb";
+ public const string document_bullet_list_multiple_24_regular = "\ue4ec";
+ public const string document_bullet_list_off_20_regular = "\ue4ed";
+ public const string document_bullet_list_off_24_regular = "\ue4ee";
+ public const string document_catch_up_16_regular = "\ue4ef";
+ public const string document_catch_up_20_regular = "\ue4f0";
+ public const string document_catch_up_24_regular = "\uf37e";
+ public const string document_checkmark_16_regular = "\U000f011c";
+ public const string document_checkmark_20_regular = "\ue4f1";
+ public const string document_checkmark_24_regular = "\ue4f2";
+ public const string document_chevron_double_20_regular = "\ue4f3";
+ public const string document_chevron_double_24_regular = "\ue4f4";
+ public const string document_contract_16_regular = "\uf0da";
+ public const string document_copy_16_regular = "\uf37f";
+ public const string document_copy_20_regular = "\uf380";
+ public const string document_copy_24_regular = "\uf381";
+ public const string document_copy_48_regular = "\uf382";
+ public const string document_cs_16_regular = "\uf0db";
+ public const string document_css_16_regular = "\uf0dc";
+ public const string document_css_20_regular = "\ue4f5";
+ public const string document_css_24_regular = "\ue4f6";
+ public const string document_cube_20_regular = "\U000f033c";
+ public const string document_cube_24_regular = "\U000f033d";
+ public const string document_data_16_regular = "\uf0dd";
+ public const string document_data_20_regular = "\ue4f7";
+ public const string document_data_24_regular = "\ue4f8";
+ public const string document_data_32_regular = "\ueecd";
+ public const string document_data_link_16_regular = "\U000f001b";
+ public const string document_data_link_20_regular = "\U000f001c";
+ public const string document_data_link_24_regular = "\U000f001d";
+ public const string document_data_link_32_regular = "\U000f001e";
+ public const string document_data_lock_16_regular = "\U000f0481";
+ public const string document_data_lock_20_regular = "\U000f0482";
+ public const string document_data_lock_24_regular = "\U000f0483";
+ public const string document_data_lock_32_regular = "\U000f0484";
+ public const string document_database_20_regular = "\uf033";
+ public const string document_database_24_regular = "\uf034";
+ public const string document_dismiss_16_regular = "\ue4f9";
+ public const string document_dismiss_20_regular = "\uf383";
+ public const string document_dismiss_24_regular = "\uf384";
+ public const string document_edit_16_regular = "\uf385";
+ public const string document_edit_20_regular = "\uf386";
+ public const string document_edit_24_regular = "\uf387";
+ public const string document_endnote_20_regular = "\uf388";
+ public const string document_endnote_24_regular = "\uf389";
+ public const string document_error_16_regular = "\uf38a";
+ public const string document_error_20_regular = "\uf38b";
+ public const string document_error_24_regular = "\uf38c";
+ public const string document_fit_16_regular = "\U000f001f";
+ public const string document_fit_20_regular = "\U000f0020";
+ public const string document_fit_24_regular = "\U000f0021";
+ public const string document_flowchart_20_regular = "\ue4fa";
+ public const string document_flowchart_24_regular = "\ue4fb";
+ public const string document_folder_16_regular = "\U000f0022";
+ public const string document_folder_20_regular = "\U000f0023";
+ public const string document_folder_24_regular = "\U000f0024";
+ public const string document_footer_16_regular = "\ue4fc";
+ public const string document_footer_20_regular = "\ue4fd";
+ public const string document_footer_24_regular = "\uf38d";
+ public const string document_footer_dismiss_20_regular = "\ue4fe";
+ public const string document_footer_dismiss_24_regular = "\ue4ff";
+ public const string document_fs_16_regular = "\uf0de";
+ public const string document_header_16_regular = "\ue500";
+ public const string document_header_20_regular = "\ue501";
+ public const string document_header_24_regular = "\uf38f";
+ public const string document_header_arrow_down_16_regular = "\ue502";
+ public const string document_header_arrow_down_20_regular = "\ue503";
+ public const string document_header_arrow_down_24_regular = "\ue504";
+ public const string document_header_dismiss_20_regular = "\ue505";
+ public const string document_header_dismiss_24_regular = "\ue506";
+ public const string document_header_footer_16_regular = "\ue507";
+ public const string document_header_footer_20_regular = "\uf390";
+ public const string document_header_footer_24_regular = "\uf391";
+ public const string document_heart_20_regular = "\ue508";
+ public const string document_heart_24_regular = "\ue509";
+ public const string document_heart_pulse_20_regular = "\ue50a";
+ public const string document_heart_pulse_24_regular = "\ue50b";
+ public const string document_image_16_regular = "\U000f0175";
+ public const string document_image_20_regular = "\U000f0176";
+ public const string document_java_16_regular = "\U000f0177";
+ public const string document_java_20_regular = "\U000f0178";
+ public const string document_javascript_20_regular = "\ue50c";
+ public const string document_javascript_24_regular = "\ue50d";
+ public const string document_js_16_regular = "\uf0df";
+ public const string document_key_20_regular = "\U000f011d";
+ public const string document_landscape_20_regular = "\uf393";
+ public const string document_landscape_24_regular = "\uf394";
+ public const string document_landscape_data_20_regular = "\ue50e";
+ public const string document_landscape_data_24_regular = "\ue50f";
+ public const string document_landscape_split_20_regular = "\ue510";
+ public const string document_landscape_split_24_regular = "\ue511";
+ public const string document_landscape_split_hint_20_regular = "\ue512";
+ public const string document_landscape_split_hint_24_regular = "\uecdd";
+ public const string document_lightning_16_regular = "\U000f0324";
+ public const string document_lightning_20_regular = "\U000f0325";
+ public const string document_lightning_24_regular = "\U000f0326";
+ public const string document_lightning_28_regular = "\U000f0327";
+ public const string document_lightning_32_regular = "\U000f0328";
+ public const string document_lightning_48_regular = "\U000f0329";
+ public const string document_link_16_regular = "\ue513";
+ public const string document_link_20_regular = "\uf404";
+ public const string document_link_24_regular = "\uf405";
+ public const string document_lock_16_regular = "\ue514";
+ public const string document_lock_20_regular = "\ue515";
+ public const string document_lock_24_regular = "\ue516";
+ public const string document_lock_28_regular = "\ue517";
+ public const string document_lock_32_regular = "\ue518";
+ public const string document_lock_48_regular = "\ue519";
+ public const string document_margins_20_regular = "\uf395";
+ public const string document_margins_24_regular = "\uf396";
+ public const string document_mention_16_regular = "\ue51a";
+ public const string document_mention_20_regular = "\ue51b";
+ public const string document_mention_24_regular = "\ue51c";
+ public const string document_mention_28_regular = "\ue51d";
+ public const string document_mention_48_regular = "\ue51e";
+ public const string document_multiple_16_regular = "\ue51f";
+ public const string document_multiple_20_regular = "\ue520";
+ public const string document_multiple_24_regular = "\ue521";
+ public const string document_multiple_percent_20_regular = "\ue522";
+ public const string document_multiple_percent_24_regular = "\ue523";
+ public const string document_multiple_prohibited_20_regular = "\ue524";
+ public const string document_multiple_prohibited_24_regular = "\ue525";
+ public const string document_multiple_sync_20_regular = "\ue526";
+ public const string document_number_1_16_regular = "\uf0e0";
+ public const string document_one_page_16_regular = "\U000f0025";
+ public const string document_one_page_20_regular = "\uf399";
+ public const string document_one_page_24_regular = "\uf39a";
+ public const string document_one_page_add_16_regular = "\U000f0026";
+ public const string document_one_page_add_20_regular = "\U000f0027";
+ public const string document_one_page_add_24_regular = "\U000f0028";
+ public const string document_one_page_beaker_16_regular = "\U000f0179";
+ public const string document_one_page_columns_20_regular = "\U000f0029";
+ public const string document_one_page_columns_24_regular = "\U000f002a";
+ public const string document_one_page_link_16_regular = "\U000f002b";
+ public const string document_one_page_link_20_regular = "\U000f002c";
+ public const string document_one_page_link_24_regular = "\U000f002d";
+ public const string document_one_page_multiple_16_regular = "\U000f017a";
+ public const string document_one_page_multiple_20_regular = "\U000f017b";
+ public const string document_one_page_multiple_24_regular = "\U000f017c";
+ public const string document_one_page_sparkle_16_regular = "\U000f00d7";
+ public const string document_one_page_sparkle_20_regular = "\U000f00d8";
+ public const string document_one_page_sparkle_24_regular = "\U000f00d9";
+ public const string document_page_bottom_center_20_regular = "\uf39c";
+ public const string document_page_bottom_center_24_regular = "\uf39d";
+ public const string document_page_bottom_left_20_regular = "\uf39e";
+ public const string document_page_bottom_left_24_regular = "\uf39f";
+ public const string document_page_bottom_right_20_regular = "\uf3a0";
+ public const string document_page_bottom_right_24_regular = "\uf3a1";
+ public const string document_page_break_20_regular = "\ue527";
+ public const string document_page_break_24_regular = "\uf3a2";
+ public const string document_page_number_20_regular = "\uf3a3";
+ public const string document_page_number_24_regular = "\uf3a4";
+ public const string document_page_top_center_20_regular = "\uf3a5";
+ public const string document_page_top_center_24_regular = "\uf3a6";
+ public const string document_page_top_left_20_regular = "\uf3a7";
+ public const string document_page_top_left_24_regular = "\uf3a8";
+ public const string document_page_top_right_20_regular = "\uf3a9";
+ public const string document_page_top_right_24_regular = "\uf3aa";
+ public const string document_pdf_16_regular = "\uf3ab";
+ public const string document_pdf_20_regular = "\uf3ac";
+ public const string document_pdf_24_regular = "\uf3ad";
+ public const string document_pdf_32_regular = "\ue528";
+ public const string document_percent_20_regular = "\ue529";
+ public const string document_percent_24_regular = "\ue52a";
+ public const string document_person_16_regular = "\uf421";
+ public const string document_person_20_regular = "\ue52b";
+ public const string document_pill_20_regular = "\ue52c";
+ public const string document_pill_24_regular = "\ue52d";
+ public const string document_print_20_regular = "\U000f002e";
+ public const string document_print_24_regular = "\U000f002f";
+ public const string document_print_28_regular = "\U000f0030";
+ public const string document_print_32_regular = "\U000f0031";
+ public const string document_print_48_regular = "\U000f0032";
+ public const string document_prohibited_20_regular = "\ue52e";
+ public const string document_prohibited_24_regular = "\ue52f";
+ public const string document_py_16_regular = "\uf0e1";
+ public const string document_question_mark_16_regular = "\ue530";
+ public const string document_question_mark_20_regular = "\ue531";
+ public const string document_question_mark_24_regular = "\ue532";
+ public const string document_queue_20_regular = "\ue533";
+ public const string document_queue_24_regular = "\ue534";
+ public const string document_queue_add_20_regular = "\ue535";
+ public const string document_queue_add_24_regular = "\ue536";
+ public const string document_queue_multiple_20_regular = "\ue537";
+ public const string document_queue_multiple_24_regular = "\ue538";
+ public const string document_rb_16_regular = "\uf0e2";
+ public const string document_ribbon_16_regular = "\ue539";
+ public const string document_ribbon_20_regular = "\ue53a";
+ public const string document_ribbon_24_regular = "\ue53b";
+ public const string document_ribbon_28_regular = "\ue53c";
+ public const string document_ribbon_32_regular = "\ue53d";
+ public const string document_ribbon_48_regular = "\ue53e";
+ public const string document_sass_16_regular = "\U000f017d";
+ public const string document_sass_20_regular = "\U000f017e";
+ public const string document_save_20_regular = "\ue53f";
+ public const string document_save_24_regular = "\ue540";
+ public const string document_search_16_regular = "\ue541";
+ public const string document_search_20_regular = "\uf3ae";
+ public const string document_search_24_regular = "\uf3af";
+ public const string document_search_32_regular = "\U000f03f8";
+ public const string document_settings_16_regular = "\uf422";
+ public const string document_settings_20_regular = "\ue542";
+ public const string document_signature_16_regular = "\U000f0528";
+ public const string document_signature_20_regular = "\U000f0529";
+ public const string document_signature_24_regular = "\U000f052a";
+ public const string document_signature_28_regular = "\U000f052b";
+ public const string document_signature_32_regular = "\U000f052c";
+ public const string document_signature_48_regular = "\U000f052d";
+ public const string document_split_hint_16_regular = "\ue543";
+ public const string document_split_hint_20_regular = "\ue544";
+ public const string document_split_hint_24_regular = "\uf423";
+ public const string document_split_hint_off_16_regular = "\ue545";
+ public const string document_split_hint_off_20_regular = "\ue546";
+ public const string document_split_hint_off_24_regular = "\uf424";
+ public const string document_sync_16_regular = "\ue547";
+ public const string document_sync_20_regular = "\ue548";
+ public const string document_sync_24_regular = "\ue549";
+ public const string document_sync_32_regular = "\uefc5";
+ public const string document_table_16_regular = "\ue54a";
+ public const string document_table_20_regular = "\ue54b";
+ public const string document_table_24_regular = "\ue54c";
+ public const string document_table_arrow_right_20_regular = "\ue54d";
+ public const string document_table_arrow_right_24_regular = "\ue54e";
+ public const string document_table_checkmark_20_regular = "\ue54f";
+ public const string document_table_checkmark_24_regular = "\ue550";
+ public const string document_table_cube_20_regular = "\ue551";
+ public const string document_table_cube_24_regular = "\ue552";
+ public const string document_table_search_20_regular = "\ue553";
+ public const string document_table_search_24_regular = "\ue554";
+ public const string document_table_truck_20_regular = "\ue555";
+ public const string document_table_truck_24_regular = "\ue556";
+ public const string document_target_16_regular = "\uf0e3";
+ public const string document_target_20_regular = "\U000f0581";
+ public const string document_target_24_regular = "\U000f0582";
+ public const string document_target_32_regular = "\U000f0583";
+ public const string document_text_16_regular = "\ueeed";
+ public const string document_text_20_regular = "\ue557";
+ public const string document_text_24_regular = "\ue558";
+ public const string document_text_clock_20_regular = "\ue559";
+ public const string document_text_clock_24_regular = "\ue55a";
+ public const string document_text_extract_20_regular = "\ue55b";
+ public const string document_text_extract_24_regular = "\ue55c";
+ public const string document_text_link_20_regular = "\ue55d";
+ public const string document_text_link_24_regular = "\ue55e";
+ public const string document_text_toolbox_20_regular = "\ue55f";
+ public const string document_text_toolbox_24_regular = "\ue560";
+ public const string document_toolbox_20_regular = "\uf3b0";
+ public const string document_toolbox_24_regular = "\uf3b1";
+ public const string document_ts_16_regular = "\uf0e4";
+ public const string document_vb_16_regular = "\uf0e5";
+ public const string document_width_20_regular = "\uf3b8";
+ public const string document_width_24_regular = "\uf3b9";
+ public const string document_yml_16_regular = "\U000f017f";
+ public const string document_yml_20_regular = "\U000f0180";
+ public const string door_16_regular = "\ue561";
+ public const string door_20_regular = "\ue562";
+ public const string door_28_regular = "\ue563";
+ public const string door_arrow_left_16_regular = "\ue564";
+ public const string door_arrow_left_20_regular = "\ue565";
+ public const string door_arrow_left_24_regular = "\ue566";
+ public const string door_arrow_right_16_regular = "\ue567";
+ public const string door_arrow_right_20_regular = "\ue568";
+ public const string door_arrow_right_28_regular = "\ue569";
+ public const string door_tag_20_regular = "\ue56a";
+ public const string door_tag_24_regular = "\ue56b";
+ public const string double_swipe_down_20_regular = "\ue56c";
+ public const string double_swipe_down_24_regular = "\uf3ba";
+ public const string double_swipe_up_20_regular = "\ue56d";
+ public const string double_swipe_up_24_regular = "\uf3bb";
+ public const string double_tap_swipe_down_16_regular = "\U000f05c8";
+ public const string double_tap_swipe_down_20_regular = "\ue56e";
+ public const string double_tap_swipe_down_24_regular = "\ue56f";
+ public const string double_tap_swipe_up_16_regular = "\U000f05c9";
+ public const string double_tap_swipe_up_20_regular = "\ue570";
+ public const string double_tap_swipe_up_24_regular = "\ue571";
+ public const string drafts_16_regular = "\uf3be";
+ public const string drafts_20_regular = "\uf3bf";
+ public const string drafts_24_regular = "\uf3c0";
+ public const string drag_20_regular = "\ue572";
+ public const string drag_24_regular = "\uf3c1";
+ public const string draw_image_20_regular = "\ue573";
+ public const string draw_image_24_regular = "\ue574";
+ public const string draw_shape_20_regular = "\ue575";
+ public const string draw_shape_24_regular = "\ue576";
+ public const string draw_text_20_regular = "\ue577";
+ public const string draw_text_24_regular = "\ue578";
+ public const string drawer_20_regular = "\U000f033e";
+ public const string drawer_24_regular = "\U000f033f";
+ public const string drawer_add_20_regular = "\ue579";
+ public const string drawer_add_24_regular = "\ue57a";
+ public const string drawer_arrow_download_20_regular = "\ue57b";
+ public const string drawer_arrow_download_24_regular = "\ue57c";
+ public const string drawer_dismiss_20_regular = "\ue57d";
+ public const string drawer_dismiss_24_regular = "\ue57e";
+ public const string drawer_play_20_regular = "\ue57f";
+ public const string drawer_play_24_regular = "\ue580";
+ public const string drawer_subtract_20_regular = "\ue581";
+ public const string drawer_subtract_24_regular = "\ue582";
+ public const string drink_beer_16_regular = "\ue583";
+ public const string drink_beer_20_regular = "\ue584";
+ public const string drink_beer_24_regular = "\uf3c3";
+ public const string drink_bottle_20_regular = "\ueeee";
+ public const string drink_bottle_32_regular = "\ueeef";
+ public const string drink_bottle_off_20_regular = "\ueef0";
+ public const string drink_bottle_off_32_regular = "\ueef1";
+ public const string drink_coffee_16_regular = "\ue585";
+ public const string drink_coffee_20_regular = "\uf3c4";
+ public const string drink_coffee_24_regular = "\uf3c5";
+ public const string drink_margarita_16_regular = "\ue586";
+ public const string drink_margarita_20_regular = "\ue587";
+ public const string drink_margarita_24_regular = "\uf3c6";
+ public const string drink_to_go_20_regular = "\ue588";
+ public const string drink_to_go_24_regular = "\ue589";
+ public const string drink_wine_16_regular = "\ue58a";
+ public const string drink_wine_20_regular = "\ue58b";
+ public const string drink_wine_24_regular = "\uf3c7";
+ public const string drive_train_20_regular = "\ue58c";
+ public const string drive_train_24_regular = "\ue58d";
+ public const string drop_12_regular = "\ue58e";
+ public const string drop_16_regular = "\ue58f";
+ public const string drop_20_regular = "\ue590";
+ public const string drop_24_regular = "\ue591";
+ public const string drop_28_regular = "\ue592";
+ public const string drop_48_regular = "\ue593";
+ public const string dual_screen_20_regular = "\ue594";
+ public const string dual_screen_24_regular = "\uf3c8";
+ public const string dual_screen_add_20_regular = "\ue595";
+ public const string dual_screen_add_24_regular = "\uf3c9";
+ public const string dual_screen_arrow_right_20_regular = "\ue596";
+ public const string dual_screen_arrow_right_24_regular = "\uf3ca";
+ public const string dual_screen_arrow_up_20_regular = "\ue597";
+ public const string dual_screen_arrow_up_24_regular = "\ue598";
+ public const string dual_screen_clock_20_regular = "\ue599";
+ public const string dual_screen_clock_24_regular = "\uf3cb";
+ public const string dual_screen_closed_alert_20_regular = "\ue59a";
+ public const string dual_screen_closed_alert_24_regular = "\ue59b";
+ public const string dual_screen_desktop_20_regular = "\ue59c";
+ public const string dual_screen_desktop_24_regular = "\uf3cc";
+ public const string dual_screen_dismiss_20_regular = "\ue59d";
+ public const string dual_screen_dismiss_24_regular = "\ue59e";
+ public const string dual_screen_group_20_regular = "\ue59f";
+ public const string dual_screen_group_24_regular = "\uf3ce";
+ public const string dual_screen_header_20_regular = "\ue5a0";
+ public const string dual_screen_header_24_regular = "\uf3cf";
+ public const string dual_screen_lock_20_regular = "\ue5a1";
+ public const string dual_screen_lock_24_regular = "\uf3d0";
+ public const string dual_screen_mirror_20_regular = "\ue5a2";
+ public const string dual_screen_mirror_24_regular = "\uf3d1";
+ public const string dual_screen_pagination_20_regular = "\ue5a3";
+ public const string dual_screen_pagination_24_regular = "\uf3d2";
+ public const string dual_screen_settings_20_regular = "\ue5a4";
+ public const string dual_screen_settings_24_regular = "\uf3d3";
+ public const string dual_screen_span_20_regular = "\ue5a5";
+ public const string dual_screen_span_24_regular = "\ue5a6";
+ public const string dual_screen_speaker_20_regular = "\ue5a7";
+ public const string dual_screen_speaker_24_regular = "\ue5a8";
+ public const string dual_screen_status_bar_20_regular = "\ue5a9";
+ public const string dual_screen_status_bar_24_regular = "\uf3d4";
+ public const string dual_screen_tablet_20_regular = "\ue5aa";
+ public const string dual_screen_tablet_24_regular = "\uf3d5";
+ public const string dual_screen_update_20_regular = "\ue5ab";
+ public const string dual_screen_update_24_regular = "\uf3d6";
+ public const string dual_screen_vertical_scroll_20_regular = "\ue5ac";
+ public const string dual_screen_vertical_scroll_24_regular = "\uf3d7";
+ public const string dual_screen_vibrate_20_regular = "\ue5ad";
+ public const string dual_screen_vibrate_24_regular = "\uf3d8";
+ public const string dumbbell_16_regular = "\ue5ae";
+ public const string dumbbell_20_regular = "\ue5af";
+ public const string dumbbell_24_regular = "\ue5b0";
+ public const string dumbbell_28_regular = "\ue5b1";
+ public const string dust_20_regular = "\U000f011e";
+ public const string dust_24_regular = "\U000f011f";
+ public const string dust_28_regular = "\U000f0120";
+ public const string earth_16_regular = "\uf3d9";
+ public const string earth_20_regular = "\uf3da";
+ public const string earth_24_regular = "\uf3db";
+ public const string earth_32_regular = "\ueef2";
+ public const string earth_48_regular = "\uf035";
+ public const string earth_leaf_16_regular = "\ueef3";
+ public const string earth_leaf_20_regular = "\ueef4";
+ public const string earth_leaf_24_regular = "\ueef5";
+ public const string earth_leaf_32_regular = "\ueef6";
+ public const string earth_leaf_48_regular = "\uf036";
+ public const string edit_12_regular = "\U000f032a";
+ public const string edit_16_regular = "\uf3dc";
+ public const string edit_20_regular = "\uf3dd";
+ public const string edit_24_regular = "\uf3de";
+ public const string edit_28_regular = "\ue5b2";
+ public const string edit_32_regular = "\ue5b3";
+ public const string edit_48_regular = "\ue5b4";
+ public const string edit_arrow_back_16_regular = "\uf429";
+ public const string edit_arrow_back_20_regular = "\ue5b5";
+ public const string edit_arrow_back_24_regular = "\U000f0121";
+ public const string edit_line_horizontal_3_20_regular = "\U000f062c";
+ public const string edit_line_horizontal_3_24_regular = "\U000f062d";
+ public const string edit_off_16_regular = "\ue5b6";
+ public const string edit_off_20_regular = "\ue5b7";
+ public const string edit_off_24_regular = "\ue5b8";
+ public const string edit_off_28_regular = "\ue5b9";
+ public const string edit_off_32_regular = "\ue5ba";
+ public const string edit_off_48_regular = "\ue5bb";
+ public const string edit_person_20_regular = "\U000f0567";
+ public const string edit_person_24_regular = "\U000f0568";
+ public const string edit_prohibited_16_regular = "\ue5bc";
+ public const string edit_prohibited_20_regular = "\ue5bd";
+ public const string edit_prohibited_24_regular = "\ue5be";
+ public const string edit_prohibited_28_regular = "\ue5bf";
+ public const string edit_prohibited_32_regular = "\ue5c0";
+ public const string edit_prohibited_48_regular = "\ue5c1";
+ public const string edit_settings_20_regular = "\ue5c2";
+ public const string edit_settings_24_regular = "\ue5c3";
+ public const string elevator_20_regular = "\uefe7";
+ public const string elevator_24_regular = "\uefe8";
+ public const string elevator_32_regular = "\uefe9";
+ public const string elevator_48_regular = "\uf037";
+ public const string emoji_16_regular = "\uf3df";
+ public const string emoji_20_regular = "\uf3e0";
+ public const string emoji_24_regular = "\uf3e1";
+ public const string emoji_28_regular = "\ue5c4";
+ public const string emoji_32_regular = "\ue5c5";
+ public const string emoji_48_regular = "\ue5c6";
+ public const string emoji_add_16_regular = "\ue5c7";
+ public const string emoji_add_20_regular = "\ue5c8";
+ public const string emoji_add_24_regular = "\uf3e2";
+ public const string emoji_angry_16_regular = "\U000f0033";
+ public const string emoji_angry_20_regular = "\uf3e3";
+ public const string emoji_angry_24_regular = "\uf3e4";
+ public const string emoji_edit_16_regular = "\ue5c9";
+ public const string emoji_edit_20_regular = "\ue5ca";
+ public const string emoji_edit_24_regular = "\ue5cb";
+ public const string emoji_edit_28_regular = "\ue5cc";
+ public const string emoji_edit_48_regular = "\ue5cd";
+ public const string emoji_hand_16_regular = "\U000f0034";
+ public const string emoji_hand_20_regular = "\ue5ce";
+ public const string emoji_hand_24_regular = "\ue5cf";
+ public const string emoji_hand_28_regular = "\ue5d0";
+ public const string emoji_hand_32_regular = "\U000f00da";
+ public const string emoji_hand_48_regular = "\U000f00db";
+ public const string emoji_hint_16_regular = "\U000f0122";
+ public const string emoji_hint_20_regular = "\U000f0123";
+ public const string emoji_hint_24_regular = "\U000f0124";
+ public const string emoji_hint_28_regular = "\U000f0125";
+ public const string emoji_hint_32_regular = "\U000f0126";
+ public const string emoji_hint_48_regular = "\U000f0127";
+ public const string emoji_laugh_16_regular = "\ue5d1";
+ public const string emoji_laugh_20_regular = "\uf3e5";
+ public const string emoji_laugh_24_regular = "\uf3e6";
+ public const string emoji_meh_16_regular = "\U000f0035";
+ public const string emoji_meh_20_regular = "\uf3e7";
+ public const string emoji_meh_24_regular = "\uf3e8";
+ public const string emoji_meme_16_regular = "\U000f0584";
+ public const string emoji_meme_20_regular = "\U000f0585";
+ public const string emoji_meme_24_regular = "\U000f0586";
+ public const string emoji_multiple_20_regular = "\ue5d2";
+ public const string emoji_multiple_24_regular = "\ue5d3";
+ public const string emoji_sad_16_regular = "\ue5d4";
+ public const string emoji_sad_20_regular = "\uf3e9";
+ public const string emoji_sad_24_regular = "\uf3ea";
+ public const string emoji_sad_slight_20_regular = "\ue5d5";
+ public const string emoji_sad_slight_24_regular = "\ue5d6";
+ public const string emoji_smile_slight_20_regular = "\ue5d7";
+ public const string emoji_smile_slight_24_regular = "\ue5d8";
+ public const string emoji_sparkle_16_regular = "\ue5d9";
+ public const string emoji_sparkle_20_regular = "\ue5da";
+ public const string emoji_sparkle_24_regular = "\ue5db";
+ public const string emoji_sparkle_28_regular = "\ue5dc";
+ public const string emoji_sparkle_32_regular = "\ue5dd";
+ public const string emoji_sparkle_48_regular = "\ue5de";
+ public const string emoji_surprise_20_regular = "\uf3eb";
+ public const string emoji_surprise_24_regular = "\uf3ec";
+ public const string engine_20_regular = "\ue5df";
+ public const string engine_24_regular = "\ue5e0";
+ public const string equal_circle_20_regular = "\ue5e1";
+ public const string equal_circle_24_regular = "\ue5e2";
+ public const string equal_off_12_regular = "\uefc6";
+ public const string equal_off_16_regular = "\uefc7";
+ public const string equal_off_20_regular = "\uf42a";
+ public const string equal_off_24_regular = "\ue5e3";
+ public const string eraser_20_regular = "\ue5e4";
+ public const string eraser_24_regular = "\ue5e5";
+ public const string eraser_medium_20_regular = "\ue5e6";
+ public const string eraser_medium_24_regular = "\ue5e7";
+ public const string eraser_segment_20_regular = "\ue5e8";
+ public const string eraser_segment_24_regular = "\ue5e9";
+ public const string eraser_small_20_regular = "\ue5ea";
+ public const string eraser_small_24_regular = "\ue5eb";
+ public const string eraser_tool_20_regular = "\ue5ec";
+ public const string eraser_tool_24_regular = "\uf3ef";
+ public const string error_circle_12_regular = "\ue5ed";
+ public const string error_circle_16_regular = "\uf3f0";
+ public const string error_circle_20_regular = "\uf3f1";
+ public const string error_circle_24_regular = "\uf3f2";
+ public const string error_circle_48_regular = "\U000f03b5";
+ public const string error_circle_settings_16_regular = "\uf42b";
+ public const string error_circle_settings_20_regular = "\ue5ee";
+ public const string expand_up_left_16_regular = "\uf42c";
+ public const string expand_up_left_20_regular = "\uf431";
+ public const string expand_up_left_24_regular = "\uf432";
+ public const string expand_up_left_28_regular = "\uf433";
+ public const string expand_up_left_32_regular = "\uf44b";
+ public const string expand_up_left_48_regular = "\uf44c";
+ public const string expand_up_right_16_regular = "\uf44f";
+ public const string expand_up_right_20_regular = "\uf450";
+ public const string expand_up_right_24_regular = "\uf46d";
+ public const string expand_up_right_28_regular = "\uf495";
+ public const string expand_up_right_32_regular = "\uf496";
+ public const string expand_up_right_48_regular = "\uf497";
+ public const string extended_dock_20_regular = "\ue5ef";
+ public const string extended_dock_24_regular = "\uf3f4";
+ public const string eye_12_regular = "\ue5f0";
+ public const string eye_16_regular = "\ue5f1";
+ public const string eye_20_regular = "\ue5f2";
+ public const string eye_24_regular = "\ue5f3";
+ public const string eye_28_regular = "\uefc8";
+ public const string eye_32_regular = "\uefc9";
+ public const string eye_48_regular = "\uefca";
+ public const string eye_lines_20_regular = "\uefcb";
+ public const string eye_lines_24_regular = "\uefcc";
+ public const string eye_lines_28_regular = "\uefcd";
+ public const string eye_lines_32_regular = "\uefce";
+ public const string eye_lines_48_regular = "\uefcf";
+ public const string eye_off_16_regular = "\ue5f4";
+ public const string eye_off_20_regular = "\ue5f5";
+ public const string eye_off_24_regular = "\ue5f6";
+ public const string eye_tracking_16_regular = "\ue5f7";
+ public const string eye_tracking_20_regular = "\ue5f8";
+ public const string eye_tracking_24_regular = "\ue5f9";
+ public const string eye_tracking_off_16_regular = "\ue5fa";
+ public const string eye_tracking_off_20_regular = "\ue5fb";
+ public const string eye_tracking_off_24_regular = "\ue5fc";
+ public const string eyedropper_16_regular = "\uf0e6";
+ public const string eyedropper_20_regular = "\ue5fd";
+ public const string eyedropper_24_regular = "\ue5fe";
+ public const string eyedropper_off_20_regular = "\ue5ff";
+ public const string eyedropper_off_24_regular = "\ue600";
+ public const string f_stop_16_regular = "\ue601";
+ public const string f_stop_20_regular = "\ue602";
+ public const string f_stop_24_regular = "\ue603";
+ public const string f_stop_28_regular = "\ue604";
+ public const string fast_acceleration_20_regular = "\ue605";
+ public const string fast_acceleration_24_regular = "\uf3fd";
+ public const string fast_forward_16_regular = "\ue606";
+ public const string fast_forward_20_regular = "\uf3fe";
+ public const string fast_forward_24_regular = "\uf3ff";
+ public const string fast_forward_28_regular = "\ue607";
+ public const string fax_16_regular = "\uf4ae";
+ public const string fax_20_regular = "\ue608";
+ public const string feed_16_regular = "\ueef7";
+ public const string feed_20_regular = "\ueef8";
+ public const string feed_24_regular = "\ueef9";
+ public const string feed_28_regular = "\ueefa";
+ public const string feed_32_regular = "\uefea";
+ public const string feed_48_regular = "\uefeb";
+ public const string filmstrip_16_regular = "\U000f0036";
+ public const string filmstrip_20_regular = "\ueefb";
+ public const string filmstrip_24_regular = "\ueefc";
+ public const string filmstrip_32_regular = "\U000f0037";
+ public const string filmstrip_48_regular = "\U000f01cd";
+ public const string filmstrip_image_20_regular = "\U000f0340";
+ public const string filmstrip_image_24_regular = "\U000f0341";
+ public const string filmstrip_off_48_regular = "\U000f01ce";
+ public const string filmstrip_play_16_regular = "\U000f0038";
+ public const string filmstrip_play_20_regular = "\U000f0039";
+ public const string filmstrip_play_24_regular = "\U000f003a";
+ public const string filmstrip_play_32_regular = "\U000f003b";
+ public const string filmstrip_split_16_regular = "\U000f0181";
+ public const string filmstrip_split_20_regular = "\U000f0182";
+ public const string filmstrip_split_24_regular = "\U000f0183";
+ public const string filmstrip_split_32_regular = "\U000f0184";
+ public const string filter_12_regular = "\ue609";
+ public const string filter_16_regular = "\ue60a";
+ public const string filter_20_regular = "\uf406";
+ public const string filter_24_regular = "\uf407";
+ public const string filter_28_regular = "\uf408";
+ public const string filter_32_regular = "\U000f0432";
+ public const string filter_add_20_regular = "\ue60b";
+ public const string filter_dismiss_16_regular = "\ue60c";
+ public const string filter_dismiss_20_regular = "\ue60d";
+ public const string filter_dismiss_24_regular = "\ue60e";
+ public const string filter_sync_20_regular = "\ue60f";
+ public const string filter_sync_24_regular = "\ue610";
+ public const string fingerprint_16_regular = "\U000f03f9";
+ public const string fingerprint_20_regular = "\ue611";
+ public const string fingerprint_24_regular = "\uf409";
+ public const string fingerprint_32_regular = "\U000f03fa";
+ public const string fingerprint_48_regular = "\ue612";
+ public const string fire_16_regular = "\uef68";
+ public const string fire_20_regular = "\uef69";
+ public const string fire_24_regular = "\uef6a";
+ public const string fireplace_20_regular = "\uefec";
+ public const string fireplace_24_regular = "\uefed";
+ public const string fireplace_32_regular = "\uefee";
+ public const string fireplace_48_regular = "\uefef";
+ public const string fixed_width_20_regular = "\ue613";
+ public const string fixed_width_24_regular = "\ue614";
+ public const string flag_16_regular = "\uf40a";
+ public const string flag_20_regular = "\uf40b";
+ public const string flag_24_regular = "\uf40c";
+ public const string flag_28_regular = "\uf40d";
+ public const string flag_32_regular = "\U000f003c";
+ public const string flag_48_regular = "\uf40e";
+ public const string flag_checkered_20_regular = "\uf070";
+ public const string flag_clock_16_regular = "\U000f003d";
+ public const string flag_clock_20_regular = "\U000f003e";
+ public const string flag_clock_24_regular = "\U000f003f";
+ public const string flag_clock_28_regular = "\U000f0040";
+ public const string flag_clock_32_regular = "\U000f0041";
+ public const string flag_clock_48_regular = "\U000f0042";
+ public const string flag_off_16_regular = "\ue615";
+ public const string flag_off_20_regular = "\ue616";
+ public const string flag_off_24_regular = "\uf40f";
+ public const string flag_off_28_regular = "\uf410";
+ public const string flag_off_48_regular = "\uf411";
+ public const string flash_16_regular = "\ue617";
+ public const string flash_20_regular = "\ue618";
+ public const string flash_24_regular = "\ue619";
+ public const string flash_28_regular = "\ue61a";
+ public const string flash_32_regular = "\U000f01cf";
+ public const string flash_add_20_regular = "\ue61b";
+ public const string flash_auto_20_regular = "\ue61c";
+ public const string flash_auto_24_regular = "\uf412";
+ public const string flash_checkmark_16_regular = "\ue61d";
+ public const string flash_checkmark_20_regular = "\ue61e";
+ public const string flash_checkmark_24_regular = "\ue61f";
+ public const string flash_checkmark_28_regular = "\ue620";
+ public const string flash_flow_16_regular = "\ue621";
+ public const string flash_flow_20_regular = "\ue622";
+ public const string flash_flow_24_regular = "\ue623";
+ public const string flash_off_20_regular = "\ue624";
+ public const string flash_off_24_regular = "\uf413";
+ public const string flash_play_20_regular = "\ue625";
+ public const string flash_settings_20_regular = "\ue626";
+ public const string flash_settings_24_regular = "\ue627";
+ public const string flash_sparkle_16_regular = "\U000f05ca";
+ public const string flash_sparkle_20_regular = "\U000f02d6";
+ public const string flash_sparkle_24_regular = "\U000f02d7";
+ public const string flashlight_16_regular = "\ue628";
+ public const string flashlight_20_regular = "\ue629";
+ public const string flashlight_24_regular = "\uf416";
+ public const string flashlight_off_20_regular = "\ue62a";
+ public const string flashlight_off_24_regular = "\uf417";
+ public const string flip_horizontal_16_regular = "\ue62b";
+ public const string flip_horizontal_20_regular = "\ue62c";
+ public const string flip_horizontal_24_regular = "\ue62d";
+ public const string flip_horizontal_28_regular = "\ue62e";
+ public const string flip_horizontal_32_regular = "\ue62f";
+ public const string flip_horizontal_48_regular = "\ue630";
+ public const string flip_vertical_16_regular = "\ue631";
+ public const string flip_vertical_20_regular = "\ue632";
+ public const string flip_vertical_24_regular = "\ue633";
+ public const string flip_vertical_28_regular = "\ue634";
+ public const string flip_vertical_32_regular = "\ue635";
+ public const string flip_vertical_48_regular = "\ue636";
+ public const string flow_16_regular = "\uf4af";
+ public const string flow_20_regular = "\ue637";
+ public const string flow_24_regular = "\U000f01d0";
+ public const string flow_32_regular = "\U000f01d1";
+ public const string flowchart_16_regular = "\U000f04c8";
+ public const string flowchart_20_regular = "\ue638";
+ public const string flowchart_24_regular = "\ue639";
+ public const string flowchart_32_regular = "\U000f04c9";
+ public const string flowchart_circle_20_regular = "\ue63a";
+ public const string flowchart_circle_24_regular = "\ue63b";
+ public const string fluent_20_regular = "\ue63c";
+ public const string fluent_24_regular = "\ue63d";
+ public const string fluent_32_regular = "\ue63e";
+ public const string fluent_48_regular = "\ue63f";
+ public const string fluid_16_regular = "\ue640";
+ public const string fluid_20_regular = "\ue641";
+ public const string fluid_24_regular = "\ue642";
+ public const string folder_16_regular = "\ue643";
+ public const string folder_20_regular = "\uf418";
+ public const string folder_24_regular = "\uf419";
+ public const string folder_28_regular = "\uf41a";
+ public const string folder_32_regular = "\ue644";
+ public const string folder_48_regular = "\uf41b";
+ public const string folder_add_16_regular = "\ue645";
+ public const string folder_add_20_regular = "\uf41c";
+ public const string folder_add_24_regular = "\uf41d";
+ public const string folder_add_28_regular = "\uf41e";
+ public const string folder_add_32_regular = "\U000f0211";
+ public const string folder_add_48_regular = "\uf41f";
+ public const string folder_arrow_left_16_regular = "\ue646";
+ public const string folder_arrow_left_20_regular = "\ue647";
+ public const string folder_arrow_left_24_regular = "\ue648";
+ public const string folder_arrow_left_28_regular = "\ue649";
+ public const string folder_arrow_left_32_regular = "\ue64a";
+ public const string folder_arrow_left_48_regular = "\U000f0212";
+ public const string folder_arrow_right_16_regular = "\ue64b";
+ public const string folder_arrow_right_20_regular = "\ue64c";
+ public const string folder_arrow_right_24_regular = "\ue64d";
+ public const string folder_arrow_right_28_regular = "\ue64e";
+ public const string folder_arrow_right_32_regular = "\U000f0213";
+ public const string folder_arrow_right_48_regular = "\ue64f";
+ public const string folder_arrow_up_16_regular = "\ue650";
+ public const string folder_arrow_up_20_regular = "\ue651";
+ public const string folder_arrow_up_24_regular = "\ue652";
+ public const string folder_arrow_up_28_regular = "\ue653";
+ public const string folder_arrow_up_32_regular = "\U000f0214";
+ public const string folder_arrow_up_48_regular = "\ue654";
+ public const string folder_briefcase_20_regular = "\uf420";
+ public const string folder_globe_16_regular = "\uf4b1";
+ public const string folder_globe_20_regular = "\ue655";
+ public const string folder_lightning_16_regular = "\U000f01ec";
+ public const string folder_lightning_20_regular = "\U000f01ed";
+ public const string folder_lightning_24_regular = "\U000f01ee";
+ public const string folder_link_16_regular = "\U000f0215";
+ public const string folder_link_20_regular = "\uf425";
+ public const string folder_link_24_regular = "\uf426";
+ public const string folder_link_28_regular = "\uf427";
+ public const string folder_link_32_regular = "\U000f0216";
+ public const string folder_link_48_regular = "\uf428";
+ public const string folder_list_16_regular = "\U000f0128";
+ public const string folder_list_20_regular = "\U000f0129";
+ public const string folder_mail_16_regular = "\ue656";
+ public const string folder_mail_20_regular = "\ue657";
+ public const string folder_mail_24_regular = "\ue658";
+ public const string folder_mail_28_regular = "\ue659";
+ public const string folder_mail_32_regular = "\U000f0433";
+ public const string folder_multiple_16_regular = "\uf0e7";
+ public const string folder_open_16_regular = "\uf42d";
+ public const string folder_open_20_regular = "\uf42e";
+ public const string folder_open_24_regular = "\uf42f";
+ public const string folder_open_vertical_16_regular = "\uf0e8";
+ public const string folder_open_vertical_20_regular = "\uf430";
+ public const string folder_open_vertical_24_regular = "\U000f026d";
+ public const string folder_people_20_regular = "\ueece";
+ public const string folder_people_24_regular = "\ueecf";
+ public const string folder_person_16_regular = "\uf4c6";
+ public const string folder_person_20_regular = "\ue65a";
+ public const string folder_person_24_regular = "\U000f03fb";
+ public const string folder_person_28_regular = "\U000f03fc";
+ public const string folder_person_32_regular = "\U000f03fd";
+ public const string folder_person_48_regular = "\U000f03fe";
+ public const string folder_prohibited_16_regular = "\ue65b";
+ public const string folder_prohibited_20_regular = "\ue65c";
+ public const string folder_prohibited_24_regular = "\ue65d";
+ public const string folder_prohibited_28_regular = "\ue65e";
+ public const string folder_prohibited_32_regular = "\U000f0217";
+ public const string folder_prohibited_48_regular = "\ue65f";
+ public const string folder_search_16_regular = "\U000f038d";
+ public const string folder_search_20_regular = "\U000f038e";
+ public const string folder_search_24_regular = "\U000f038f";
+ public const string folder_swap_16_regular = "\ue660";
+ public const string folder_swap_20_regular = "\ue661";
+ public const string folder_swap_24_regular = "\ue662";
+ public const string folder_sync_16_regular = "\ue663";
+ public const string folder_sync_20_regular = "\ue664";
+ public const string folder_sync_24_regular = "\ue665";
+ public const string folder_zip_16_regular = "\uf434";
+ public const string folder_zip_20_regular = "\uf435";
+ public const string folder_zip_24_regular = "\uf436";
+ public const string font_decrease_20_regular = "\uf437";
+ public const string font_decrease_24_regular = "\uf438";
+ public const string font_increase_20_regular = "\uf439";
+ public const string font_increase_24_regular = "\uf43a";
+ public const string font_space_tracking_in_16_regular = "\uf43b";
+ public const string font_space_tracking_in_20_regular = "\uf43c";
+ public const string font_space_tracking_in_24_regular = "\uf43d";
+ public const string font_space_tracking_in_28_regular = "\uf43e";
+ public const string font_space_tracking_out_16_regular = "\uf43f";
+ public const string font_space_tracking_out_20_regular = "\uf440";
+ public const string font_space_tracking_out_24_regular = "\uf441";
+ public const string font_space_tracking_out_28_regular = "\uf442";
+ public const string food_16_regular = "\ue666";
+ public const string food_20_regular = "\uf443";
+ public const string food_24_regular = "\uf444";
+ public const string food_28_regular = "\U000f05ed";
+ public const string food_32_regular = "\U000f05ee";
+ public const string food_48_regular = "\U000f05ef";
+ public const string food_apple_20_regular = "\ue667";
+ public const string food_apple_24_regular = "\ue668";
+ public const string food_cake_12_regular = "\ue669";
+ public const string food_cake_16_regular = "\ue66a";
+ public const string food_cake_20_regular = "\ue66b";
+ public const string food_cake_24_regular = "\uf445";
+ public const string food_carrot_20_regular = "\ueefd";
+ public const string food_carrot_24_regular = "\ueefe";
+ public const string food_chicken_leg_16_regular = "\uef17";
+ public const string food_chicken_leg_20_regular = "\uef18";
+ public const string food_chicken_leg_24_regular = "\uef19";
+ public const string food_chicken_leg_32_regular = "\uef1a";
+ public const string food_egg_16_regular = "\ue66c";
+ public const string food_egg_20_regular = "\ue66d";
+ public const string food_egg_24_regular = "\uf446";
+ public const string food_fish_20_regular = "\ueeff";
+ public const string food_fish_24_regular = "\uef00";
+ public const string food_grains_20_regular = "\ue66e";
+ public const string food_grains_24_regular = "\ue66f";
+ public const string food_pizza_20_regular = "\ue670";
+ public const string food_pizza_24_regular = "\ue671";
+ public const string food_toast_16_regular = "\ue672";
+ public const string food_toast_20_regular = "\ue673";
+ public const string food_toast_24_regular = "\uf447";
+ public const string form_20_regular = "\ueea7";
+ public const string form_24_regular = "\ueea8";
+ public const string form_28_regular = "\ueea9";
+ public const string form_48_regular = "\ueeaa";
+ public const string form_multiple_20_regular = "\uef1b";
+ public const string form_multiple_24_regular = "\uef1c";
+ public const string form_multiple_28_regular = "\uef1d";
+ public const string form_multiple_48_regular = "\uef1e";
+ public const string form_new_20_regular = "\ue674";
+ public const string form_new_24_regular = "\uf448";
+ public const string form_new_28_regular = "\uf449";
+ public const string form_new_48_regular = "\uf44a";
+ public const string fps_120_20_regular = "\ue675";
+ public const string fps_120_24_regular = "\ue676";
+ public const string fps_240_20_regular = "\ue677";
+ public const string fps_240_24_regular = "\uf44d";
+ public const string fps_30_16_regular = "\ue678";
+ public const string fps_30_20_regular = "\ue679";
+ public const string fps_30_24_regular = "\ue67a";
+ public const string fps_30_28_regular = "\ue67b";
+ public const string fps_30_48_regular = "\ue67c";
+ public const string fps_60_16_regular = "\ue67d";
+ public const string fps_60_20_regular = "\ue67e";
+ public const string fps_60_24_regular = "\ue67f";
+ public const string fps_60_28_regular = "\ue680";
+ public const string fps_60_48_regular = "\ue681";
+ public const string fps_960_20_regular = "\ue682";
+ public const string fps_960_24_regular = "\uf44e";
+ public const string frame_16_regular = "\U000f00dc";
+ public const string frame_20_regular = "\U000f00dd";
+ public const string frame_24_regular = "\U000f00de";
+ public const string full_screen_maximize_16_regular = "\ue683";
+ public const string full_screen_maximize_20_regular = "\ue684";
+ public const string full_screen_maximize_24_regular = "\ue685";
+ public const string full_screen_maximize_28_regular = "\U000f03b6";
+ public const string full_screen_maximize_32_regular = "\U000f03b7";
+ public const string full_screen_minimize_16_regular = "\ue686";
+ public const string full_screen_minimize_20_regular = "\ue687";
+ public const string full_screen_minimize_24_regular = "\ue688";
+ public const string full_screen_minimize_28_regular = "\U000f03b8";
+ public const string full_screen_minimize_32_regular = "\U000f03b9";
+ public const string games_16_regular = "\ue689";
+ public const string games_20_regular = "\ue68a";
+ public const string games_24_regular = "\uf451";
+ public const string games_28_regular = "\ue68b";
+ public const string games_32_regular = "\ue68c";
+ public const string games_48_regular = "\ue68d";
+ public const string gantt_chart_16_regular = "\uf0e9";
+ public const string gantt_chart_20_regular = "\ue68e";
+ public const string gantt_chart_24_regular = "\ue68f";
+ public const string gas_20_regular = "\ue690";
+ public const string gas_24_regular = "\ue691";
+ public const string gas_pump_20_regular = "\ue692";
+ public const string gas_pump_24_regular = "\ue693";
+ public const string gather_20_regular = "\ue694";
+ public const string gauge_20_regular = "\uf4c7";
+ public const string gauge_24_regular = "\uf4c8";
+ public const string gauge_32_regular = "\ueed0";
+ public const string gauge_add_20_regular = "\ue695";
+ public const string gavel_16_regular = "\U000f0185";
+ public const string gavel_20_regular = "\ue696";
+ public const string gavel_24_regular = "\ue697";
+ public const string gavel_32_regular = "\ue698";
+ public const string gavel_prohibited_16_regular = "\U000f0186";
+ public const string gavel_prohibited_20_regular = "\U000f0187";
+ public const string gesture_20_regular = "\ue699";
+ public const string gesture_24_regular = "\uf452";
+ public const string gif_16_regular = "\ue69a";
+ public const string gif_20_regular = "\uf453";
+ public const string gif_24_regular = "\uf454";
+ public const string gift_16_regular = "\ue69b";
+ public const string gift_20_regular = "\uf455";
+ public const string gift_24_regular = "\uf456";
+ public const string gift_card_16_regular = "\uf4cd";
+ public const string gift_card_20_regular = "\uf4ce";
+ public const string gift_card_24_regular = "\ue69c";
+ public const string gift_card_add_20_regular = "\uf4cf";
+ public const string gift_card_add_24_regular = "\ue69d";
+ public const string gift_card_arrow_right_20_regular = "\ue69e";
+ public const string gift_card_arrow_right_24_regular = "\ue69f";
+ public const string gift_card_money_20_regular = "\ue6a0";
+ public const string gift_card_money_24_regular = "\ue6a1";
+ public const string gift_card_multiple_20_regular = "\ue6a2";
+ public const string gift_card_multiple_24_regular = "\ue6a3";
+ public const string gift_open_16_regular = "\U000f0188";
+ public const string gift_open_20_regular = "\U000f0189";
+ public const string gift_open_24_regular = "\U000f018a";
+ public const string gift_open_32_regular = "\U000f062e";
+ public const string glance_default_12_regular = "\ue6a5";
+ public const string glance_20_regular = "\ue6a4";
+ public const string glance_24_regular = "\uf457";
+ public const string glance_horizontal_12_regular = "\ue6a6";
+ public const string glance_horizontal_16_regular = "\uf071";
+ public const string glance_horizontal_20_regular = "\ue6a7";
+ public const string glance_horizontal_24_regular = "\ue6a8";
+ public const string glance_horizontal_32_regular = "\U000f0434";
+ public const string glance_horizontal_sparkle_32_regular = "\U000f0435";
+ public const string glance_horizontal_sparkles_16_regular = "\uf072";
+ public const string glance_horizontal_sparkles_20_regular = "\U000f0485";
+ public const string glance_horizontal_sparkles_24_regular = "\uf073";
+ public const string glasses_16_regular = "\ue6a9";
+ public const string glasses_20_regular = "\ue6aa";
+ public const string glasses_24_regular = "\uf458";
+ public const string glasses_28_regular = "\ue6ab";
+ public const string glasses_32_regular = "\U000f0043";
+ public const string glasses_48_regular = "\ue6ac";
+ public const string glasses_off_16_regular = "\ue6ad";
+ public const string glasses_off_20_regular = "\ue6ae";
+ public const string glasses_off_24_regular = "\uf459";
+ public const string glasses_off_28_regular = "\ue6af";
+ public const string glasses_off_32_regular = "\U000f0044";
+ public const string glasses_off_48_regular = "\ue6b0";
+ public const string globe_12_regular = "\U000f018b";
+ public const string globe_16_regular = "\ue6b1";
+ public const string globe_20_regular = "\uf45a";
+ public const string globe_24_regular = "\uf45b";
+ public const string globe_28_regular = "\U000f050d";
+ public const string globe_32_regular = "\ue6b2";
+ public const string globe_48_regular = "\U000f026e";
+ public const string globe_add_20_regular = "\ue6b3";
+ public const string globe_add_24_regular = "\uf45c";
+ public const string globe_arrow_forward_16_regular = "\U000f0302";
+ public const string globe_arrow_forward_20_regular = "\U000f0303";
+ public const string globe_arrow_forward_24_regular = "\U000f0304";
+ public const string globe_arrow_forward_32_regular = "\U000f0305";
+ public const string globe_arrow_up_16_regular = "\U000f0436";
+ public const string globe_arrow_up_20_regular = "\U000f0437";
+ public const string globe_arrow_up_24_regular = "\U000f0438";
+ public const string globe_clock_16_regular = "\ue6b4";
+ public const string globe_clock_20_regular = "\ue6b5";
+ public const string globe_clock_24_regular = "\uf45d";
+ public const string globe_desktop_20_regular = "\ue6b6";
+ public const string globe_desktop_24_regular = "\uf45e";
+ public const string globe_error_16_regular = "\U000f0439";
+ public const string globe_error_20_regular = "\U000f043a";
+ public const string globe_error_24_regular = "\U000f043b";
+ public const string globe_location_20_regular = "\uf4dc";
+ public const string globe_location_24_regular = "\uf45f";
+ public const string globe_person_20_regular = "\ue6b7";
+ public const string globe_person_24_regular = "\ue6b8";
+ public const string globe_prohibited_16_regular = "\U000f043c";
+ public const string globe_prohibited_20_regular = "\ue6b9";
+ public const string globe_prohibited_24_regular = "\U000f043d";
+ public const string globe_search_20_regular = "\ue6ba";
+ public const string globe_search_24_regular = "\uf460";
+ public const string globe_shield_20_regular = "\ue6bb";
+ public const string globe_shield_24_regular = "\ue6bc";
+ public const string globe_shield_48_regular = "\U000f026f";
+ public const string globe_star_16_regular = "\uf4eb";
+ public const string globe_star_20_regular = "\ue6bd";
+ public const string globe_surface_20_regular = "\ue6be";
+ public const string globe_surface_24_regular = "\ue6bf";
+ public const string globe_surface_32_regular = "\U000f0045";
+ public const string globe_sync_16_regular = "\U000f043e";
+ public const string globe_sync_20_regular = "\U000f043f";
+ public const string globe_sync_24_regular = "\U000f0440";
+ public const string globe_video_20_regular = "\uf4fd";
+ public const string globe_video_24_regular = "\uf461";
+ public const string globe_video_28_regular = "\ue6c0";
+ public const string globe_video_32_regular = "\ue6c1";
+ public const string globe_video_48_regular = "\ue6c2";
+ public const string globe_warning_16_regular = "\U000f0441";
+ public const string globe_warning_20_regular = "\U000f0442";
+ public const string globe_warning_24_regular = "\U000f0443";
+ public const string grid_16_regular = "\ue6c3";
+ public const string grid_20_regular = "\uf462";
+ public const string grid_24_regular = "\uf463";
+ public const string grid_28_regular = "\uf464";
+ public const string grid_circles_24_regular = "\uf074";
+ public const string grid_circles_28_regular = "\uf075";
+ public const string grid_dots_20_regular = "\ue6c4";
+ public const string grid_dots_24_regular = "\ue6c5";
+ public const string grid_dots_28_regular = "\ue6c6";
+ public const string grid_kanban_16_regular = "\U000f018c";
+ public const string grid_kanban_20_regular = "\ue6c7";
+ public const string group_20_regular = "\uf465";
+ public const string group_24_regular = "\uf466";
+ public const string group_dismiss_20_regular = "\ue6c8";
+ public const string group_dismiss_24_regular = "\ue6c9";
+ public const string group_list_20_regular = "\ue6ca";
+ public const string group_list_24_regular = "\uf467";
+ public const string group_return_20_regular = "\ue6cb";
+ public const string group_return_24_regular = "\ue6cc";
+ public const string guardian_20_regular = "\ue6cd";
+ public const string guardian_24_regular = "\ue6ce";
+ public const string guardian_28_regular = "\ue6cf";
+ public const string guardian_48_regular = "\ue6d0";
+ public const string guest_12_regular = "\U000f050e";
+ public const string guest_16_regular = "\uf468";
+ public const string guest_20_regular = "\uf469";
+ public const string guest_24_regular = "\uf46a";
+ public const string guest_28_regular = "\uf46b";
+ public const string guest_32_regular = "\U000f050f";
+ public const string guest_48_regular = "\U000f0510";
+ public const string guest_add_20_regular = "\ue6d1";
+ public const string guest_add_24_regular = "\uf46c";
+ public const string guitar_16_regular = "\ue6d2";
+ public const string guitar_20_regular = "\ue6d3";
+ public const string guitar_24_regular = "\ue6d4";
+ public const string guitar_28_regular = "\ue6d5";
+ public const string hand_draw_16_regular = "\ue6d6";
+ public const string hand_draw_20_regular = "\ue6d7";
+ public const string hand_draw_24_regular = "\ue6d8";
+ public const string hand_draw_28_regular = "\ue6d9";
+ public const string hand_left_16_regular = "\ue6da";
+ public const string hand_left_20_regular = "\ue6db";
+ public const string hand_left_24_regular = "\ue6dc";
+ public const string hand_left_28_regular = "\ue6dd";
+ public const string hand_left_chat_16_regular = "\ueed1";
+ public const string hand_left_chat_20_regular = "\ueed2";
+ public const string hand_left_chat_24_regular = "\ueed3";
+ public const string hand_left_chat_28_regular = "\ueed4";
+ public const string hand_open_heart_20_regular = "\uef01";
+ public const string hand_open_heart_32_regular = "\uef02";
+ public const string hand_point_16_regular = "\U000f0587";
+ public const string hand_point_20_regular = "\U000f0588";
+ public const string hand_point_24_regular = "\U000f0589";
+ public const string hand_point_28_regular = "\U000f058a";
+ public const string hand_point_32_regular = "\U000f058b";
+ public const string hand_point_48_regular = "\U000f058c";
+ public const string hand_right_16_regular = "\ue6de";
+ public const string hand_right_20_regular = "\ue6df";
+ public const string hand_right_24_regular = "\ue6e0";
+ public const string hand_right_28_regular = "\ue6e1";
+ public const string hand_right_off_16_regular = "\U000f0270";
+ public const string hand_right_off_20_regular = "\ue6e2";
+ public const string hand_right_off_24_regular = "\U000f0271";
+ public const string hand_right_off_28_regular = "\U000f0272";
+ public const string hand_wave_16_regular = "\uef03";
+ public const string hand_wave_20_regular = "\uef04";
+ public const string hand_wave_24_regular = "\uef05";
+ public const string handshake_16_regular = "\uf46e";
+ public const string handshake_20_regular = "\uf46f";
+ public const string handshake_24_regular = "\uf470";
+ public const string handshake_32_regular = "\uef06";
+ public const string haptic_strong_16_regular = "\U000f05a5";
+ public const string haptic_strong_20_regular = "\U000f05a6";
+ public const string haptic_strong_24_regular = "\U000f05a7";
+ public const string haptic_weak_16_regular = "\U000f05a8";
+ public const string haptic_weak_20_regular = "\U000f05a9";
+ public const string haptic_weak_24_regular = "\U000f05aa";
+ public const string hard_drive_16_regular = "\uf0ea";
+ public const string hard_drive_20_regular = "\ue6e3";
+ public const string hard_drive_24_regular = "\U000f0306";
+ public const string hard_drive_28_regular = "\U000f04f1";
+ public const string hard_drive_32_regular = "\U000f0307";
+ public const string hard_drive_48_regular = "\U000f04f2";
+ public const string hard_drive_call_24_regular = "\U000f0308";
+ public const string hard_drive_call_32_regular = "\U000f0309";
+ public const string hat_graduation_12_regular = "\ue6e4";
+ public const string hat_graduation_16_regular = "\ue6e5";
+ public const string hat_graduation_20_regular = "\ue6e6";
+ public const string hat_graduation_24_regular = "\ue6e7";
+ public const string hat_graduation_28_regular = "\U000f01ef";
+ public const string hat_graduation_add_16_regular = "\U000f03ff";
+ public const string hat_graduation_add_20_regular = "\U000f0400";
+ public const string hat_graduation_add_24_regular = "\U000f0401";
+ public const string hat_graduation_sparkle_16_regular = "\U000f0273";
+ public const string hat_graduation_sparkle_20_regular = "\U000f0218";
+ public const string hat_graduation_sparkle_24_regular = "\U000f0219";
+ public const string hat_graduation_sparkle_28_regular = "\U000f021a";
+ public const string hd_16_regular = "\ue6e8";
+ public const string hd_20_regular = "\ue6e9";
+ public const string hd_24_regular = "\ue6ea";
+ public const string hdr_20_regular = "\ue6eb";
+ public const string hdr_24_regular = "\uf471";
+ public const string hdr_off_20_regular = "\ue6ec";
+ public const string hdr_off_24_regular = "\ue6ed";
+ public const string headphones_20_regular = "\ue6ee";
+ public const string headphones_24_regular = "\uf472";
+ public const string headphones_28_regular = "\uf473";
+ public const string headphones_32_regular = "\ue6ef";
+ public const string headphones_48_regular = "\ue6f0";
+ public const string headphones_sound_wave_20_regular = "\ue6f1";
+ public const string headphones_sound_wave_24_regular = "\ue6f2";
+ public const string headphones_sound_wave_28_regular = "\ue6f3";
+ public const string headphones_sound_wave_32_regular = "\ue6f4";
+ public const string headphones_sound_wave_48_regular = "\ue6f5";
+ public const string headset_16_regular = "\ue6f6";
+ public const string headset_20_regular = "\ue6f7";
+ public const string headset_24_regular = "\uf474";
+ public const string headset_28_regular = "\uf475";
+ public const string headset_32_regular = "\ue6f8";
+ public const string headset_48_regular = "\ue6f9";
+ public const string headset_add_20_regular = "\uf4fe";
+ public const string headset_add_24_regular = "\uf4ff";
+ public const string headset_vr_20_regular = "\uf476";
+ public const string headset_vr_24_regular = "\uf477";
+ public const string heart_12_regular = "\ue6fa";
+ public const string heart_16_regular = "\uf478";
+ public const string heart_20_regular = "\uf479";
+ public const string heart_24_regular = "\uf47a";
+ public const string heart_28_regular = "\uf500";
+ public const string heart_32_regular = "\ue6fb";
+ public const string heart_48_regular = "\ue6fc";
+ public const string heart_broken_16_regular = "\uf501";
+ public const string heart_broken_20_regular = "\ue6fd";
+ public const string heart_broken_24_regular = "\uef25";
+ public const string heart_circle_16_regular = "\ue6fe";
+ public const string heart_circle_20_regular = "\ue6ff";
+ public const string heart_circle_24_regular = "\ue700";
+ public const string heart_circle_hint_16_regular = "\uf076";
+ public const string heart_circle_hint_20_regular = "\uf077";
+ public const string heart_circle_hint_24_regular = "\uf078";
+ public const string heart_circle_hint_28_regular = "\uf079";
+ public const string heart_circle_hint_32_regular = "\uf07a";
+ public const string heart_circle_hint_48_regular = "\uf07b";
+ public const string heart_off_16_regular = "\U000f02b0";
+ public const string heart_off_20_regular = "\U000f02b1";
+ public const string heart_off_24_regular = "\U000f02b2";
+ public const string heart_pulse_20_regular = "\ue701";
+ public const string heart_pulse_24_regular = "\ue702";
+ public const string heart_pulse_32_regular = "\ue703";
+ public const string heart_pulse_checkmark_20_regular = "\U000f01d2";
+ public const string heart_pulse_error_20_regular = "\U000f01d3";
+ public const string heart_pulse_warning_20_regular = "\U000f01d4";
+ public const string hexagon_12_regular = "\U000f02d8";
+ public const string hexagon_16_regular = "\U000f02b3";
+ public const string hexagon_20_regular = "\U000f02b4";
+ public const string hexagon_24_regular = "\U000f02d9";
+ public const string hexagon_28_regular = "\U000f0390";
+ public const string hexagon_32_regular = "\U000f0391";
+ public const string hexagon_48_regular = "\U000f0392";
+ public const string hexagon_sparkle_20_regular = "\U000f05ab";
+ public const string hexagon_sparkle_24_regular = "\U000f05ac";
+ public const string hexagon_three_12_regular = "\U000f02da";
+ public const string hexagon_three_16_regular = "\U000f02b5";
+ public const string hexagon_three_20_regular = "\U000f02b6";
+ public const string hexagon_three_24_regular = "\U000f02db";
+ public const string highlight_16_regular = "\uf47b";
+ public const string highlight_20_regular = "\uf47c";
+ public const string highlight_24_regular = "\uf47d";
+ public const string highlight_link_20_regular = "\ue704";
+ public const string highway_20_regular = "\U000f0569";
+ public const string highway_24_regular = "\U000f056a";
+ public const string history_16_regular = "\ue705";
+ public const string history_20_regular = "\uf47e";
+ public const string history_24_regular = "\uf47f";
+ public const string history_28_regular = "\ue706";
+ public const string history_32_regular = "\ue707";
+ public const string history_48_regular = "\ue708";
+ public const string history_dismiss_20_regular = "\ue709";
+ public const string history_dismiss_24_regular = "\ue70a";
+ public const string history_dismiss_28_regular = "\ue70b";
+ public const string history_dismiss_32_regular = "\ue70c";
+ public const string history_dismiss_48_regular = "\ue70d";
+ public const string home_12_regular = "\ue70e";
+ public const string home_16_regular = "\ue70f";
+ public const string home_20_regular = "\uf480";
+ public const string home_24_regular = "\uf481";
+ public const string home_28_regular = "\uf482";
+ public const string home_32_regular = "\ue710";
+ public const string home_48_regular = "\ue711";
+ public const string home_add_20_regular = "\ue712";
+ public const string home_add_24_regular = "\uf483";
+ public const string home_checkmark_16_regular = "\ue713";
+ public const string home_checkmark_20_regular = "\ue714";
+ public const string home_checkmark_24_regular = "\uf484";
+ public const string home_database_20_regular = "\ue715";
+ public const string home_database_24_regular = "\ueed5";
+ public const string home_database_32_regular = "\ueed6";
+ public const string home_garage_20_regular = "\U000f052e";
+ public const string home_garage_24_regular = "\U000f052f";
+ public const string home_heart_16_regular = "\U000f01d5";
+ public const string home_heart_20_regular = "\U000f01d6";
+ public const string home_heart_24_regular = "\U000f01d7";
+ public const string home_heart_32_regular = "\U000f01d8";
+ public const string home_more_20_regular = "\ue716";
+ public const string home_more_24_regular = "\ueed7";
+ public const string home_more_32_regular = "\ueed8";
+ public const string home_more_48_regular = "\U000f0046";
+ public const string home_person_20_regular = "\ue717";
+ public const string home_person_24_regular = "\ue718";
+ public const string home_split_20_regular = "\uf038";
+ public const string home_split_24_regular = "\uf039";
+ public const string home_split_32_regular = "\uf03a";
+ public const string home_split_48_regular = "\uf03b";
+ public const string hourglass_16_regular = "\uf0eb";
+ public const string hourglass_20_regular = "\uef6b";
+ public const string hourglass_24_regular = "\uef6c";
+ public const string hourglass_half_16_regular = "\uf0ec";
+ public const string hourglass_half_20_regular = "\uef6d";
+ public const string hourglass_half_24_regular = "\uef6e";
+ public const string hourglass_one_quarter_16_regular = "\uf0ed";
+ public const string hourglass_one_quarter_20_regular = "\uef6f";
+ public const string hourglass_one_quarter_24_regular = "\uef70";
+ public const string hourglass_three_quarter_16_regular = "\uf0ee";
+ public const string hourglass_three_quarter_20_regular = "\uef71";
+ public const string hourglass_three_quarter_24_regular = "\uef72";
+ public const string icons_20_regular = "\uf485";
+ public const string icons_24_regular = "\uf486";
+ public const string image_16_regular = "\uf487";
+ public const string image_20_regular = "\uf488";
+ public const string image_24_regular = "\uf489";
+ public const string image_28_regular = "\uf48a";
+ public const string image_32_regular = "\ue719";
+ public const string image_48_regular = "\uf48b";
+ public const string image_add_20_regular = "\ue71a";
+ public const string image_add_24_regular = "\uf48c";
+ public const string image_alt_text_16_regular = "\ue71b";
+ public const string image_alt_text_20_regular = "\uf48d";
+ public const string image_alt_text_24_regular = "\uf48e";
+ public const string image_arrow_back_20_regular = "\ue71c";
+ public const string image_arrow_back_24_regular = "\ue71d";
+ public const string image_arrow_counterclockwise_20_regular = "\ue71e";
+ public const string image_arrow_counterclockwise_24_regular = "\ue71f";
+ public const string image_arrow_forward_20_regular = "\ue720";
+ public const string image_arrow_forward_24_regular = "\ue721";
+ public const string image_border_16_regular = "\U000f0047";
+ public const string image_border_20_regular = "\U000f0048";
+ public const string image_border_24_regular = "\U000f0049";
+ public const string image_border_28_regular = "\U000f004a";
+ public const string image_border_32_regular = "\U000f004b";
+ public const string image_border_48_regular = "\U000f004c";
+ public const string image_circle_16_regular = "\U000f004d";
+ public const string image_circle_20_regular = "\U000f004e";
+ public const string image_circle_24_regular = "\U000f004f";
+ public const string image_circle_28_regular = "\U000f0050";
+ public const string image_circle_32_regular = "\U000f0051";
+ public const string image_circle_48_regular = "\U000f0052";
+ public const string image_copy_20_regular = "\uf48f";
+ public const string image_copy_24_regular = "\uf490";
+ public const string image_copy_28_regular = "\uf491";
+ public const string image_edit_16_regular = "\uf492";
+ public const string image_edit_20_regular = "\uf493";
+ public const string image_edit_24_regular = "\uf494";
+ public const string image_globe_20_regular = "\ue722";
+ public const string image_globe_24_regular = "\ue723";
+ public const string image_multiple_16_regular = "\ue724";
+ public const string image_multiple_20_regular = "\ue725";
+ public const string image_multiple_24_regular = "\ue726";
+ public const string image_multiple_28_regular = "\ue727";
+ public const string image_multiple_32_regular = "\ue728";
+ public const string image_multiple_48_regular = "\ue729";
+ public const string image_multiple_off_16_regular = "\ue72a";
+ public const string image_multiple_off_20_regular = "\ue72b";
+ public const string image_off_20_regular = "\ue72c";
+ public const string image_off_24_regular = "\uf498";
+ public const string image_off_28_regular = "\U000f01d9";
+ public const string image_off_32_regular = "\U000f01da";
+ public const string image_off_48_regular = "\U000f01db";
+ public const string image_prohibited_20_regular = "\ue72d";
+ public const string image_prohibited_24_regular = "\ue72e";
+ public const string image_reflection_20_regular = "\ue72f";
+ public const string image_reflection_24_regular = "\ue730";
+ public const string image_search_20_regular = "\uf499";
+ public const string image_search_24_regular = "\uf49a";
+ public const string image_shadow_20_regular = "\ue731";
+ public const string image_shadow_24_regular = "\ue732";
+ public const string image_sparkle_16_regular = "\U000f01f0";
+ public const string image_sparkle_20_regular = "\U000f01f1";
+ public const string image_sparkle_24_regular = "\U000f01f2";
+ public const string image_split_20_regular = "\U000f0530";
+ public const string image_split_24_regular = "\U000f0531";
+ public const string image_stack_16_regular = "\U000f018d";
+ public const string image_stack_20_regular = "\U000f018e";
+ public const string image_table_16_regular = "\U000f0053";
+ public const string image_table_20_regular = "\U000f0054";
+ public const string image_table_24_regular = "\U000f0055";
+ public const string image_table_28_regular = "\U000f0056";
+ public const string image_table_32_regular = "\U000f0057";
+ public const string image_table_48_regular = "\U000f0058";
+ public const string immersive_reader_16_regular = "\ue733";
+ public const string immersive_reader_20_regular = "\uf49b";
+ public const string immersive_reader_24_regular = "\uf49c";
+ public const string immersive_reader_28_regular = "\ue734";
+ public const string important_12_regular = "\uf49d";
+ public const string important_16_regular = "\uf49e";
+ public const string important_20_regular = "\uf49f";
+ public const string important_24_regular = "\uf4a0";
+ public const string important_32_regular = "\U000f0444";
+ public const string incognito_20_regular = "\ue735";
+ public const string incognito_24_regular = "\uf4a1";
+ public const string info_12_regular = "\ue736";
+ public const string info_16_regular = "\uf4a2";
+ public const string info_20_regular = "\uf4a3";
+ public const string info_24_regular = "\uf4a4";
+ public const string info_28_regular = "\uf4a5";
+ public const string info_32_regular = "\U000f0059";
+ public const string info_48_regular = "\U000f005a";
+ public const string info_shield_20_regular = "\ue737";
+ public const string ink_stroke_20_regular = "\ue738";
+ public const string ink_stroke_24_regular = "\ue739";
+ public const string ink_stroke_arrow_down_20_regular = "\uef73";
+ public const string ink_stroke_arrow_down_24_regular = "\uef74";
+ public const string ink_stroke_arrow_up_down_20_regular = "\uef75";
+ public const string ink_stroke_arrow_up_down_24_regular = "\uef76";
+ public const string inking_tool_16_regular = "\uf4a6";
+ public const string inking_tool_20_regular = "\uf4a7";
+ public const string inking_tool_24_regular = "\uf4a8";
+ public const string inking_tool_32_regular = "\ue73a";
+ public const string inprivate_account_16_regular = "\uf4a9";
+ public const string inprivate_account_20_regular = "\uf4aa";
+ public const string inprivate_account_24_regular = "\uf4ab";
+ public const string inprivate_account_28_regular = "\uf4ac";
+ public const string insert_20_regular = "\uf4ad";
+ public const string ios_arrow_ltr_24_regular = "\ue73b";
+ public const string ios_arrow_rtl_24_regular = "\ue73c";
+ public const string ios_chevron_right_20_regular = "\uf4b2";
+ public const string iot_16_regular = "\U000f005b";
+ public const string iot_20_regular = "\ue73d";
+ public const string iot_24_regular = "\ue73e";
+ public const string iot_alert_16_regular = "\U000f005c";
+ public const string iot_alert_20_regular = "\U000f005d";
+ public const string iot_alert_24_regular = "\U000f005e";
+ public const string javascript_16_regular = "\uf4b3";
+ public const string javascript_20_regular = "\uf4b4";
+ public const string javascript_24_regular = "\uf4b5";
+ public const string joystick_20_regular = "\ue73f";
+ public const string key_16_regular = "\ue740";
+ public const string key_20_regular = "\uf4b6";
+ public const string key_24_regular = "\uf4b7";
+ public const string key_32_regular = "\ue741";
+ public const string key_command_16_regular = "\ue742";
+ public const string key_command_20_regular = "\ue743";
+ public const string key_command_24_regular = "\ue744";
+ public const string key_multiple_16_regular = "\U000f0274";
+ public const string key_multiple_20_regular = "\ue745";
+ public const string key_multiple_24_regular = "\U000f0275";
+ public const string key_reset_20_regular = "\ue746";
+ public const string key_reset_24_regular = "\ue747";
+ public const string keyboard_123_20_regular = "\ue748";
+ public const string keyboard_123_24_regular = "\ue749";
+ public const string keyboard_16_regular = "\ue74a";
+ public const string keyboard_20_regular = "\uf4b8";
+ public const string keyboard_24_regular = "\uf4b9";
+ public const string keyboard_dock_20_regular = "\ue74b";
+ public const string keyboard_dock_24_regular = "\uf4ba";
+ public const string keyboard_layout_float_20_regular = "\ue74c";
+ public const string keyboard_layout_float_24_regular = "\uf4bb";
+ public const string keyboard_layout_one_handed_left_20_regular = "\ue74d";
+ public const string keyboard_layout_one_handed_left_24_regular = "\uf4bc";
+ public const string keyboard_layout_resize_20_regular = "\ue74e";
+ public const string keyboard_layout_resize_24_regular = "\uf4bd";
+ public const string keyboard_layout_split_20_regular = "\ue74f";
+ public const string keyboard_layout_split_24_regular = "\uf4be";
+ public const string keyboard_mouse_16_regular = "\uf0ef";
+ public const string keyboard_shift_16_regular = "\ue750";
+ public const string keyboard_shift_20_regular = "\ue751";
+ public const string keyboard_shift_24_regular = "\uf4bf";
+ public const string keyboard_shift_uppercase_16_regular = "\ue752";
+ public const string keyboard_shift_uppercase_20_regular = "\ue753";
+ public const string keyboard_shift_uppercase_24_regular = "\uf4c0";
+ public const string keyboard_tab_20_regular = "\ue754";
+ public const string keyboard_tab_24_regular = "\uf4c1";
+ public const string kiosk_24_regular = "\U000f021b";
+ public const string laptop_16_regular = "\uf4c2";
+ public const string laptop_20_regular = "\uf4c3";
+ public const string laptop_24_regular = "\uf4c4";
+ public const string laptop_28_regular = "\uf4c5";
+ public const string laptop_32_regular = "\U000f04f3";
+ public const string laptop_48_regular = "\U000f0532";
+ public const string laptop_briefcase_20_regular = "\U000f0511";
+ public const string laptop_briefcase_24_regular = "\U000f0512";
+ public const string laptop_briefcase_32_regular = "\U000f0513";
+ public const string laptop_dismiss_16_regular = "\uf505";
+ public const string laptop_dismiss_20_regular = "\ue755";
+ public const string laptop_multiple_24_regular = "\U000f021c";
+ public const string laptop_person_20_regular = "\U000f056b";
+ public const string laptop_person_24_regular = "\U000f056c";
+ public const string laptop_person_48_regular = "\U000f056d";
+ public const string laptop_settings_20_regular = "\U000f04f4";
+ public const string laptop_settings_24_regular = "\U000f04f5";
+ public const string laptop_settings_32_regular = "\U000f04f6";
+ public const string laptop_shield_16_regular = "\U000f018f";
+ public const string laptop_shield_20_regular = "\U000f0190";
+ public const string laser_tool_20_regular = "\uef1f";
+ public const string lasso_20_regular = "\ue756";
+ public const string lasso_24_regular = "\uf4c9";
+ public const string lasso_28_regular = "\ue757";
+ public const string launcher_settings_20_regular = "\ue758";
+ public const string launcher_settings_24_regular = "\uf4ca";
+ public const string layer_20_regular = "\uf4cb";
+ public const string layer_24_regular = "\uf4cc";
+ public const string layer_diagonal_16_regular = "\U000f0445";
+ public const string layer_diagonal_20_regular = "\uef26";
+ public const string layer_diagonal_24_regular = "\U000f04ca";
+ public const string layer_diagonal_add_20_regular = "\U000f0402";
+ public const string layer_diagonal_add_24_regular = "\U000f05f0";
+ public const string layer_diagonal_person_16_regular = "\U000f0446";
+ public const string layer_diagonal_person_20_regular = "\uef27";
+ public const string layer_diagonal_person_24_regular = "\U000f04cb";
+ public const string layer_diagonal_sparkle_16_regular = "\U000f0514";
+ public const string layer_diagonal_sparkle_20_regular = "\U000f0515";
+ public const string layer_diagonal_sparkle_24_regular = "\U000f0516";
+ public const string layout_cell_four_16_regular = "\U000f0486";
+ public const string layout_cell_four_20_regular = "\U000f0487";
+ public const string table_simple_24_regular = "\uec52";
+ public const string layout_column_four_16_regular = "\U000f0489";
+ public const string layout_column_four_20_regular = "\U000f048a";
+ public const string layout_column_four_24_regular = "\U000f048b";
+ public const string layout_column_one_third_left_16_regular = "\U000f048c";
+ public const string layout_column_one_third_left_20_regular = "\U000f048d";
+ public const string layout_column_one_third_left_24_regular = "\U000f048e";
+ public const string layout_column_one_third_right_16_regular = "\U000f048f";
+ public const string layout_column_one_third_right_20_regular = "\U000f0490";
+ public const string layout_column_one_third_right_24_regular = "\U000f0491";
+ public const string layout_column_one_third_right_hint_16_regular = "\U000f0492";
+ public const string layout_column_one_third_right_hint_20_regular = "\U000f0493";
+ public const string layout_column_one_third_right_hint_24_regular = "\U000f0494";
+ public const string layout_column_three_16_regular = "\U000f0495";
+ public const string layout_column_three_20_regular = "\U000f0496";
+ public const string layout_column_three_24_regular = "\U000f0497";
+ public const string layout_column_two_16_regular = "\U000f0498";
+ public const string layout_column_two_20_regular = "\U000f0499";
+ public const string layout_column_two_24_regular = "\U000f049a";
+ public const string layout_column_two_32_regular = "\U000f05d7";
+ public const string layout_column_two_split_left_16_regular = "\U000f049b";
+ public const string layout_column_two_split_left_20_regular = "\U000f049c";
+ public const string layout_column_two_split_left_24_regular = "\U000f049d";
+ public const string layout_column_two_split_right_16_regular = "\U000f049e";
+ public const string layout_column_two_split_right_20_regular = "\U000f049f";
+ public const string layout_column_two_split_right_24_regular = "\U000f04a0";
+ public const string layout_row_four_16_regular = "\U000f04a1";
+ public const string layout_row_four_20_regular = "\U000f04a2";
+ public const string layout_row_four_24_regular = "\U000f04a3";
+ public const string layout_row_three_16_regular = "\U000f04a4";
+ public const string layout_row_three_20_regular = "\U000f04a5";
+ public const string layout_row_three_24_regular = "\U000f04a6";
+ public const string layout_row_two_16_regular = "\U000f04a7";
+ public const string layout_row_two_20_regular = "\U000f04a8";
+ public const string layout_row_two_24_regular = "\U000f04a9";
+ public const string layout_row_two_28_regular = "\U000f05fe";
+ public const string layout_row_two_32_regular = "\U000f05d8";
+ public const string layout_row_two_48_regular = "\U000f05ff";
+ public const string layout_row_two_split_bottom_16_regular = "\U000f04aa";
+ public const string layout_row_two_split_bottom_20_regular = "\U000f04ab";
+ public const string layout_row_two_split_bottom_24_regular = "\U000f04ac";
+ public const string layout_row_two_split_top_16_regular = "\U000f04ad";
+ public const string layout_row_two_split_top_20_regular = "\U000f04ae";
+ public const string layout_row_two_split_top_24_regular = "\U000f04af";
+ public const string leaf_one_16_regular = "\ue759";
+ public const string leaf_one_20_regular = "\ue75a";
+ public const string leaf_one_24_regular = "\ue75b";
+ public const string leaf_one_32_regular = "\uef07";
+ public const string leaf_three_16_regular = "\ue75c";
+ public const string leaf_three_20_regular = "\ue75d";
+ public const string leaf_three_24_regular = "\ue75e";
+ public const string leaf_two_16_regular = "\uf4d0";
+ public const string leaf_two_20_regular = "\uf4d1";
+ public const string leaf_two_24_regular = "\uf4d2";
+ public const string leaf_two_32_regular = "\uef08";
+ public const string leaf_two_48_regular = "\uf03c";
+ public const string learning_app_20_regular = "\ue75f";
+ public const string learning_app_24_regular = "\ue760";
+ public const string library_16_regular = "\ue761";
+ public const string library_20_regular = "\ue762";
+ public const string library_24_regular = "\uf4d3";
+ public const string library_28_regular = "\uf4d4";
+ public const string library_32_regular = "\U000f0403";
+ public const string lightbulb_16_regular = "\uf4d5";
+ public const string lightbulb_20_regular = "\uf4d6";
+ public const string lightbulb_24_regular = "\uf4d7";
+ public const string lightbulb_28_regular = "\uf07c";
+ public const string lightbulb_32_regular = "\uf07d";
+ public const string lightbulb_48_regular = "\uf07e";
+ public const string lightbulb_checkmark_20_regular = "\U000f012a";
+ public const string lightbulb_circle_20_regular = "\ue763";
+ public const string lightbulb_circle_24_regular = "\uf4d8";
+ public const string lightbulb_filament_16_regular = "\uf4d9";
+ public const string lightbulb_filament_20_regular = "\uf4da";
+ public const string lightbulb_filament_24_regular = "\uf4db";
+ public const string lightbulb_filament_32_regular = "\U000f0404";
+ public const string lightbulb_filament_48_regular = "\ue764";
+ public const string lightbulb_person_16_regular = "\uf07f";
+ public const string lightbulb_person_20_regular = "\uf080";
+ public const string lightbulb_person_24_regular = "\uf081";
+ public const string lightbulb_person_28_regular = "\uf082";
+ public const string lightbulb_person_32_regular = "\uf083";
+ public const string lightbulb_person_48_regular = "\uf084";
+ public const string likert_16_regular = "\uf4dd";
+ public const string likert_20_regular = "\uf4de";
+ public const string likert_24_regular = "\uf4df";
+ public const string line_20_regular = "\ue765";
+ public const string line_24_regular = "\ue766";
+ public const string line_32_regular = "\ue767";
+ public const string line_48_regular = "\ue768";
+ public const string line_dashes_20_regular = "\ue769";
+ public const string line_dashes_24_regular = "\ue76a";
+ public const string line_dashes_32_regular = "\ue76b";
+ public const string line_dashes_48_regular = "\ue76c";
+ public const string line_flow_diagonal_up_right_16_regular = "\U000f0533";
+ public const string line_flow_diagonal_up_right_20_regular = "\U000f0534";
+ public const string line_flow_diagonal_up_right_24_regular = "\U000f0535";
+ public const string line_flow_diagonal_up_right_32_regular = "\U000f0536";
+ public const string line_horizontal_1_16_regular = "\U000f02b7";
+ public const string line_horizontal_1_20_regular = "\uf4e0";
+ public const string line_horizontal_1_24_regular = "\U000f02b8";
+ public const string line_horizontal_1_28_regular = "\U000f02b9";
+ public const string line_horizontal_1_dashes_16_regular = "\U000f02ba";
+ public const string line_horizontal_1_dashes_20_regular = "\U000f02bb";
+ public const string line_horizontal_1_dashes_24_regular = "\U000f02bc";
+ public const string line_horizontal_1_dashes_28_regular = "\U000f02bd";
+ public const string line_horizontal_2_dashes_solid_16_regular = "\U000f02be";
+ public const string line_horizontal_2_dashes_solid_20_regular = "\U000f02bf";
+ public const string line_horizontal_2_dashes_solid_24_regular = "\U000f02c0";
+ public const string line_horizontal_2_dashes_solid_28_regular = "\U000f02c1";
+ public const string line_horizontal_3_20_regular = "\uf4e1";
+ public const string line_horizontal_4_16_regular = "\U000f012b";
+ public const string line_horizontal_4_20_regular = "\U000f005f";
+ public const string line_horizontal_4_search_16_regular = "\U000f012c";
+ public const string line_horizontal_4_search_20_regular = "\U000f0060";
+ public const string line_horizontal_5_20_regular = "\uf4e2";
+ public const string line_horizontal_5_error_20_regular = "\ue76d";
+ public const string line_style_20_regular = "\ue76e";
+ public const string line_style_24_regular = "\ue76f";
+ public const string line_thickness_20_regular = "\U000f0061";
+ public const string line_thickness_24_regular = "\U000f0062";
+ public const string link_12_regular = "\ue770";
+ public const string link_16_regular = "\uf4e3";
+ public const string link_20_regular = "\uf4e4";
+ public const string link_24_regular = "\uf4e5";
+ public const string link_28_regular = "\uf4e6";
+ public const string link_32_regular = "\ue771";
+ public const string link_48_regular = "\uf4e7";
+ public const string link_add_16_regular = "\U000f0405";
+ public const string link_add_20_regular = "\U000f0406";
+ public const string link_add_24_regular = "\U000f021d";
+ public const string link_dismiss_16_regular = "\ue772";
+ public const string link_dismiss_20_regular = "\ue773";
+ public const string link_dismiss_24_regular = "\ue774";
+ public const string link_edit_16_regular = "\uf4e8";
+ public const string link_edit_20_regular = "\uf4e9";
+ public const string link_edit_24_regular = "\uf4ea";
+ public const string link_multiple_16_regular = "\U000f0276";
+ public const string link_multiple_20_regular = "\U000f0277";
+ public const string link_multiple_24_regular = "\U000f0278";
+ public const string link_person_16_regular = "\U000f03ba";
+ public const string link_person_20_regular = "\U000f03bb";
+ public const string link_person_24_regular = "\U000f03bc";
+ public const string link_person_32_regular = "\U000f03bd";
+ public const string link_person_48_regular = "\U000f03be";
+ public const string link_settings_24_regular = "\U000f021e";
+ public const string link_square_12_regular = "\ue775";
+ public const string link_square_16_regular = "\ue776";
+ public const string link_square_20_regular = "\ue777";
+ public const string link_square_24_regular = "\uf4ec";
+ public const string link_toolbox_20_regular = "\ue778";
+ public const string list_16_regular = "\ue779";
+ public const string list_20_regular = "\uf4ed";
+ public const string list_24_regular = "\uf4ee";
+ public const string list_28_regular = "\uf4ef";
+ public const string list_bar_16_regular = "\U000f0191";
+ public const string list_bar_20_regular = "\U000f0192";
+ public const string list_bar_tree_16_regular = "\U000f0193";
+ public const string list_bar_tree_20_regular = "\U000f0194";
+ public const string list_bar_tree_offset_16_regular = "\U000f0195";
+ public const string list_bar_tree_offset_20_regular = "\U000f0196";
+ public const string list_rtl_16_regular = "\U000f0197";
+ public const string list_rtl_20_regular = "\U000f0198";
+ public const string live_20_regular = "\uf4f0";
+ public const string live_24_regular = "\uf4f1";
+ public const string live_off_20_regular = "\ue77a";
+ public const string live_off_24_regular = "\ue77b";
+ public const string local_language_16_regular = "\uf4f2";
+ public const string local_language_20_regular = "\uf4f3";
+ public const string local_language_24_regular = "\uf4f4";
+ public const string local_language_28_regular = "\uf4f5";
+ public const string location_12_regular = "\uf4f6";
+ public const string location_16_regular = "\uf4f7";
+ public const string location_20_regular = "\uf4f8";
+ public const string location_24_regular = "\uf4f9";
+ public const string location_28_regular = "\uf4fa";
+ public const string location_48_regular = "\ue77c";
+ public const string location_add_16_regular = "\ue77d";
+ public const string location_add_20_regular = "\ue77e";
+ public const string location_add_24_regular = "\ue77f";
+ public const string location_add_left_20_regular = "\ue780";
+ public const string location_add_right_20_regular = "\ue781";
+ public const string location_add_up_20_regular = "\ue782";
+ public const string location_arrow_12_regular = "\U000f0063";
+ public const string location_arrow_16_regular = "\U000f0064";
+ public const string location_arrow_20_regular = "\U000f0065";
+ public const string location_arrow_24_regular = "\U000f0066";
+ public const string location_arrow_28_regular = "\U000f0067";
+ public const string location_arrow_32_regular = "\U000f0068";
+ public const string location_arrow_48_regular = "\U000f0069";
+ public const string location_arrow_left_16_regular = "\U000f006a";
+ public const string location_arrow_left_48_regular = "\ue783";
+ public const string location_arrow_right_16_regular = "\U000f006b";
+ public const string location_arrow_right_48_regular = "\ue784";
+ public const string location_arrow_up_16_regular = "\U000f006c";
+ public const string location_arrow_up_48_regular = "\ue785";
+ public const string location_dismiss_20_regular = "\ue786";
+ public const string location_dismiss_24_regular = "\ue787";
+ public const string location_live_20_regular = "\uf4fb";
+ public const string location_live_24_regular = "\uf4fc";
+ public const string location_off_16_regular = "\ue788";
+ public const string location_off_20_regular = "\ue789";
+ public const string location_off_24_regular = "\ue78a";
+ public const string location_off_28_regular = "\ue78b";
+ public const string location_off_48_regular = "\ue78c";
+ public const string location_ripple_12_regular = "\U000f05cb";
+ public const string location_ripple_16_regular = "\U000f056e";
+ public const string location_ripple_20_regular = "\U000f056f";
+ public const string location_ripple_24_regular = "\U000f0570";
+ public const string location_target_square_16_regular = "\U000f04b0";
+ public const string location_target_square_20_regular = "\U000f04b1";
+ public const string location_target_square_24_regular = "\U000f04b2";
+ public const string location_target_square_32_regular = "\U000f04b3";
+ public const string lock_closed_12_regular = "\ue78d";
+ public const string lock_closed_16_regular = "\ue78e";
+ public const string lock_closed_20_regular = "\ue78f";
+ public const string lock_closed_24_regular = "\ue790";
+ public const string lock_closed_28_regular = "\U000f021f";
+ public const string lock_closed_32_regular = "\ue791";
+ public const string lock_closed_48_regular = "\U000f0220";
+ public const string lock_closed_key_16_regular = "\U000f00df";
+ public const string lock_closed_key_20_regular = "\U000f00e0";
+ public const string lock_closed_key_24_regular = "\U000f00e1";
+ public const string lock_multiple_20_regular = "\ue792";
+ public const string lock_multiple_24_regular = "\ue793";
+ public const string lock_open_12_regular = "\U000f0221";
+ public const string lock_open_16_regular = "\ue794";
+ public const string lock_open_20_regular = "\ue795";
+ public const string lock_open_24_regular = "\ue796";
+ public const string lock_open_28_regular = "\ue797";
+ public const string lock_open_32_regular = "\U000f0222";
+ public const string lock_open_48_regular = "\U000f0223";
+ public const string lock_shield_16_regular = "\U000f0407";
+ public const string lock_shield_20_regular = "\uf502";
+ public const string lock_shield_24_regular = "\uf503";
+ public const string lock_shield_28_regular = "\U000f0408";
+ public const string lock_shield_32_regular = "\U000f0409";
+ public const string lock_shield_48_regular = "\uf504";
+ public const string lottery_20_regular = "\ue798";
+ public const string lottery_24_regular = "\ue799";
+ public const string luggage_16_regular = "\ue79a";
+ public const string luggage_20_regular = "\ue79b";
+ public const string luggage_24_regular = "\ue79c";
+ public const string luggage_28_regular = "\ue79d";
+ public const string luggage_32_regular = "\ue79e";
+ public const string luggage_48_regular = "\ue79f";
+ public const string mail_12_regular = "\ue7a0";
+ public const string mail_16_regular = "\ue7a1";
+ public const string mail_20_regular = "\uf506";
+ public const string mail_24_regular = "\uf507";
+ public const string mail_28_regular = "\uf508";
+ public const string mail_32_regular = "\U000f01f3";
+ public const string mail_48_regular = "\uf509";
+ public const string mail_add_16_regular = "\uf50d";
+ public const string mail_add_20_regular = "\uf51f";
+ public const string mail_add_24_regular = "\uf50a";
+ public const string mail_alert_16_regular = "\uf520";
+ public const string mail_alert_20_regular = "\uf52a";
+ public const string mail_alert_24_regular = "\uf52b";
+ public const string mail_alert_28_regular = "\ue7a2";
+ public const string mail_alert_32_regular = "\U000f05f1";
+ public const string mail_all_read_16_regular = "\ue7a3";
+ public const string mail_all_read_20_regular = "\uf50e";
+ public const string mail_all_read_24_regular = "\ue7a4";
+ public const string mail_all_read_28_regular = "\ue7a5";
+ public const string mail_all_unread_20_regular = "\uf50f";
+ public const string mail_arrow_clockwise_16_regular = "\U000f0537";
+ public const string mail_arrow_clockwise_20_regular = "\U000f0538";
+ public const string mail_arrow_clockwise_24_regular = "\U000f0539";
+ public const string mail_arrow_clockwise_32_regular = "\U000f05f2";
+ public const string mail_arrow_double_back_16_regular = "\ue7a6";
+ public const string mail_arrow_double_back_20_regular = "\ue7a7";
+ public const string mail_arrow_double_back_24_regular = "\U000f006d";
+ public const string mail_arrow_double_back_32_regular = "\U000f0571";
+ public const string mail_arrow_down_16_regular = "\uf52c";
+ public const string mail_arrow_down_20_regular = "\ue7a8";
+ public const string mail_arrow_forward_16_regular = "\ue7a9";
+ public const string mail_arrow_forward_20_regular = "\ue7aa";
+ public const string mail_arrow_up_16_regular = "\ue7ab";
+ public const string mail_arrow_up_20_regular = "\uf52d";
+ public const string mail_arrow_up_24_regular = "\uf54b";
+ public const string mail_attach_16_regular = "\ue7ac";
+ public const string mail_attach_20_regular = "\ue7ad";
+ public const string mail_attach_24_regular = "\ue7ae";
+ public const string mail_attach_28_regular = "\ue7af";
+ public const string mail_briefcase_48_regular = "\U000f0572";
+ public const string mail_checkmark_16_regular = "\uf54c";
+ public const string mail_checkmark_20_regular = "\ue7b0";
+ public const string mail_checkmark_24_regular = "\U000f006e";
+ public const string mail_clock_16_regular = "\uf551";
+ public const string mail_clock_20_regular = "\uf510";
+ public const string mail_clock_24_regular = "\uf552";
+ public const string mail_copy_20_regular = "\uf511";
+ public const string mail_copy_24_regular = "\uf512";
+ public const string mail_copy_32_regular = "\U000f05d9";
+ public const string mail_dismiss_16_regular = "\ue7b1";
+ public const string mail_dismiss_20_regular = "\uf553";
+ public const string mail_dismiss_24_regular = "\uf554";
+ public const string mail_dismiss_28_regular = "\ue7b2";
+ public const string mail_edit_20_regular = "\ue7b3";
+ public const string mail_edit_24_regular = "\ue7b4";
+ public const string mail_edit_32_regular = "\U000f05ad";
+ public const string mail_error_16_regular = "\ue7b5";
+ public const string mail_error_20_regular = "\uf555";
+ public const string mail_error_24_regular = "\uf55d";
+ public const string mail_inbox_16_regular = "\uf513";
+ public const string mail_inbox_20_regular = "\uf514";
+ public const string mail_inbox_24_regular = "\uf515";
+ public const string mail_inbox_28_regular = "\uf516";
+ public const string mail_inbox_add_16_regular = "\uf517";
+ public const string mail_inbox_add_20_regular = "\uf518";
+ public const string mail_inbox_add_24_regular = "\uf519";
+ public const string mail_inbox_add_28_regular = "\uf51a";
+ public const string mail_inbox_all_20_regular = "\ue7b6";
+ public const string mail_inbox_all_24_regular = "\ue7b7";
+ public const string mail_inbox_arrow_down_16_regular = "\uf55e";
+ public const string mail_inbox_arrow_down_20_regular = "\ue7b8";
+ public const string mail_inbox_arrow_right_20_regular = "\ue7b9";
+ public const string mail_inbox_arrow_right_24_regular = "\ue7ba";
+ public const string mail_inbox_arrow_up_20_regular = "\ue7bb";
+ public const string mail_inbox_arrow_up_24_regular = "\ue7bc";
+ public const string mail_inbox_checkmark_16_regular = "\ue7bd";
+ public const string mail_inbox_checkmark_20_regular = "\ue7be";
+ public const string mail_inbox_checkmark_24_regular = "\ue7bf";
+ public const string mail_inbox_checkmark_28_regular = "\ue7c0";
+ public const string mail_inbox_dismiss_16_regular = "\uf51b";
+ public const string mail_inbox_dismiss_20_regular = "\uf51c";
+ public const string mail_inbox_dismiss_24_regular = "\uf51d";
+ public const string mail_inbox_dismiss_28_regular = "\uf51e";
+ public const string mail_link_20_regular = "\uf585";
+ public const string mail_link_24_regular = "\uf58c";
+ public const string mail_list_16_regular = "\ue7c1";
+ public const string mail_list_20_regular = "\ue7c2";
+ public const string mail_list_24_regular = "\ue7c3";
+ public const string mail_list_28_regular = "\ue7c4";
+ public const string mail_multiple_16_regular = "\ue7c5";
+ public const string mail_multiple_20_regular = "\ue7c6";
+ public const string mail_multiple_24_regular = "\ue7c7";
+ public const string mail_multiple_28_regular = "\ue7c8";
+ public const string mail_multiple_32_regular = "\U000f0447";
+ public const string mail_off_16_regular = "\U000f0279";
+ public const string mail_off_20_regular = "\ue7c9";
+ public const string mail_off_24_regular = "\ue7ca";
+ public const string mail_open_person_16_regular = "\ue7cb";
+ public const string mail_open_person_20_regular = "\ue7cc";
+ public const string mail_open_person_24_regular = "\ue7cd";
+ public const string mail_pause_16_regular = "\uf5a6";
+ public const string mail_pause_20_regular = "\ue7ce";
+ public const string mail_prohibited_16_regular = "\ue7cf";
+ public const string mail_prohibited_20_regular = "\uf5cb";
+ public const string mail_prohibited_24_regular = "\uf5e2";
+ public const string mail_prohibited_28_regular = "\ue7d0";
+ public const string mail_read_16_regular = "\ue7d1";
+ public const string mail_read_20_regular = "\uf521";
+ public const string mail_read_24_regular = "\uf522";
+ public const string mail_read_28_regular = "\uf523";
+ public const string mail_read_32_regular = "\U000f0448";
+ public const string mail_read_48_regular = "\uf524";
+ public const string mail_read_briefcase_48_regular = "\U000f058d";
+ public const string mail_read_multiple_20_regular = "\ueeab";
+ public const string mail_read_multiple_32_regular = "\ueeac";
+ public const string mail_rewind_16_regular = "\U000f030a";
+ public const string mail_rewind_20_regular = "\U000f030b";
+ public const string mail_rewind_24_regular = "\U000f030c";
+ public const string mail_settings_16_regular = "\uf5e3";
+ public const string mail_settings_20_regular = "\ue7d5";
+ public const string mail_shield_16_regular = "\uf5e8";
+ public const string mail_shield_20_regular = "\ue7d6";
+ public const string mail_template_16_regular = "\ue7d7";
+ public const string mail_template_20_regular = "\uf5e9";
+ public const string mail_template_24_regular = "\uf5ed";
+ public const string mail_unread_12_regular = "\U000f006f";
+ public const string mail_unread_16_regular = "\uf525";
+ public const string mail_unread_20_regular = "\uf526";
+ public const string mail_unread_24_regular = "\uf527";
+ public const string mail_unread_28_regular = "\uf528";
+ public const string mail_unread_32_regular = "\U000f0449";
+ public const string mail_unread_48_regular = "\uf529";
+ public const string mail_warning_16_regular = "\uf5ee";
+ public const string mail_warning_20_regular = "\ue7d8";
+ public const string mail_warning_24_regular = "\ue7d9";
+ public const string mailbox_16_regular = "\U000f044a";
+ public const string mailbox_20_regular = "\U000f044b";
+ public const string map_16_regular = "\U000f0070";
+ public const string map_20_regular = "\ue7da";
+ public const string map_24_regular = "\uf52e";
+ public const string map_drive_16_regular = "\uf52f";
+ public const string map_drive_20_regular = "\uf530";
+ public const string map_drive_24_regular = "\uf531";
+ public const string markdown_20_regular = "\ue7db";
+ public const string match_app_layout_20_regular = "\ue7dc";
+ public const string match_app_layout_24_regular = "\uf532";
+ public const string math_format_linear_20_regular = "\ue7dd";
+ public const string math_format_linear_24_regular = "\ue7de";
+ public const string math_format_professional_16_regular = "\U000f012d";
+ public const string math_format_professional_20_regular = "\ue7df";
+ public const string math_format_professional_24_regular = "\ue7e0";
+ public const string math_formula_16_regular = "\ue7e1";
+ public const string math_formula_20_regular = "\ue7e2";
+ public const string math_formula_24_regular = "\ue7e3";
+ public const string math_formula_32_regular = "\ue7e4";
+ public const string math_symbols_16_regular = "\ue7e5";
+ public const string math_symbols_20_regular = "\ue7e6";
+ public const string math_symbols_24_regular = "\ue7e7";
+ public const string math_symbols_28_regular = "\ue7e8";
+ public const string math_symbols_32_regular = "\ue7e9";
+ public const string math_symbols_48_regular = "\ue7ea";
+ public const string maximize_16_regular = "\uf533";
+ public const string maximize_20_regular = "\ue7eb";
+ public const string maximize_24_regular = "\ue7ec";
+ public const string maximize_28_regular = "\ue7ed";
+ public const string maximize_48_regular = "\ue7ee";
+ public const string meet_now_16_regular = "\ue7ef";
+ public const string meet_now_20_regular = "\uf534";
+ public const string meet_now_24_regular = "\uf535";
+ public const string meet_now_28_regular = "\uf5f6";
+ public const string meet_now_32_regular = "\uf5f7";
+ public const string meet_now_48_regular = "\uf631";
+ public const string megaphone_16_regular = "\uf536";
+ public const string megaphone_20_regular = "\uf537";
+ public const string megaphone_24_regular = "\uf538";
+ public const string megaphone_28_regular = "\uf539";
+ public const string megaphone_circle_20_regular = "\uef77";
+ public const string megaphone_circle_24_regular = "\uef78";
+ public const string megaphone_loud_16_regular = "\ueead";
+ public const string megaphone_loud_20_regular = "\uf64b";
+ public const string megaphone_loud_24_regular = "\ue7f0";
+ public const string megaphone_loud_28_regular = "\uf085";
+ public const string megaphone_loud_32_regular = "\uf086";
+ public const string megaphone_off_16_regular = "\ue7f1";
+ public const string megaphone_off_20_regular = "\ue7f2";
+ public const string megaphone_off_24_regular = "\uf53a";
+ public const string megaphone_off_28_regular = "\ue7f3";
+ public const string memory_16_regular = "\uf0f0";
+ public const string mention_12_regular = "\ueff0";
+ public const string mention_16_regular = "\uf53b";
+ public const string mention_20_regular = "\uf53c";
+ public const string mention_24_regular = "\uf53d";
+ public const string mention_32_regular = "\U000f0071";
+ public const string mention_48_regular = "\U000f0072";
+ public const string mention_arrow_down_20_regular = "\ue7f4";
+ public const string mention_brackets_20_regular = "\ue7f5";
+ public const string merge_16_regular = "\ue7f6";
+ public const string merge_20_regular = "\ue7f7";
+ public const string merge_24_regular = "\uf53e";
+ public const string mic_16_regular = "\ue7f8";
+ public const string mic_20_regular = "\ue7f9";
+ public const string mic_24_regular = "\ue7fa";
+ public const string mic_28_regular = "\ue7fb";
+ public const string mic_32_regular = "\ue7fc";
+ public const string mic_48_regular = "\ue7fd";
+ public const string mic_off_12_regular = "\uf53f";
+ public const string mic_off_16_regular = "\uf540";
+ public const string mic_off_20_regular = "\ue7fe";
+ public const string mic_off_24_regular = "\uf541";
+ public const string mic_off_28_regular = "\uf542";
+ public const string mic_off_32_regular = "\ue7ff";
+ public const string mic_off_48_regular = "\ue800";
+ public const string mic_prohibited_16_regular = "\ue801";
+ public const string mic_prohibited_20_regular = "\ue802";
+ public const string mic_prohibited_24_regular = "\ue803";
+ public const string mic_prohibited_28_regular = "\ue804";
+ public const string mic_prohibited_48_regular = "\ue805";
+ public const string mic_pulse_16_regular = "\ue806";
+ public const string mic_pulse_20_regular = "\ue807";
+ public const string mic_pulse_24_regular = "\ue808";
+ public const string mic_pulse_28_regular = "\ue809";
+ public const string mic_pulse_32_regular = "\ue80a";
+ public const string mic_pulse_48_regular = "\ue80b";
+ public const string mic_pulse_off_16_regular = "\ue80c";
+ public const string mic_pulse_off_20_regular = "\ue80d";
+ public const string mic_pulse_off_24_regular = "\ue80e";
+ public const string mic_pulse_off_28_regular = "\ue80f";
+ public const string mic_pulse_off_32_regular = "\ue810";
+ public const string mic_pulse_off_48_regular = "\ue811";
+ public const string mic_record_20_regular = "\U000f02c2";
+ public const string mic_record_24_regular = "\U000f02c3";
+ public const string mic_record_28_regular = "\U000f02c4";
+ public const string mic_settings_20_regular = "\ue812";
+ public const string mic_settings_24_regular = "\uf548";
+ public const string mic_sparkle_16_regular = "\ue813";
+ public const string mic_sparkle_20_regular = "\ue814";
+ public const string mic_sparkle_24_regular = "\ue815";
+ public const string mic_sync_20_regular = "\ue816";
+ public const string microscope_20_regular = "\uf64c";
+ public const string microscope_24_regular = "\uf64f";
+ public const string midi_20_regular = "\uf549";
+ public const string midi_24_regular = "\uf54a";
+ public const string mobile_optimized_20_regular = "\ue817";
+ public const string mobile_optimized_24_regular = "\uf54d";
+ public const string mold_20_regular = "\U000f012e";
+ public const string mold_24_regular = "\U000f012f";
+ public const string mold_28_regular = "\U000f0130";
+ public const string molecule_16_regular = "\uf650";
+ public const string molecule_20_regular = "\uf659";
+ public const string molecule_24_regular = "\uf65a";
+ public const string molecule_28_regular = "\uf65d";
+ public const string molecule_32_regular = "\uf65e";
+ public const string molecule_48_regular = "\uf65f";
+ public const string money_16_regular = "\uf54e";
+ public const string money_20_regular = "\uf54f";
+ public const string money_24_regular = "\uf550";
+ public const string money_calculator_20_regular = "\ue818";
+ public const string money_calculator_24_regular = "\ue819";
+ public const string money_dismiss_20_regular = "\ue81a";
+ public const string money_dismiss_24_regular = "\ue81b";
+ public const string money_hand_16_regular = "\U000f01dc";
+ public const string money_hand_20_regular = "\ue81c";
+ public const string money_hand_24_regular = "\ue81d";
+ public const string money_off_20_regular = "\ue81e";
+ public const string money_off_24_regular = "\ue81f";
+ public const string money_settings_16_regular = "\U000f01dd";
+ public const string money_settings_20_regular = "\ue820";
+ public const string money_settings_24_regular = "\U000f01de";
+ public const string more_circle_16_regular = "\uf0f1";
+ public const string more_circle_20_regular = "\ue821";
+ public const string more_circle_24_regular = "\uf0f2";
+ public const string more_circle_28_regular = "\uf0f3";
+ public const string more_circle_32_regular = "\ue822";
+ public const string more_circle_48_regular = "\uf0f4";
+ public const string more_horizontal_16_regular = "\ue823";
+ public const string more_horizontal_24_regular = "\ue825";
+ public const string more_horizontal_28_regular = "\ue826";
+ public const string more_horizontal_32_regular = "\ue827";
+ public const string more_horizontal_48_regular = "\ue828";
+ public const string more_vertical_16_regular = "\ue829";
+ public const string more_vertical_20_regular = "\uf556";
+ public const string more_vertical_24_regular = "\uf557";
+ public const string more_vertical_28_regular = "\uf558";
+ public const string more_vertical_32_regular = "\ue82a";
+ public const string more_vertical_48_regular = "\uf559";
+ public const string mountain_location_bottom_20_regular = "\U000f00e2";
+ public const string mountain_location_bottom_24_regular = "\U000f00e3";
+ public const string mountain_location_bottom_28_regular = "\U000f00e4";
+ public const string mountain_location_top_20_regular = "\U000f00e5";
+ public const string mountain_location_top_24_regular = "\U000f00e6";
+ public const string mountain_location_top_28_regular = "\U000f00e7";
+ public const string mountain_trail_20_regular = "\U000f00e8";
+ public const string mountain_trail_24_regular = "\U000f00e9";
+ public const string mountain_trail_28_regular = "\U000f00ea";
+ public const string movies_and_tv_16_regular = "\ue82b";
+ public const string movies_and_tv_20_regular = "\ue82c";
+ public const string movies_and_tv_24_regular = "\uf55a";
+ public const string multiplier_1_2x_20_regular = "\ue82d";
+ public const string multiplier_1_2x_24_regular = "\ue82e";
+ public const string multiplier_1_2x_28_regular = "\ue82f";
+ public const string multiplier_1_2x_32_regular = "\ue830";
+ public const string multiplier_1_2x_48_regular = "\ue831";
+ public const string multiplier_1_5x_20_regular = "\ue832";
+ public const string multiplier_1_5x_24_regular = "\ue833";
+ public const string multiplier_1_5x_28_regular = "\ue834";
+ public const string multiplier_1_5x_32_regular = "\ue835";
+ public const string multiplier_1_5x_48_regular = "\ue836";
+ public const string multiplier_1_8x_20_regular = "\ue837";
+ public const string multiplier_1_8x_24_regular = "\ue838";
+ public const string multiplier_1_8x_28_regular = "\ue839";
+ public const string multiplier_1_8x_32_regular = "\ue83a";
+ public const string multiplier_1_8x_48_regular = "\ue83b";
+ public const string multiplier_1x_20_regular = "\ue83c";
+ public const string multiplier_1x_24_regular = "\ue83d";
+ public const string multiplier_1x_28_regular = "\ue83e";
+ public const string multiplier_1x_32_regular = "\ue83f";
+ public const string multiplier_1x_48_regular = "\ue840";
+ public const string multiplier_2x_20_regular = "\ue841";
+ public const string multiplier_2x_24_regular = "\ue842";
+ public const string multiplier_2x_28_regular = "\ue843";
+ public const string multiplier_2x_32_regular = "\ue844";
+ public const string multiplier_2x_48_regular = "\ue845";
+ public const string multiplier_5x_20_regular = "\ue846";
+ public const string multiplier_5x_24_regular = "\ue847";
+ public const string multiplier_5x_28_regular = "\ue848";
+ public const string multiplier_5x_32_regular = "\ue849";
+ public const string multiplier_5x_48_regular = "\ue84a";
+ public const string multiselect_ltr_16_regular = "\ue84b";
+ public const string multiselect_ltr_20_regular = "\ue84c";
+ public const string multiselect_ltr_24_regular = "\ue84d";
+ public const string multiselect_rtl_16_regular = "\ue84e";
+ public const string multiselect_rtl_20_regular = "\ue84f";
+ public const string multiselect_rtl_24_regular = "\ue850";
+ public const string music_note_1_20_regular = "\ue851";
+ public const string music_note_1_24_regular = "\ue852";
+ public const string music_note_2_16_regular = "\ue853";
+ public const string music_note_2_20_regular = "\ue854";
+ public const string music_note_2_24_regular = "\ue855";
+ public const string music_note_2_play_20_regular = "\ue856";
+ public const string music_note_off_1_20_regular = "\ue857";
+ public const string music_note_off_1_24_regular = "\ue858";
+ public const string music_note_off_2_16_regular = "\ue859";
+ public const string music_note_off_2_20_regular = "\ue85a";
+ public const string music_note_off_2_24_regular = "\ue85b";
+ public const string my_location_12_regular = "\ue85c";
+ public const string my_location_16_regular = "\ue85d";
+ public const string my_location_20_regular = "\ue85e";
+ public const string my_location_24_regular = "\uf55f";
+ public const string navigation_16_regular = "\ue85f";
+ public const string navigation_24_regular = "\uf561";
+ public const string navigation_location_target_20_regular = "\ue860";
+ public const string navigation_play_20_regular = "\ue861";
+ public const string navigation_unread_20_regular = "\ue862";
+ public const string navigation_unread_24_regular = "\ue863";
+ public const string network_adapter_16_regular = "\uf0f5";
+ public const string network_check_20_regular = "\ue864";
+ public const string network_check_24_regular = "\uf562";
+ public const string new_16_regular = "\uf563";
+ public const string new_20_regular = "\ue865";
+ public const string new_24_regular = "\uf564";
+ public const string news_16_regular = "\ue866";
+ public const string news_20_regular = "\uf565";
+ public const string news_24_regular = "\uf566";
+ public const string news_28_regular = "\uf567";
+ public const string next_16_regular = "\uf568";
+ public const string next_20_regular = "\uf569";
+ public const string next_24_regular = "\uf56a";
+ public const string next_28_regular = "\ue867";
+ public const string next_32_regular = "\ue868";
+ public const string next_48_regular = "\ue869";
+ public const string next_frame_20_regular = "\U000f02dc";
+ public const string next_frame_24_regular = "\U000f02dd";
+ public const string note_16_regular = "\uf663";
+ public const string note_20_regular = "\uf56b";
+ public const string note_24_regular = "\uf56c";
+ public const string note_28_regular = "\ue86a";
+ public const string note_48_regular = "\ue86b";
+ public const string note_add_16_regular = "\uf56d";
+ public const string note_add_20_regular = "\uf56e";
+ public const string note_add_24_regular = "\uf56f";
+ public const string note_add_28_regular = "\ue86c";
+ public const string note_add_48_regular = "\ue86d";
+ public const string note_edit_20_regular = "\ue86e";
+ public const string note_edit_24_regular = "\ue86f";
+ public const string note_pin_16_regular = "\uf664";
+ public const string note_pin_20_regular = "\ue870";
+ public const string notebook_16_regular = "\uef09";
+ public const string notebook_20_regular = "\ue871";
+ public const string notebook_24_regular = "\uf570";
+ public const string notebook_32_regular = "\ueed9";
+ public const string notebook_add_20_regular = "\ue872";
+ public const string notebook_add_24_regular = "\ue873";
+ public const string notebook_arrow_curve_down_20_regular = "\ue874";
+ public const string notebook_error_20_regular = "\ue875";
+ public const string notebook_error_24_regular = "\uf571";
+ public const string notebook_eye_20_regular = "\ue876";
+ public const string notebook_lightning_20_regular = "\ue877";
+ public const string notebook_lightning_24_regular = "\uf572";
+ public const string notebook_question_mark_20_regular = "\ue878";
+ public const string notebook_question_mark_24_regular = "\uf573";
+ public const string notebook_section_20_regular = "\ue879";
+ public const string notebook_section_24_regular = "\uf574";
+ public const string notebook_section_arrow_right_20_regular = "\uef7c";
+ public const string notebook_section_arrow_right_24_regular = "\ue87a";
+ public const string notebook_subsection_20_regular = "\ue87b";
+ public const string notebook_subsection_24_regular = "\ue87c";
+ public const string notebook_sync_20_regular = "\ue87d";
+ public const string notebook_sync_24_regular = "\uf575";
+ public const string notepad_12_regular = "\ue87e";
+ public const string notepad_16_regular = "\uf665";
+ public const string notepad_20_regular = "\uf576";
+ public const string notepad_24_regular = "\uf577";
+ public const string notepad_28_regular = "\uf578";
+ public const string notepad_32_regular = "\ue87f";
+ public const string notepad_edit_16_regular = "\uf666";
+ public const string notepad_edit_20_regular = "\ue880";
+ public const string notepad_person_16_regular = "\ue881";
+ public const string notepad_person_20_regular = "\ue882";
+ public const string notepad_person_24_regular = "\ue883";
+ public const string notepad_sparkle_16_regular = "\U000f0600";
+ public const string notepad_sparkle_20_regular = "\U000f0601";
+ public const string notepad_sparkle_24_regular = "\U000f0602";
+ public const string notepad_sparkle_28_regular = "\U000f0603";
+ public const string notepad_sparkle_32_regular = "\U000f0604";
+ public const string number_circle_0_16_regular = "\U000f0342";
+ public const string number_circle_0_20_regular = "\U000f0343";
+ public const string number_circle_0_24_regular = "\U000f0344";
+ public const string number_circle_0_28_regular = "\U000f0345";
+ public const string number_circle_0_32_regular = "\U000f0346";
+ public const string number_circle_0_48_regular = "\U000f0347";
+ public const string number_circle_1_16_regular = "\ue884";
+ public const string number_circle_1_20_regular = "\ue885";
+ public const string number_circle_1_24_regular = "\ue886";
+ public const string number_circle_1_28_regular = "\U000f024b";
+ public const string number_circle_1_32_regular = "\U000f024c";
+ public const string number_circle_1_48_regular = "\U000f024d";
+ public const string number_circle_2_16_regular = "\U000f024e";
+ public const string number_circle_2_20_regular = "\U000f024f";
+ public const string number_circle_2_24_regular = "\U000f0250";
+ public const string number_circle_2_28_regular = "\U000f0251";
+ public const string number_circle_2_32_regular = "\U000f0252";
+ public const string number_circle_2_48_regular = "\U000f0253";
+ public const string number_circle_3_16_regular = "\U000f0254";
+ public const string number_circle_3_20_regular = "\U000f0255";
+ public const string number_circle_3_24_regular = "\U000f0256";
+ public const string number_circle_3_28_regular = "\U000f0257";
+ public const string number_circle_3_32_regular = "\U000f0258";
+ public const string number_circle_3_48_regular = "\U000f0259";
+ public const string number_circle_4_16_regular = "\U000f025a";
+ public const string number_circle_4_20_regular = "\U000f025b";
+ public const string number_circle_4_24_regular = "\U000f025c";
+ public const string number_circle_4_28_regular = "\U000f025d";
+ public const string number_circle_4_32_regular = "\U000f025e";
+ public const string number_circle_4_48_regular = "\U000f025f";
+ public const string number_circle_5_16_regular = "\U000f0260";
+ public const string number_circle_5_20_regular = "\U000f0261";
+ public const string number_circle_5_24_regular = "\U000f0262";
+ public const string number_circle_5_28_regular = "\U000f0263";
+ public const string number_circle_5_32_regular = "\U000f0264";
+ public const string number_circle_5_48_regular = "\U000f0265";
+ public const string number_circle_6_16_regular = "\U000f0348";
+ public const string number_circle_6_20_regular = "\U000f0349";
+ public const string number_circle_6_24_regular = "\U000f034a";
+ public const string number_circle_6_28_regular = "\U000f034b";
+ public const string number_circle_6_32_regular = "\U000f034c";
+ public const string number_circle_6_48_regular = "\U000f034d";
+ public const string number_circle_7_16_regular = "\U000f034e";
+ public const string number_circle_7_20_regular = "\U000f034f";
+ public const string number_circle_7_24_regular = "\U000f0350";
+ public const string number_circle_7_28_regular = "\U000f0351";
+ public const string number_circle_7_32_regular = "\U000f0352";
+ public const string number_circle_7_48_regular = "\U000f0353";
+ public const string number_circle_8_16_regular = "\U000f0354";
+ public const string number_circle_8_20_regular = "\U000f0355";
+ public const string number_circle_8_24_regular = "\U000f0356";
+ public const string number_circle_8_28_regular = "\U000f0357";
+ public const string number_circle_8_32_regular = "\U000f0358";
+ public const string number_circle_8_48_regular = "\U000f0359";
+ public const string number_circle_9_16_regular = "\U000f035a";
+ public const string number_circle_9_20_regular = "\U000f035b";
+ public const string number_circle_9_24_regular = "\U000f035c";
+ public const string number_circle_9_28_regular = "\U000f035d";
+ public const string number_circle_9_32_regular = "\U000f035e";
+ public const string number_circle_9_48_regular = "\U000f035f";
+ public const string number_row_16_regular = "\uf579";
+ public const string number_row_20_regular = "\uf57a";
+ public const string number_row_24_regular = "\uf57b";
+ public const string number_symbol_16_regular = "\uf57c";
+ public const string number_symbol_20_regular = "\uf57d";
+ public const string number_symbol_24_regular = "\uf57e";
+ public const string number_symbol_28_regular = "\ue887";
+ public const string number_symbol_32_regular = "\ue888";
+ public const string number_symbol_48_regular = "\ue889";
+ public const string number_symbol_dismiss_20_regular = "\ue88a";
+ public const string number_symbol_dismiss_24_regular = "\ue88b";
+ public const string number_symbol_square_20_regular = "\ue88c";
+ public const string number_symbol_square_24_regular = "\ue88d";
+ public const string open_12_regular = "\U000f02c5";
+ public const string open_16_regular = "\uf581";
+ public const string open_20_regular = "\uf582";
+ public const string open_24_regular = "\uf583";
+ public const string open_28_regular = "\ue88e";
+ public const string open_32_regular = "\uf667";
+ public const string open_48_regular = "\ue88f";
+ public const string open_folder_16_regular = "\ue890";
+ public const string open_folder_20_regular = "\ue891";
+ public const string open_folder_24_regular = "\uf584";
+ public const string open_folder_28_regular = "\ue892";
+ public const string open_folder_48_regular = "\ue893";
+ public const string open_off_16_regular = "\ue894";
+ public const string open_off_20_regular = "\ue895";
+ public const string open_off_24_regular = "\ue896";
+ public const string open_off_28_regular = "\ue897";
+ public const string open_off_48_regular = "\ue898";
+ public const string options_16_regular = "\uf586";
+ public const string options_20_regular = "\uf587";
+ public const string options_24_regular = "\uf588";
+ public const string options_28_regular = "\U000f0573";
+ public const string options_32_regular = "\U000f0574";
+ public const string options_48_regular = "\ue899";
+ public const string organization_12_regular = "\ue89a";
+ public const string organization_16_regular = "\ue89b";
+ public const string organization_20_regular = "\uf589";
+ public const string organization_24_regular = "\uf58a";
+ public const string organization_28_regular = "\uf58b";
+ public const string organization_32_regular = "\ue89c";
+ public const string organization_48_regular = "\ue89d";
+ public const string organization_horizontal_16_regular = "\U000f044c";
+ public const string organization_horizontal_20_regular = "\ue89e";
+ public const string organization_horizontal_24_regular = "\U000f044d";
+ public const string orientation_20_regular = "\ue89f";
+ public const string orientation_24_regular = "\ue8a0";
+ public const string oval_16_regular = "\ue8a1";
+ public const string oval_20_regular = "\ue8a2";
+ public const string oval_24_regular = "\ue8a3";
+ public const string oval_28_regular = "\ue8a4";
+ public const string oval_32_regular = "\ue8a5";
+ public const string oval_48_regular = "\ue8a6";
+ public const string oven_20_regular = "\ueff1";
+ public const string oven_24_regular = "\ueff2";
+ public const string oven_32_regular = "\ueff3";
+ public const string oven_48_regular = "\ueff4";
+ public const string padding_down_20_regular = "\uf681";
+ public const string padding_down_24_regular = "\uf682";
+ public const string padding_left_20_regular = "\uf695";
+ public const string padding_left_24_regular = "\uf69e";
+ public const string padding_right_20_regular = "\uf69f";
+ public const string padding_right_24_regular = "\uf6a0";
+ public const string padding_top_20_regular = "\uf6b4";
+ public const string padding_top_24_regular = "\uf6b9";
+ public const string page_fit_16_regular = "\uf58e";
+ public const string page_fit_20_regular = "\uf58f";
+ public const string page_fit_24_regular = "\uf590";
+ public const string paint_brush_16_regular = "\uf591";
+ public const string paint_brush_20_regular = "\uf592";
+ public const string paint_brush_24_regular = "\uf593";
+ public const string paint_brush_28_regular = "\U000f0605";
+ public const string paint_brush_32_regular = "\U000f0224";
+ public const string paint_brush_arrow_down_20_regular = "\ue8a7";
+ public const string paint_brush_arrow_down_24_regular = "\ue8a8";
+ public const string paint_brush_arrow_up_20_regular = "\ue8a9";
+ public const string paint_brush_arrow_up_24_regular = "\ue8aa";
+ public const string paint_brush_sparkle_20_regular = "\U000f05da";
+ public const string paint_brush_sparkle_24_regular = "\U000f05db";
+ public const string paint_brush_subtract_16_regular = "\U000f0606";
+ public const string paint_brush_subtract_20_regular = "\U000f0607";
+ public const string paint_brush_subtract_24_regular = "\U000f0608";
+ public const string paint_brush_subtract_28_regular = "\U000f0609";
+ public const string paint_brush_subtract_32_regular = "\U000f060a";
+ public const string paint_bucket_16_regular = "\uf594";
+ public const string paint_bucket_20_regular = "\uf595";
+ public const string paint_bucket_24_regular = "\uf596";
+ public const string pair_20_regular = "\ue8ab";
+ public const string pair_24_regular = "\uf597";
+ public const string panel_bottom_20_regular = "\ue8ac";
+ public const string panel_bottom_contract_20_regular = "\ue8ad";
+ public const string panel_bottom_expand_20_regular = "\ue8ae";
+ public const string panel_left_16_regular = "\ue8af";
+ public const string panel_left_20_regular = "\ue8b0";
+ public const string panel_left_24_regular = "\ue8b1";
+ public const string panel_left_28_regular = "\ue8b2";
+ public const string panel_left_32_regular = "\ueff6";
+ public const string panel_left_48_regular = "\ue8b3";
+ public const string panel_left_add_16_regular = "\ueff7";
+ public const string panel_left_add_20_regular = "\ueff8";
+ public const string panel_left_add_24_regular = "\ueff9";
+ public const string panel_left_add_28_regular = "\ueffa";
+ public const string panel_left_add_32_regular = "\ueffb";
+ public const string panel_left_add_48_regular = "\ueffc";
+ public const string panel_left_contract_16_regular = "\ue8b4";
+ public const string panel_left_contract_20_regular = "\ue8b5";
+ public const string panel_left_contract_24_regular = "\ue8b6";
+ public const string panel_left_contract_28_regular = "\ue8b7";
+ public const string panel_left_expand_16_regular = "\ue8b8";
+ public const string panel_left_expand_20_regular = "\ue8b9";
+ public const string panel_left_expand_24_regular = "\ue8ba";
+ public const string panel_left_expand_28_regular = "\ue8bb";
+ public const string panel_left_header_16_regular = "\U000f0073";
+ public const string panel_left_header_20_regular = "\U000f0074";
+ public const string panel_left_header_24_regular = "\U000f0075";
+ public const string panel_left_header_28_regular = "\U000f0076";
+ public const string panel_left_header_32_regular = "\U000f0077";
+ public const string panel_left_header_48_regular = "\U000f0078";
+ public const string panel_left_header_add_16_regular = "\U000f0079";
+ public const string panel_left_header_add_20_regular = "\U000f007a";
+ public const string panel_left_header_add_24_regular = "\U000f007b";
+ public const string panel_left_header_add_28_regular = "\U000f007c";
+ public const string panel_left_header_add_32_regular = "\U000f007d";
+ public const string panel_left_header_add_48_regular = "\U000f007e";
+ public const string panel_left_header_key_16_regular = "\U000f007f";
+ public const string panel_left_header_key_20_regular = "\U000f0080";
+ public const string panel_left_header_key_24_regular = "\U000f0081";
+ public const string panel_left_key_16_regular = "\ueffd";
+ public const string panel_left_key_20_regular = "\ueffe";
+ public const string panel_left_key_24_regular = "\uefff";
+ public const string panel_left_text_16_regular = "\U000f0199";
+ public const string panel_left_text_20_regular = "\U000f019a";
+ public const string panel_left_text_24_regular = "\U000f019b";
+ public const string panel_left_text_28_regular = "\U000f019c";
+ public const string panel_left_text_32_regular = "\U000f019d";
+ public const string panel_left_text_48_regular = "\U000f019e";
+ public const string panel_left_text_add_16_regular = "\U000f019f";
+ public const string panel_left_text_add_20_regular = "\U000f01a0";
+ public const string panel_left_text_add_24_regular = "\U000f01a1";
+ public const string panel_left_text_add_28_regular = "\U000f01a2";
+ public const string panel_left_text_add_32_regular = "\U000f01a3";
+ public const string panel_left_text_add_48_regular = "\U000f01a4";
+ public const string panel_left_text_dismiss_16_regular = "\U000f01a5";
+ public const string panel_left_text_dismiss_20_regular = "\U000f01a6";
+ public const string panel_left_text_dismiss_24_regular = "\U000f01a7";
+ public const string panel_left_text_dismiss_28_regular = "\U000f01a8";
+ public const string panel_left_text_dismiss_32_regular = "\U000f01a9";
+ public const string panel_left_text_dismiss_48_regular = "\U000f01aa";
+ public const string panel_right_16_regular = "\ue8bc";
+ public const string panel_right_20_regular = "\ue8bd";
+ public const string panel_right_24_regular = "\ue8be";
+ public const string panel_right_28_regular = "\ue8bf";
+ public const string panel_right_32_regular = "\uf000";
+ public const string panel_right_48_regular = "\ue8c0";
+ public const string panel_right_add_20_regular = "\ueeae";
+ public const string panel_right_contract_16_regular = "\ue8c1";
+ public const string panel_right_contract_20_regular = "\ue8c2";
+ public const string panel_right_contract_24_regular = "\ue8c3";
+ public const string panel_right_cursor_20_regular = "\uf03d";
+ public const string panel_right_cursor_24_regular = "\uf03e";
+ public const string panel_right_expand_20_regular = "\ue8c4";
+ public const string panel_right_gallery_16_regular = "\U000f030d";
+ public const string panel_right_gallery_20_regular = "\U000f030e";
+ public const string panel_right_gallery_24_regular = "\U000f030f";
+ public const string panel_right_gallery_28_regular = "\U000f0310";
+ public const string panel_separate_window_20_regular = "\ue8c5";
+ public const string panel_top_contract_20_regular = "\ue8c6";
+ public const string panel_top_expand_20_regular = "\ue8c7";
+ public const string panel_top_gallery_16_regular = "\U000f0311";
+ public const string panel_top_gallery_20_regular = "\U000f0312";
+ public const string panel_top_gallery_24_regular = "\U000f0313";
+ public const string panel_top_gallery_28_regular = "\U000f0314";
+ public const string password_16_regular = "\ue8c8";
+ public const string password_20_regular = "\ue8c9";
+ public const string password_24_regular = "\uf59e";
+ public const string password_32_regular = "\U000f05ae";
+ public const string password_48_regular = "\U000f05af";
+ public const string password_clock_48_regular = "\U000f05b0";
+ public const string password_reset_48_regular = "\U000f05b1";
+ public const string patch_20_regular = "\uf6ba";
+ public const string patch_24_regular = "\uf6bb";
+ public const string patient_20_regular = "\ue8ca";
+ public const string patient_24_regular = "\uf59f";
+ public const string patient_32_regular = "\ue8cb";
+ public const string pause_12_regular = "\ue8cc";
+ public const string pause_16_regular = "\uf5a0";
+ public const string pause_20_regular = "\uf5a1";
+ public const string pause_24_regular = "\uf5a2";
+ public const string pause_28_regular = "\ue8cd";
+ public const string pause_32_regular = "\ue8ce";
+ public const string pause_48_regular = "\uf5a3";
+ public const string pause_circle_20_regular = "\uf6bc";
+ public const string pause_circle_24_regular = "\ue8cf";
+ public const string pause_circle_32_regular = "\U000f0225";
+ public const string pause_circle_48_regular = "\U000f0226";
+ public const string pause_off_16_regular = "\ue8d0";
+ public const string pause_off_20_regular = "\ue8d1";
+ public const string pause_settings_16_regular = "\ue8d2";
+ public const string pause_settings_20_regular = "\ue8d3";
+ public const string payment_16_regular = "\ue8d4";
+ public const string payment_20_regular = "\uf5a4";
+ public const string payment_24_regular = "\uf5a5";
+ public const string payment_28_regular = "\ue8d5";
+ public const string payment_32_regular = "\ueeda";
+ public const string payment_48_regular = "\ueedb";
+ public const string payment_wireless_16_regular = "\U000f0517";
+ public const string payment_wireless_20_regular = "\U000f0518";
+ public const string payment_wireless_24_regular = "\U000f0519";
+ public const string payment_wireless_28_regular = "\U000f051a";
+ public const string payment_wireless_32_regular = "\U000f051b";
+ public const string payment_wireless_48_regular = "\U000f051c";
+ public const string pen_16_regular = "\ue8d6";
+ public const string pen_20_regular = "\ue8d7";
+ public const string pen_24_regular = "\ue8d8";
+ public const string pen_28_regular = "\ue8d9";
+ public const string pen_32_regular = "\ue8da";
+ public const string pen_48_regular = "\ue8db";
+ public const string pen_dismiss_16_regular = "\U000f00eb";
+ public const string pen_dismiss_20_regular = "\U000f00ec";
+ public const string pen_dismiss_24_regular = "\U000f00ed";
+ public const string pen_dismiss_28_regular = "\U000f00ee";
+ public const string pen_dismiss_32_regular = "\U000f00ef";
+ public const string pen_dismiss_48_regular = "\U000f00f0";
+ public const string pen_off_16_regular = "\ue8dc";
+ public const string pen_off_20_regular = "\ue8dd";
+ public const string pen_off_24_regular = "\ue8de";
+ public const string pen_off_28_regular = "\ue8df";
+ public const string pen_off_32_regular = "\ue8e0";
+ public const string pen_off_48_regular = "\ue8e1";
+ public const string pen_prohibited_16_regular = "\ue8e2";
+ public const string pen_prohibited_20_regular = "\ue8e3";
+ public const string pen_prohibited_24_regular = "\ue8e4";
+ public const string pen_prohibited_28_regular = "\ue8e5";
+ public const string pen_prohibited_32_regular = "\ue8e6";
+ public const string pen_prohibited_48_regular = "\ue8e7";
+ public const string pen_sparkle_16_regular = "\U000f0227";
+ public const string pen_sparkle_20_regular = "\U000f0228";
+ public const string pen_sparkle_24_regular = "\U000f0229";
+ public const string pen_sparkle_28_regular = "\U000f022a";
+ public const string pen_sparkle_32_regular = "\U000f022b";
+ public const string pen_sparkle_48_regular = "\U000f022c";
+ public const string pentagon_20_regular = "\ue8e8";
+ public const string pentagon_32_regular = "\ue8e9";
+ public const string pentagon_48_regular = "\ue8ea";
+ public const string people_12_regular = "\ue8eb";
+ public const string people_16_regular = "\uf5a7";
+ public const string people_20_regular = "\uf5a8";
+ public const string people_24_regular = "\uf5a9";
+ public const string people_28_regular = "\uf5aa";
+ public const string people_32_regular = "\ue8ec";
+ public const string people_48_regular = "\ue8ed";
+ public const string people_add_16_regular = "\uf5ab";
+ public const string people_add_20_regular = "\uf5ac";
+ public const string people_add_24_regular = "\uf5ad";
+ public const string people_add_28_regular = "\ue8ee";
+ public const string people_add_32_regular = "\U000f0575";
+ public const string people_audience_20_regular = "\ue8ef";
+ public const string people_audience_24_regular = "\uf5ae";
+ public const string people_audience_32_regular = "\U000f04f7";
+ public const string people_call_16_regular = "\ue8f0";
+ public const string people_call_20_regular = "\ue8f1";
+ public const string people_call_24_regular = "\U000f0082";
+ public const string people_chat_16_regular = "\U000f03bf";
+ public const string people_chat_20_regular = "\U000f03c0";
+ public const string people_chat_24_regular = "\U000f03c1";
+ public const string people_checkmark_16_regular = "\ue8f2";
+ public const string people_checkmark_20_regular = "\ue8f3";
+ public const string people_checkmark_24_regular = "\ue8f4";
+ public const string people_community_12_regular = "\U000f05dc";
+ public const string people_community_16_regular = "\uf5af";
+ public const string people_community_20_regular = "\uf5b0";
+ public const string people_community_24_regular = "\uf5b1";
+ public const string people_community_28_regular = "\uf5b2";
+ public const string people_community_32_regular = "\U000f0083";
+ public const string people_community_48_regular = "\U000f0084";
+ public const string people_community_add_20_regular = "\ue8f5";
+ public const string people_community_add_24_regular = "\uf5b3";
+ public const string people_community_add_28_regular = "\ue8f6";
+ public const string people_edit_16_regular = "\U000f01df";
+ public const string people_edit_20_regular = "\ue8f7";
+ public const string people_edit_24_regular = "\U000f01e0";
+ public const string people_error_16_regular = "\ue8f8";
+ public const string people_error_20_regular = "\ue8f9";
+ public const string people_error_24_regular = "\ue8fa";
+ public const string people_eye_16_regular = "\U000f05b2";
+ public const string people_eye_20_regular = "\U000f05b3";
+ public const string people_list_16_regular = "\ue8fb";
+ public const string people_list_20_regular = "\ue8fc";
+ public const string people_list_24_regular = "\ue8fd";
+ public const string people_list_28_regular = "\ue8fe";
+ public const string people_list_32_regular = "\U000f044e";
+ public const string people_lock_20_regular = "\ue8ff";
+ public const string people_lock_24_regular = "\ue900";
+ public const string people_money_20_regular = "\ue901";
+ public const string people_money_24_regular = "\ue902";
+ public const string people_prohibited_16_regular = "\ue903";
+ public const string people_prohibited_20_regular = "\uf5b4";
+ public const string people_prohibited_24_regular = "\ue904";
+ public const string people_queue_20_regular = "\ue905";
+ public const string people_queue_24_regular = "\ue906";
+ public const string people_search_20_regular = "\ue907";
+ public const string person_search_24_regular = "\uef7e";
+ public const string people_settings_20_regular = "\uf5b6";
+ public const string people_settings_24_regular = "\ue908";
+ public const string people_settings_28_regular = "\ue909";
+ public const string people_star_16_regular = "\uf0f6";
+ public const string people_star_20_regular = "\uf0f7";
+ public const string people_star_24_regular = "\uf0f8";
+ public const string people_star_28_regular = "\uf0f9";
+ public const string people_star_32_regular = "\uf0fa";
+ public const string people_star_48_regular = "\uf0fb";
+ public const string people_subtract_20_regular = "\U000f058e";
+ public const string people_subtract_24_regular = "\U000f058f";
+ public const string people_subtract_32_regular = "\U000f0590";
+ public const string people_swap_16_regular = "\ue90a";
+ public const string people_swap_20_regular = "\ue90b";
+ public const string people_swap_24_regular = "\ue90c";
+ public const string people_swap_28_regular = "\ue90d";
+ public const string people_sync_16_regular = "\uf6bd";
+ public const string people_sync_20_regular = "\ue90e";
+ public const string people_sync_28_regular = "\ue90f";
+ public const string people_team_16_regular = "\uf5b7";
+ public const string people_team_20_regular = "\uf5b8";
+ public const string people_team_24_regular = "\uf5b9";
+ public const string people_team_28_regular = "\uf5ba";
+ public const string people_team_32_regular = "\ue910";
+ public const string people_team_48_regular = "\U000f0131";
+ public const string people_team_add_20_regular = "\ue911";
+ public const string people_team_add_24_regular = "\ue912";
+ public const string people_team_delete_16_regular = "\ue913";
+ public const string people_team_delete_20_regular = "\ue914";
+ public const string people_team_delete_24_regular = "\ue915";
+ public const string people_team_delete_28_regular = "\ue916";
+ public const string people_team_delete_32_regular = "\ue917";
+ public const string people_team_toolbox_20_regular = "\ue918";
+ public const string people_team_toolbox_24_regular = "\ue919";
+ public const string people_toolbox_16_regular = "\uf6ca";
+ public const string people_toolbox_20_regular = "\ue91a";
+ public const string person_12_regular = "\uf5bb";
+ public const string person_16_regular = "\uf5bc";
+ public const string person_20_regular = "\uf5bd";
+ public const string person_24_regular = "\uf5be";
+ public const string person_28_regular = "\uf5bf";
+ public const string person_32_regular = "\ue91b";
+ public const string person_48_regular = "\uf5c0";
+ public const string person_5_20_regular = "\ue91c";
+ public const string person_5_32_regular = "\ue91d";
+ public const string person_6_20_regular = "\ue91e";
+ public const string person_6_32_regular = "\ue91f";
+ public const string person_accounts_20_regular = "\ue920";
+ public const string person_accounts_24_regular = "\uf5c1";
+ public const string person_add_16_regular = "\ue921";
+ public const string person_add_20_regular = "\uf5c2";
+ public const string person_add_24_regular = "\uf5c3";
+ public const string person_add_28_regular = "\ue922";
+ public const string person_add_32_regular = "\U000f044f";
+ public const string person_alert_16_regular = "\uef91";
+ public const string person_alert_20_regular = "\uef92";
+ public const string person_alert_24_regular = "\uef93";
+ public const string person_alert_32_regular = "\U000f0576";
+ public const string person_alert_off_16_regular = "\U000f0591";
+ public const string person_alert_off_20_regular = "\U000f0592";
+ public const string person_alert_off_24_regular = "\U000f0593";
+ public const string person_alert_off_32_regular = "\U000f0594";
+ public const string person_arrow_back_16_regular = "\uef94";
+ public const string person_arrow_back_20_regular = "\uef95";
+ public const string person_arrow_back_24_regular = "\uef96";
+ public const string person_arrow_back_28_regular = "\uef97";
+ public const string person_arrow_back_32_regular = "\uef98";
+ public const string person_arrow_back_48_regular = "\uef99";
+ public const string person_arrow_left_16_regular = "\ue923";
+ public const string person_arrow_left_20_regular = "\uf5c4";
+ public const string person_arrow_left_24_regular = "\uf5c5";
+ public const string person_arrow_right_16_regular = "\uf5c6";
+ public const string person_arrow_right_20_regular = "\uf5c7";
+ public const string person_arrow_right_24_regular = "\uf5c8";
+ public const string person_available_16_regular = "\uf5c9";
+ public const string person_available_20_regular = "\ue924";
+ public const string person_available_24_regular = "\uf5ca";
+ public const string person_board_12_regular = "\U000f05dd";
+ public const string person_board_16_regular = "\uf5cc";
+ public const string person_board_20_regular = "\uf5cd";
+ public const string person_board_24_regular = "\uf5ce";
+ public const string person_board_28_regular = "\uf03f";
+ public const string person_board_32_regular = "\uf040";
+ public const string person_call_16_regular = "\ue925";
+ public const string person_call_20_regular = "\ue926";
+ public const string person_call_24_regular = "\uf5cf";
+ public const string person_chat_16_regular = "\uf6cb";
+ public const string person_chat_20_regular = "\uf6d1";
+ public const string person_chat_24_regular = "\uf6d3";
+ public const string person_circle_12_regular = "\ue927";
+ public const string person_circle_20_regular = "\ue928";
+ public const string person_circle_24_regular = "\ue929";
+ public const string person_circle_28_regular = "\uf041";
+ public const string person_circle_32_regular = "\uf042";
+ public const string person_clock_16_regular = "\ue92a";
+ public const string person_clock_20_regular = "\ue92b";
+ public const string person_clock_24_regular = "\ue92c";
+ public const string person_delete_16_regular = "\uf5d0";
+ public const string person_delete_20_regular = "\ue92d";
+ public const string person_delete_24_regular = "\uf5d1";
+ public const string person_desktop_20_regular = "\U000f0132";
+ public const string person_edit_20_regular = "\ue92e";
+ public const string person_edit_24_regular = "\ue92f";
+ public const string person_edit_48_regular = "\U000f027a";
+ public const string person_feedback_16_regular = "\ue930";
+ public const string person_feedback_20_regular = "\uf5d2";
+ public const string person_feedback_24_regular = "\uf5d3";
+ public const string person_feedback_28_regular = "\U000f0085";
+ public const string person_feedback_32_regular = "\U000f0086";
+ public const string person_feedback_48_regular = "\U000f0087";
+ public const string person_heart_20_regular = "\uef0a";
+ public const string person_heart_24_regular = "\ue931";
+ public const string person_info_16_regular = "\uf6d6";
+ public const string person_info_20_regular = "\ue932";
+ public const string person_info_24_regular = "\U000f01f4";
+ public const string person_key_20_regular = "\ue933";
+ public const string person_lightbulb_20_regular = "\ue934";
+ public const string person_lightbulb_24_regular = "\ue935";
+ public const string person_lightning_16_regular = "\U000f01ab";
+ public const string person_lightning_20_regular = "\U000f01ac";
+ public const string person_link_16_regular = "\uef9a";
+ public const string person_link_20_regular = "\uef9b";
+ public const string person_link_24_regular = "\uef9c";
+ public const string person_link_28_regular = "\uef9d";
+ public const string person_link_32_regular = "\uef9e";
+ public const string person_link_48_regular = "\uef9f";
+ public const string person_lock_16_regular = "\uf6d8";
+ public const string person_lock_20_regular = "\uf6d9";
+ public const string person_lock_24_regular = "\ue936";
+ public const string person_mail_16_regular = "\ue937";
+ public const string person_mail_20_regular = "\ue938";
+ public const string person_mail_24_regular = "\ue939";
+ public const string person_mail_28_regular = "\ue93a";
+ public const string person_mail_48_regular = "\ue93b";
+ public const string person_money_20_regular = "\ue93c";
+ public const string person_money_24_regular = "\ue93d";
+ public const string person_note_16_regular = "\ueeaf";
+ public const string person_note_20_regular = "\ue93e";
+ public const string person_note_24_regular = "\ue93f";
+ public const string person_passkey_16_regular = "\U000f053a";
+ public const string person_passkey_20_regular = "\U000f053b";
+ public const string person_passkey_24_regular = "\U000f053c";
+ public const string person_passkey_28_regular = "\U000f053d";
+ public const string person_passkey_32_regular = "\U000f053e";
+ public const string person_passkey_48_regular = "\U000f053f";
+ public const string person_phone_24_regular = "\U000f022d";
+ public const string person_pill_20_regular = "\ue940";
+ public const string person_pill_24_regular = "\ue941";
+ public const string person_prohibited_16_regular = "\ue942";
+ public const string person_prohibited_20_regular = "\uf5d4";
+ public const string person_prohibited_24_regular = "\ue943";
+ public const string person_prohibited_28_regular = "\ue944";
+ public const string person_prohibited_32_regular = "\U000f0540";
+ public const string person_question_mark_16_regular = "\uf5d5";
+ public const string person_question_mark_20_regular = "\uf5d6";
+ public const string person_question_mark_24_regular = "\uf5d7";
+ public const string person_ribbon_16_regular = "\U000f0133";
+ public const string person_ribbon_20_regular = "\U000f0134";
+ public const string person_ribbon_24_regular = "\U000f0541";
+ public const string person_running_20_regular = "\ueedc";
+ public const string person_search_16_regular = "\uf0fc";
+ public const string person_search_32_regular = "\uf0fd";
+ public const string person_settings_16_regular = "\ue945";
+ public const string person_settings_20_regular = "\ue946";
+ public const string person_square_16_regular = "\U000f0450";
+ public const string person_square_20_regular = "\uf043";
+ public const string person_square_24_regular = "\uf044";
+ public const string person_square_32_regular = "\U000f0451";
+ public const string person_square_checkmark_16_regular = "\U000f0452";
+ public const string person_square_checkmark_20_regular = "\U000f0453";
+ public const string person_square_checkmark_24_regular = "\U000f0454";
+ public const string person_square_checkmark_32_regular = "\U000f0455";
+ public const string person_standing_16_regular = "\uf0fe";
+ public const string person_star_16_regular = "\uef0b";
+ public const string person_star_20_regular = "\uef0c";
+ public const string person_star_24_regular = "\uef0d";
+ public const string person_star_28_regular = "\uef0e";
+ public const string person_star_32_regular = "\uef0f";
+ public const string person_star_48_regular = "\uef10";
+ public const string person_starburst_20_regular = "\uf045";
+ public const string person_starburst_24_regular = "\uf046";
+ public const string person_subtract_16_regular = "\uf6ed";
+ public const string person_subtract_20_regular = "\ue947";
+ public const string person_subtract_24_regular = "\U000f022e";
+ public const string person_support_16_regular = "\uf5d8";
+ public const string person_support_20_regular = "\uf5d9";
+ public const string person_support_24_regular = "\uf5da";
+ public const string person_support_28_regular = "\U000f03c2";
+ public const string person_support_32_regular = "\U000f05f3";
+ public const string person_swap_16_regular = "\uf5db";
+ public const string person_swap_20_regular = "\uf5dc";
+ public const string person_swap_24_regular = "\uf5dd";
+ public const string person_sync_16_regular = "\ue948";
+ public const string person_sync_20_regular = "\ue949";
+ public const string person_sync_24_regular = "\ue94a";
+ public const string person_sync_28_regular = "\ue94b";
+ public const string person_sync_32_regular = "\ue94c";
+ public const string person_sync_48_regular = "\ue94d";
+ public const string person_tag_20_regular = "\ue94e";
+ public const string person_tag_24_regular = "\ue94f";
+ public const string person_tag_28_regular = "\ue950";
+ public const string person_tag_32_regular = "\ue951";
+ public const string person_tag_48_regular = "\ue952";
+ public const string person_tentative_16_regular = "\U000f05de";
+ public const string person_tentative_20_regular = "\U000f05df";
+ public const string person_tentative_24_regular = "\U000f05e0";
+ public const string person_voice_16_regular = "\U000f040a";
+ public const string person_voice_20_regular = "\uf5de";
+ public const string person_voice_24_regular = "\uf5df";
+ public const string person_walking_16_regular = "\uf0ff";
+ public const string person_walking_20_regular = "\uf087";
+ public const string person_walking_24_regular = "\uf088";
+ public const string person_warning_16_regular = "\U000f040b";
+ public const string person_warning_20_regular = "\U000f040c";
+ public const string person_warning_24_regular = "\U000f040d";
+ public const string person_warning_28_regular = "\U000f040e";
+ public const string person_warning_32_regular = "\U000f040f";
+ public const string person_warning_48_regular = "\U000f0410";
+ public const string person_wrench_20_regular = "\U000f0135";
+ public const string phone_12_regular = "\ue953";
+ public const string phone_16_regular = "\uf6ee";
+ public const string phone_20_regular = "\uf5e0";
+ public const string phone_24_regular = "\uf5e1";
+ public const string phone_28_regular = "\uefa0";
+ public const string phone_32_regular = "\uefa1";
+ public const string phone_48_regular = "\uefa2";
+ public const string phone_add_20_regular = "\ue954";
+ public const string phone_add_24_regular = "\ue955";
+ public const string phone_arrow_right_20_regular = "\ue956";
+ public const string phone_arrow_right_24_regular = "\ue957";
+ public const string phone_briefcase_24_regular = "\U000f022f";
+ public const string phone_chat_16_regular = "\uefa3";
+ public const string phone_chat_20_regular = "\uefa4";
+ public const string phone_chat_24_regular = "\uefa5";
+ public const string phone_chat_28_regular = "\uefa6";
+ public const string phone_checkmark_16_regular = "\uf6ef";
+ public const string phone_checkmark_20_regular = "\ue958";
+ public const string phone_desktop_16_regular = "\uf5e4";
+ public const string phone_desktop_20_regular = "\uf5e5";
+ public const string phone_desktop_24_regular = "\uf5e6";
+ public const string phone_desktop_28_regular = "\uf5e7";
+ public const string phone_desktop_32_regular = "\U000f0088";
+ public const string phone_desktop_48_regular = "\U000f0089";
+ public const string phone_desktop_add_20_regular = "\ue959";
+ public const string phone_dismiss_20_regular = "\ue95a";
+ public const string phone_dismiss_24_regular = "\ue95b";
+ public const string phone_edit_20_regular = "\U000f00f1";
+ public const string phone_edit_24_regular = "\U000f00f2";
+ public const string phone_eraser_16_regular = "\ue95c";
+ public const string phone_eraser_20_regular = "\ue95d";
+ public const string phone_footer_arrow_down_20_regular = "\U000f0456";
+ public const string phone_footer_arrow_down_24_regular = "\U000f0457";
+ public const string phone_header_arrow_up_20_regular = "\U000f0458";
+ public const string phone_header_arrow_up_24_regular = "\U000f0459";
+ public const string phone_key_20_regular = "\ue95e";
+ public const string phone_key_24_regular = "\ue95f";
+ public const string phone_laptop_16_regular = "\ue960";
+ public const string phone_laptop_20_regular = "\uf5ea";
+ public const string phone_laptop_24_regular = "\uf5eb";
+ public const string phone_laptop_32_regular = "\ue961";
+ public const string phone_link_setup_20_regular = "\ue962";
+ public const string phone_link_setup_24_regular = "\uf5ec";
+ public const string phone_lock_20_regular = "\ue963";
+ public const string phone_lock_24_regular = "\ue964";
+ public const string phone_multiple_24_regular = "\U000f0230";
+ public const string phone_multiple_settings_24_regular = "\U000f0231";
+ public const string phone_page_header_20_regular = "\ue965";
+ public const string phone_page_header_24_regular = "\uf5ef";
+ public const string phone_pagination_20_regular = "\ue966";
+ public const string phone_pagination_24_regular = "\uf5f0";
+ public const string phone_person_24_regular = "\U000f0232";
+ public const string phone_screen_time_20_regular = "\ue967";
+ public const string phone_screen_time_24_regular = "\uf5f1";
+ public const string phone_shake_20_regular = "\ue968";
+ public const string phone_shake_24_regular = "\uf5f2";
+ public const string phone_span_in_16_regular = "\ue969";
+ public const string phone_span_in_20_regular = "\ue96a";
+ public const string phone_span_in_24_regular = "\ue96b";
+ public const string phone_span_in_28_regular = "\ue96c";
+ public const string phone_span_out_16_regular = "\ue96d";
+ public const string phone_span_out_20_regular = "\ue96e";
+ public const string phone_span_out_24_regular = "\ue96f";
+ public const string phone_span_out_28_regular = "\ue970";
+ public const string phone_speaker_20_regular = "\ue971";
+ public const string phone_speaker_24_regular = "\ue972";
+ public const string phone_status_bar_20_regular = "\ue973";
+ public const string phone_status_bar_24_regular = "\uf5f3";
+ public const string phone_subtract_24_regular = "\U000f0233";
+ public const string phone_tablet_20_regular = "\uf5f4";
+ public const string phone_tablet_24_regular = "\uf5f5";
+ public const string phone_update_20_regular = "\ue974";
+ public const string phone_update_24_regular = "\uf5f8";
+ public const string phone_update_checkmark_20_regular = "\ue975";
+ public const string phone_update_checkmark_24_regular = "\ue976";
+ public const string phone_vertical_scroll_20_regular = "\ue977";
+ public const string phone_vertical_scroll_24_regular = "\uf5f9";
+ public const string phone_vibrate_20_regular = "\ue978";
+ public const string phone_vibrate_24_regular = "\uf5fa";
+ public const string photo_filter_20_regular = "\ue979";
+ public const string photo_filter_24_regular = "\uf5fb";
+ public const string pi_20_regular = "\ue97a";
+ public const string pi_24_regular = "\ue97b";
+ public const string picture_in_picture_16_regular = "\uf5fc";
+ public const string picture_in_picture_20_regular = "\uf5fd";
+ public const string picture_in_picture_24_regular = "\uf5fe";
+ public const string picture_in_picture_enter_16_regular = "\ue97c";
+ public const string picture_in_picture_enter_20_regular = "\ue97d";
+ public const string picture_in_picture_enter_24_regular = "\ue97e";
+ public const string picture_in_picture_exit_16_regular = "\ue97f";
+ public const string picture_in_picture_exit_20_regular = "\ue980";
+ public const string picture_in_picture_exit_24_regular = "\ue981";
+ public const string pill_16_regular = "\uf6f0";
+ public const string pill_20_regular = "\uf6f1";
+ public const string pill_24_regular = "\uf6f2";
+ public const string pill_28_regular = "\uf6f3";
+ public const string pin_12_regular = "\uf5ff";
+ public const string pin_16_regular = "\uf600";
+ public const string pin_20_regular = "\uf601";
+ public const string pin_24_regular = "\uf602";
+ public const string pin_28_regular = "\ue982";
+ public const string pin_32_regular = "\ue983";
+ public const string pin_48_regular = "\ue984";
+ public const string pin_globe_16_regular = "\U000f05b4";
+ public const string pin_globe_20_regular = "\U000f05b5";
+ public const string pin_off_16_regular = "\ue985";
+ public const string pin_off_20_regular = "\uf603";
+ public const string pin_off_24_regular = "\uf604";
+ public const string pin_off_28_regular = "\ue986";
+ public const string pin_off_32_regular = "\ue987";
+ public const string pin_off_48_regular = "\ue988";
+ public const string pipeline_20_regular = "\ue989";
+ public const string pipeline_24_regular = "\ueedd";
+ public const string pipeline_32_regular = "\ueede";
+ public const string pipeline_add_20_regular = "\ue98a";
+ public const string pipeline_add_32_regular = "\uef11";
+ public const string pipeline_arrow_curve_down_20_regular = "\ue98b";
+ public const string pipeline_play_20_regular = "\ue98c";
+ public const string pivot_20_regular = "\ue98d";
+ public const string pivot_24_regular = "\ue98e";
+ public const string plant_cattail_20_regular = "\U000f0542";
+ public const string plant_cattail_24_regular = "\U000f0543";
+ public const string plant_grass_20_regular = "\U000f0136";
+ public const string plant_grass_24_regular = "\U000f0137";
+ public const string plant_grass_28_regular = "\U000f0138";
+ public const string plant_ragweed_20_regular = "\U000f0139";
+ public const string plant_ragweed_24_regular = "\U000f013a";
+ public const string plant_ragweed_28_regular = "\U000f013b";
+ public const string play_12_regular = "\ue98f";
+ public const string play_16_regular = "\ue990";
+ public const string play_20_regular = "\uf605";
+ public const string play_24_regular = "\uf606";
+ public const string play_28_regular = "\ue991";
+ public const string play_32_regular = "\ue992";
+ public const string play_48_regular = "\uf607";
+ public const string play_circle_16_regular = "\ue993";
+ public const string play_circle_20_regular = "\ue994";
+ public const string play_circle_24_regular = "\uf608";
+ public const string play_circle_28_regular = "\ue995";
+ public const string play_circle_48_regular = "\ue996";
+ public const string play_circle_hint_16_regular = "\U000f008a";
+ public const string play_circle_hint_20_regular = "\U000f008b";
+ public const string play_circle_hint_24_regular = "\U000f008c";
+ public const string play_circle_sparkle_16_regular = "\U000f060b";
+ public const string play_circle_sparkle_20_regular = "\U000f060c";
+ public const string play_circle_sparkle_24_regular = "\U000f060d";
+ public const string play_multiple_16_regular = "\uf100";
+ public const string play_settings_20_regular = "\ue997";
+ public const string playing_cards_20_regular = "\ue998";
+ public const string plug_connected_16_regular = "\U000f0393";
+ public const string plug_connected_20_regular = "\ue999";
+ public const string plug_connected_24_regular = "\ue99a";
+ public const string plug_connected_add_20_regular = "\ue99b";
+ public const string plug_connected_checkmark_20_regular = "\ue99c";
+ public const string plug_connected_settings_20_regular = "\U000f0234";
+ public const string plug_connected_settings_24_regular = "\U000f0235";
+ public const string plug_disconnected_16_regular = "\U000f0394";
+ public const string plug_disconnected_20_regular = "\uf609";
+ public const string plug_disconnected_24_regular = "\uf60a";
+ public const string plug_disconnected_28_regular = "\uf60b";
+ public const string plug_disconnected_48_regular = "\U000f027b";
+ public const string point_scan_20_regular = "\ue99d";
+ public const string point_scan_24_regular = "\uf60c";
+ public const string poll_16_regular = "\ue99e";
+ public const string poll_20_regular = "\ue99f";
+ public const string poll_24_regular = "\uf60d";
+ public const string poll_32_regular = "\U000f045a";
+ public const string poll_horizontal_16_regular = "\U000f008d";
+ public const string poll_horizontal_20_regular = "\U000f008e";
+ public const string poll_horizontal_24_regular = "\U000f008f";
+ public const string poll_off_16_regular = "\U000f04cc";
+ public const string poll_off_20_regular = "\U000f04cd";
+ public const string poll_off_24_regular = "\U000f04ce";
+ public const string poll_off_32_regular = "\U000f04cf";
+ public const string port_hdmi_20_regular = "\ue9a0";
+ public const string port_hdmi_24_regular = "\ue9a1";
+ public const string port_micro_usb_20_regular = "\ue9a2";
+ public const string port_micro_usb_24_regular = "\ue9a3";
+ public const string port_usb_a_20_regular = "\ue9a4";
+ public const string port_usb_a_24_regular = "\ue9a5";
+ public const string port_usb_c_20_regular = "\ue9a6";
+ public const string port_usb_c_24_regular = "\ue9a7";
+ public const string position_backward_20_regular = "\ue9a8";
+ public const string position_backward_24_regular = "\ue9a9";
+ public const string position_forward_20_regular = "\ue9aa";
+ public const string position_forward_24_regular = "\ue9ab";
+ public const string position_to_back_20_regular = "\ue9ac";
+ public const string position_to_back_24_regular = "\ue9ad";
+ public const string position_to_front_20_regular = "\ue9ae";
+ public const string position_to_front_24_regular = "\ue9af";
+ public const string power_20_regular = "\uf60e";
+ public const string power_24_regular = "\uf60f";
+ public const string power_28_regular = "\uf610";
+ public const string predictions_20_regular = "\ue9b0";
+ public const string predictions_24_regular = "\uf611";
+ public const string premium_12_regular = "\uefa7";
+ public const string premium_16_regular = "\uf612";
+ public const string premium_20_regular = "\uf613";
+ public const string premium_24_regular = "\uf614";
+ public const string premium_28_regular = "\uf615";
+ public const string premium_32_regular = "\ue9b1";
+ public const string premium_person_16_regular = "\ue9b2";
+ public const string premium_person_20_regular = "\ue9b3";
+ public const string premium_person_24_regular = "\ue9b4";
+ public const string presence_available_10_regular = "\ue9b5";
+ public const string presence_available_12_regular = "\ue9b6";
+ public const string presence_available_16_regular = "\ue9b7";
+ public const string presence_available_20_regular = "\ue9b8";
+ public const string presence_available_24_regular = "\ue9b9";
+ public const string presence_away_10_regular = "\U000f0090";
+ public const string presence_away_12_regular = "\U000f0091";
+ public const string presence_away_16_regular = "\U000f0092";
+ public const string presence_away_20_regular = "\U000f0093";
+ public const string presence_away_24_regular = "\U000f0094";
+ public const string presence_blocked_10_regular = "\uf616";
+ public const string presence_blocked_12_regular = "\uf617";
+ public const string presence_blocked_16_regular = "\uf618";
+ public const string presence_blocked_20_regular = "\ue9ba";
+ public const string presence_blocked_24_regular = "\ue9bb";
+ public const string presence_dnd_10_regular = "\ue9bc";
+ public const string presence_dnd_12_regular = "\ue9bd";
+ public const string presence_dnd_16_regular = "\ue9be";
+ public const string presence_dnd_20_regular = "\ue9bf";
+ public const string presence_dnd_24_regular = "\ue9c0";
+ public const string presence_offline_10_regular = "\uf619";
+ public const string presence_offline_12_regular = "\uf61a";
+ public const string presence_offline_16_regular = "\uf61b";
+ public const string presence_offline_20_regular = "\ue9c1";
+ public const string presence_offline_24_regular = "\ue9c2";
+ public const string presence_oof_10_regular = "\uf61c";
+ public const string presence_oof_12_regular = "\uf61d";
+ public const string presence_oof_16_regular = "\uf61e";
+ public const string presence_oof_20_regular = "\ue9c3";
+ public const string presence_oof_24_regular = "\ue9c4";
+ public const string presence_unknown_10_regular = "\uf61f";
+ public const string presence_unknown_12_regular = "\uf620";
+ public const string presence_unknown_20_regular = "\ue9c5";
+ public const string presence_unknown_24_regular = "\ue9c6";
+ public const string presenter_20_regular = "\ue9c7";
+ public const string presenter_24_regular = "\uf622";
+ public const string presenter_off_20_regular = "\ue9c8";
+ public const string presenter_off_24_regular = "\uf623";
+ public const string preview_link_16_regular = "\uf624";
+ public const string preview_link_20_regular = "\uf625";
+ public const string preview_link_24_regular = "\uf626";
+ public const string previous_16_regular = "\uf627";
+ public const string previous_20_regular = "\uf628";
+ public const string previous_24_regular = "\uf629";
+ public const string previous_28_regular = "\ue9c9";
+ public const string previous_32_regular = "\ue9ca";
+ public const string previous_48_regular = "\ue9cb";
+ public const string previous_frame_20_regular = "\U000f02de";
+ public const string previous_frame_24_regular = "\U000f02df";
+ public const string print_16_regular = "\uf6fa";
+ public const string print_20_regular = "\uf62a";
+ public const string print_24_regular = "\uf62b";
+ public const string print_28_regular = "\ue9cc";
+ public const string print_32_regular = "\ue9cd";
+ public const string print_48_regular = "\uf62c";
+ public const string print_add_20_regular = "\uf6fc";
+ public const string print_add_24_regular = "\ue9ce";
+ public const string production_20_regular = "\uf6fd";
+ public const string production_24_regular = "\uf6fe";
+ public const string production_checkmark_20_regular = "\uf703";
+ public const string production_checkmark_24_regular = "\uf704";
+ public const string prohibited_12_regular = "\ue9cf";
+ public const string prohibited_16_regular = "\uf705";
+ public const string prohibited_20_regular = "\uf62d";
+ public const string prohibited_24_regular = "\uf62e";
+ public const string prohibited_28_regular = "\uf62f";
+ public const string prohibited_32_regular = "\U000f01f5";
+ public const string prohibited_48_regular = "\uf630";
+ public const string prohibited_multiple_16_regular = "\ue9d0";
+ public const string prohibited_multiple_20_regular = "\ue9d1";
+ public const string prohibited_multiple_24_regular = "\ue9d2";
+ public const string prohibited_multiple_28_regular = "\U000f01f6";
+ public const string prohibited_note_20_regular = "\ue9d3";
+ public const string projection_screen_16_regular = "\ue9d4";
+ public const string projection_screen_20_regular = "\ue9d5";
+ public const string projection_screen_24_regular = "\ue9d6";
+ public const string projection_screen_28_regular = "\ue9d7";
+ public const string projection_screen_dismiss_16_regular = "\ue9d8";
+ public const string projection_screen_dismiss_20_regular = "\ue9d9";
+ public const string projection_screen_dismiss_24_regular = "\ue9da";
+ public const string projection_screen_dismiss_28_regular = "\ue9db";
+ public const string projection_screen_text_20_regular = "\U000f0395";
+ public const string projection_screen_text_24_regular = "\U000f0095";
+ public const string prompt_16_regular = "\U000f062f";
+ public const string prompt_20_regular = "\U000f0630";
+ public const string prompt_24_regular = "\U000f0631";
+ public const string prompt_28_regular = "\U000f0632";
+ public const string prompt_32_regular = "\U000f0633";
+ public const string prompt_48_regular = "\U000f0634";
+ public const string protocol_handler_16_regular = "\uf632";
+ public const string protocol_handler_20_regular = "\uf633";
+ public const string protocol_handler_24_regular = "\uf634";
+ public const string pulse_20_regular = "\ue9dc";
+ public const string pulse_24_regular = "\ue9dd";
+ public const string pulse_28_regular = "\ue9de";
+ public const string pulse_32_regular = "\ue9df";
+ public const string pulse_square_20_regular = "\ue9e0";
+ public const string pulse_square_24_regular = "\ue9e1";
+ public const string puzzle_cube_16_regular = "\ue9e2";
+ public const string puzzle_cube_20_regular = "\ue9e3";
+ public const string puzzle_cube_24_regular = "\ue9e4";
+ public const string puzzle_cube_28_regular = "\ue9e5";
+ public const string puzzle_cube_48_regular = "\ue9e6";
+ public const string puzzle_cube_piece_20_regular = "\ue9e7";
+ public const string puzzle_piece_16_regular = "\ue9e8";
+ public const string puzzle_piece_20_regular = "\ue9e9";
+ public const string puzzle_piece_24_regular = "\ue9ea";
+ public const string puzzle_piece_shield_20_regular = "\ue9eb";
+ public const string qr_code_20_regular = "\ue9ec";
+ public const string qr_code_24_regular = "\uf635";
+ public const string qr_code_28_regular = "\uf636";
+ public const string question_16_regular = "\uf637";
+ public const string question_20_regular = "\uf638";
+ public const string question_24_regular = "\uf639";
+ public const string question_28_regular = "\uf63a";
+ public const string question_32_regular = "\U000f045b";
+ public const string question_48_regular = "\uf63b";
+ public const string question_circle_12_regular = "\ue9ed";
+ public const string question_circle_16_regular = "\uf63c";
+ public const string question_circle_20_regular = "\uf63d";
+ public const string question_circle_24_regular = "\uf63e";
+ public const string question_circle_28_regular = "\uf63f";
+ public const string question_circle_32_regular = "\ue9ee";
+ public const string question_circle_48_regular = "\uf640";
+ public const string quiz_new_20_regular = "\ue9ef";
+ public const string quiz_new_24_regular = "\uf641";
+ public const string quiz_new_28_regular = "\uf642";
+ public const string quiz_new_48_regular = "\uf643";
+ public const string radar_20_regular = "\ue9f0";
+ public const string radar_checkmark_20_regular = "\ue9f1";
+ public const string radar_rectangle_multiple_20_regular = "\ue9f2";
+ public const string radio_button_16_regular = "\uf153";
+ public const string radio_button_24_regular = "\uf645";
+ public const string radio_button_off_16_regular = "\uf155";
+ public const string ram_16_regular = "\uf1d1";
+ public const string ram_20_regular = "\ue9f3";
+ public const string rating_mature_16_regular = "\uf646";
+ public const string rating_mature_20_regular = "\uf647";
+ public const string rating_mature_24_regular = "\uf648";
+ public const string ratio_one_to_one_20_regular = "\uf70a";
+ public const string ratio_one_to_one_24_regular = "\uf70b";
+ public const string re_order_16_regular = "\uf649";
+ public const string reorder_20_regular = "\uea11";
+ public const string re_order_24_regular = "\uf64a";
+ public const string re_order_dots_horizontal_16_regular = "\ue9f4";
+ public const string re_order_dots_horizontal_20_regular = "\ue9f5";
+ public const string re_order_dots_horizontal_24_regular = "\ue9f6";
+ public const string re_order_dots_vertical_16_regular = "\ue9f7";
+ public const string re_order_dots_vertical_20_regular = "\ue9f8";
+ public const string re_order_dots_vertical_24_regular = "\ue9f9";
+ public const string read_aloud_16_regular = "\ue9fa";
+ public const string read_aloud_20_regular = "\uf64d";
+ public const string read_aloud_24_regular = "\uf64e";
+ public const string read_aloud_28_regular = "\ue9fb";
+ public const string reading_list_16_regular = "\uf651";
+ public const string reading_list_20_regular = "\uf652";
+ public const string reading_list_24_regular = "\uf653";
+ public const string reading_list_28_regular = "\uf654";
+ public const string reading_list_add_16_regular = "\uf655";
+ public const string reading_list_add_20_regular = "\uf656";
+ public const string reading_list_add_24_regular = "\uf657";
+ public const string reading_list_add_28_regular = "\uf658";
+ public const string reading_mode_mobile_20_regular = "\uf65b";
+ public const string reading_mode_mobile_24_regular = "\uf65c";
+ public const string real_estate_20_regular = "\ue9fc";
+ public const string real_estate_24_regular = "\ue9fd";
+ public const string receipt_16_regular = "\uf089";
+ public const string receipt_20_regular = "\ue9fe";
+ public const string receipt_24_regular = "\ue9ff";
+ public const string receipt_28_regular = "\uf08a";
+ public const string receipt_32_regular = "\U000f0096";
+ public const string receipt_add_20_regular = "\uf70c";
+ public const string receipt_add_24_regular = "\uea00";
+ public const string receipt_bag_20_regular = "\uf715";
+ public const string receipt_bag_24_regular = "\uea01";
+ public const string receipt_cube_20_regular = "\uf72d";
+ public const string receipt_cube_24_regular = "\uea02";
+ public const string receipt_money_16_regular = "\U000f0097";
+ public const string receipt_money_20_regular = "\uf72e";
+ public const string receipt_money_24_regular = "\uea03";
+ public const string receipt_play_20_regular = "\uea04";
+ public const string receipt_play_24_regular = "\uea05";
+ public const string receipt_search_20_regular = "\uea06";
+ public const string receipt_sparkles_16_regular = "\uf08b";
+ public const string receipt_sparkles_20_regular = "\uf047";
+ public const string receipt_sparkles_24_regular = "\uf048";
+ public const string record_12_regular = "\uf72f";
+ public const string record_16_regular = "\uf660";
+ public const string record_20_regular = "\uf661";
+ public const string record_24_regular = "\uf662";
+ public const string record_28_regular = "\uf735";
+ public const string record_32_regular = "\uf736";
+ public const string record_48_regular = "\uf737";
+ public const string record_stop_12_regular = "\uf758";
+ public const string record_stop_16_regular = "\uf759";
+ public const string record_stop_20_regular = "\uf75a";
+ public const string record_stop_24_regular = "\uf75b";
+ public const string record_stop_28_regular = "\uf75c";
+ public const string record_stop_32_regular = "\uf764";
+ public const string record_stop_48_regular = "\uf765";
+ public const string rectangle_landscape_12_regular = "\uea07";
+ public const string rectangle_landscape_16_regular = "\uea08";
+ public const string rectangle_landscape_20_regular = "\uea09";
+ public const string rectangle_landscape_24_regular = "\uea0a";
+ public const string rectangle_landscape_28_regular = "\uea0b";
+ public const string rectangle_landscape_32_regular = "\uea0c";
+ public const string rectangle_landscape_48_regular = "\uea0d";
+ public const string rectangle_landscape_hint_copy_16_regular = "\U000f0236";
+ public const string rectangle_landscape_hint_copy_20_regular = "\U000f0237";
+ public const string rectangle_landscape_hint_copy_24_regular = "\U000f0238";
+ public const string rectangle_landscape_sparkle_16_regular = "\U000f0315";
+ public const string rectangle_landscape_sparkle_20_regular = "\U000f0316";
+ public const string rectangle_landscape_sparkle_24_regular = "\U000f0317";
+ public const string rectangle_landscape_sparkle_28_regular = "\U000f0318";
+ public const string rectangle_landscape_sparkle_32_regular = "\U000f0319";
+ public const string rectangle_landscape_sparkle_48_regular = "\U000f04d0";
+ public const string rectangle_landscape_sync_16_regular = "\U000f04d1";
+ public const string rectangle_landscape_sync_20_regular = "\U000f04d2";
+ public const string rectangle_landscape_sync_24_regular = "\U000f04d3";
+ public const string rectangle_landscape_sync_28_regular = "\U000f04d4";
+ public const string rectangle_landscape_sync_off_16_regular = "\U000f04d5";
+ public const string rectangle_landscape_sync_off_20_regular = "\U000f04d6";
+ public const string rectangle_landscape_sync_off_24_regular = "\U000f04d7";
+ public const string rectangle_landscape_sync_off_28_regular = "\U000f04d8";
+ public const string rectangle_portrait_location_target_20_regular = "\uea0e";
+ public const string recycle_20_regular = "\uef12";
+ public const string recycle_32_regular = "\uef13";
+ public const string remix_add_16_regular = "\U000f02c6";
+ public const string remix_add_20_regular = "\U000f02c7";
+ public const string remix_add_24_regular = "\U000f02c8";
+ public const string remix_add_32_regular = "\U000f02c9";
+ public const string remote_16_regular = "\uea0f";
+ public const string remote_20_regular = "\uea10";
+ public const string rename_16_regular = "\uf668";
+ public const string rename_20_regular = "\uf669";
+ public const string rename_24_regular = "\uf66a";
+ public const string rename_28_regular = "\uf66b";
+ public const string replay_16_regular = "\U000f060e";
+ public const string replay_20_regular = "\uea12";
+ public const string replay_24_regular = "\U000f060f";
+ public const string replay_28_regular = "\U000f0610";
+ public const string replay_32_regular = "\U000f0611";
+ public const string resize_16_regular = "\U000f04b4";
+ public const string resize_20_regular = "\uf66c";
+ public const string resize_24_regular = "\uea13";
+ public const string resize_28_regular = "\U000f04b5";
+ public const string resize_32_regular = "\U000f04b6";
+ public const string resize_48_regular = "\U000f04b7";
+ public const string resize_image_20_regular = "\uea14";
+ public const string resize_image_24_regular = "\uf66d";
+ public const string resize_large_16_regular = "\uea15";
+ public const string resize_large_20_regular = "\uea16";
+ public const string resize_large_24_regular = "\uea17";
+ public const string resize_small_16_regular = "\uea18";
+ public const string resize_small_20_regular = "\uea19";
+ public const string resize_small_24_regular = "\uea1a";
+ public const string resize_table_20_regular = "\uea1b";
+ public const string resize_table_24_regular = "\uf66e";
+ public const string resize_video_20_regular = "\uea1c";
+ public const string resize_video_24_regular = "\uf66f";
+ public const string reward_12_regular = "\uef14";
+ public const string reward_16_regular = "\uf671";
+ public const string reward_20_regular = "\uf672";
+ public const string reward_24_regular = "\uf673";
+ public const string rewind_16_regular = "\uea1d";
+ public const string rewind_20_regular = "\uf674";
+ public const string rewind_24_regular = "\uf675";
+ public const string rewind_28_regular = "\uea1e";
+ public const string rhombus_16_regular = "\uea1f";
+ public const string rhombus_20_regular = "\uea20";
+ public const string rhombus_24_regular = "\uea21";
+ public const string rhombus_28_regular = "\uea22";
+ public const string rhombus_32_regular = "\uea23";
+ public const string rhombus_48_regular = "\uea24";
+ public const string ribbon_12_regular = "\uea25";
+ public const string ribbon_16_regular = "\uea26";
+ public const string ribbon_20_regular = "\uea27";
+ public const string ribbon_24_regular = "\uea28";
+ public const string ribbon_32_regular = "\uea29";
+ public const string ribbon_add_20_regular = "\uf766";
+ public const string ribbon_add_24_regular = "\uf767";
+ public const string ribbon_off_12_regular = "\uea2a";
+ public const string ribbon_off_16_regular = "\uea2b";
+ public const string ribbon_off_20_regular = "\uea2c";
+ public const string ribbon_off_24_regular = "\uea2d";
+ public const string ribbon_off_32_regular = "\uea2e";
+ public const string ribbon_star_20_regular = "\uea2f";
+ public const string ribbon_star_24_regular = "\uea30";
+ public const string road_20_regular = "\U000f0577";
+ public const string road_24_regular = "\U000f0578";
+ public const string road_cone_16_regular = "\uea31";
+ public const string road_cone_20_regular = "\uea32";
+ public const string road_cone_24_regular = "\uea33";
+ public const string road_cone_28_regular = "\uea34";
+ public const string road_cone_32_regular = "\uea35";
+ public const string road_cone_48_regular = "\uea36";
+ public const string rocket_16_regular = "\uf676";
+ public const string rocket_20_regular = "\uf677";
+ public const string rocket_24_regular = "\uf678";
+ public const string rotate_left_20_regular = "\uea37";
+ public const string rotate_left_24_regular = "\uea38";
+ public const string rotate_right_20_regular = "\uea39";
+ public const string rotate_right_24_regular = "\uea3a";
+ public const string router_20_regular = "\uea3b";
+ public const string router_24_regular = "\uf679";
+ public const string row_triple_20_regular = "\uea3c";
+ public const string row_triple_24_regular = "\uf67a";
+ public const string rss_16_regular = "\U000f0396";
+ public const string rss_20_regular = "\uea3d";
+ public const string rss_24_regular = "\uea3e";
+ public const string ruler_16_regular = "\uf67b";
+ public const string ruler_20_regular = "\uf67c";
+ public const string ruler_24_regular = "\uf67d";
+ public const string ruler_28_regular = "\uf049";
+ public const string ruler_32_regular = "\uf04a";
+ public const string ruler_48_regular = "\uf04b";
+ public const string run_16_regular = "\uea3f";
+ public const string run_20_regular = "\uea40";
+ public const string run_24_regular = "\uf67e";
+ public const string run_28_regular = "\U000f05b6";
+ public const string run_32_regular = "\U000f05b7";
+ public const string run_48_regular = "\U000f05b8";
+ public const string sanitize_20_regular = "\uea41";
+ public const string sanitize_24_regular = "\uea42";
+ public const string save_16_regular = "\uea43";
+ public const string save_20_regular = "\uf67f";
+ public const string save_24_regular = "\uf680";
+ public const string save_28_regular = "\uea44";
+ public const string save_32_regular = "\U000f0579";
+ public const string save_arrow_right_20_regular = "\uea45";
+ public const string save_arrow_right_24_regular = "\uea46";
+ public const string save_copy_20_regular = "\uea47";
+ public const string save_copy_24_regular = "\uf683";
+ public const string save_edit_20_regular = "\uea48";
+ public const string save_edit_24_regular = "\uea49";
+ public const string save_image_20_regular = "\uea4a";
+ public const string save_multiple_16_regular = "\uf1d2";
+ public const string save_multiple_20_regular = "\uea4b";
+ public const string save_multiple_24_regular = "\uea4c";
+ public const string save_search_20_regular = "\uea4d";
+ public const string save_sync_20_regular = "\uea4e";
+ public const string savings_16_regular = "\uf684";
+ public const string savings_20_regular = "\uf685";
+ public const string savings_24_regular = "\uf686";
+ public const string scale_fill_20_regular = "\uea4f";
+ public const string scale_fill_24_regular = "\uf687";
+ public const string scale_fit_16_regular = "\uf688";
+ public const string scale_fit_20_regular = "\uf689";
+ public const string scale_fit_24_regular = "\uf68a";
+ public const string scales_20_regular = "\uea50";
+ public const string scales_24_regular = "\uea51";
+ public const string scales_32_regular = "\uea52";
+ public const string scan_16_regular = "\uea53";
+ public const string scan_20_regular = "\uea54";
+ public const string scan_24_regular = "\uf68b";
+ public const string scan_camera_16_regular = "\uea55";
+ public const string scan_camera_20_regular = "\uea56";
+ public const string scan_camera_24_regular = "\uea57";
+ public const string scan_camera_28_regular = "\uea58";
+ public const string scan_camera_48_regular = "\uea59";
+ public const string scan_dash_12_regular = "\uea5a";
+ public const string scan_dash_16_regular = "\uea5b";
+ public const string scan_dash_20_regular = "\uea5c";
+ public const string scan_dash_24_regular = "\uea5d";
+ public const string scan_dash_28_regular = "\uea5e";
+ public const string scan_dash_32_regular = "\uea5f";
+ public const string scan_dash_48_regular = "\uea60";
+ public const string scan_object_20_regular = "\uea61";
+ public const string scan_object_24_regular = "\uea62";
+ public const string scan_person_16_regular = "\U000f031a";
+ public const string scan_person_20_regular = "\U000f031b";
+ public const string scan_person_24_regular = "\U000f031c";
+ public const string scan_person_28_regular = "\U000f031d";
+ public const string scan_person_48_regular = "\U000f031e";
+ public const string scan_qr_code_24_regular = "\uf04c";
+ public const string scan_table_20_regular = "\uea63";
+ public const string scan_table_24_regular = "\uea64";
+ public const string scan_text_16_regular = "\uf08c";
+ public const string scan_text_20_regular = "\uea65";
+ public const string scan_text_24_regular = "\uea66";
+ public const string scan_text_28_regular = "\uf08d";
+ public const string scan_thumb_up_16_regular = "\uea67";
+ public const string scan_thumb_up_20_regular = "\uea68";
+ public const string scan_thumb_up_24_regular = "\uea69";
+ public const string scan_thumb_up_28_regular = "\uea6a";
+ public const string scan_thumb_up_48_regular = "\uea6b";
+ public const string scan_thumb_up_off_16_regular = "\uea6c";
+ public const string scan_thumb_up_off_20_regular = "\uea6d";
+ public const string scan_thumb_up_off_24_regular = "\uea6e";
+ public const string scan_thumb_up_off_28_regular = "\uea6f";
+ public const string scan_thumb_up_off_48_regular = "\uea70";
+ public const string scan_type_20_regular = "\uea71";
+ public const string scan_type_24_regular = "\uea72";
+ public const string scan_type_checkmark_20_regular = "\uea73";
+ public const string scan_type_checkmark_24_regular = "\uea74";
+ public const string scan_type_off_20_regular = "\uea75";
+ public const string scan_type_off_24_regular = "\U000f0411";
+ public const string scratchpad_20_regular = "\uea76";
+ public const string scratchpad_24_regular = "\uf68c";
+ public const string screen_cut_20_regular = "\uea77";
+ public const string screen_person_20_regular = "\uea78";
+ public const string screen_search_20_regular = "\uea79";
+ public const string screen_search_24_regular = "\uea7a";
+ public const string screenshot_16_regular = "\U000f0412";
+ public const string screenshot_20_regular = "\uf68d";
+ public const string screenshot_24_regular = "\uf68e";
+ public const string screenshot_28_regular = "\U000f045c";
+ public const string screenshot_record_16_regular = "\U000f0413";
+ public const string screenshot_record_20_regular = "\U000f0414";
+ public const string screenshot_record_24_regular = "\U000f0415";
+ public const string screenshot_record_28_regular = "\U000f045d";
+ public const string script_16_regular = "\uf1db";
+ public const string script_20_regular = "\U000f0239";
+ public const string script_24_regular = "\U000f023a";
+ public const string script_32_regular = "\U000f023b";
+ public const string search_12_regular = "\uea7b";
+ public const string search_16_regular = "\uea7c";
+ public const string search_20_regular = "\uf68f";
+ public const string search_24_regular = "\uf690";
+ public const string search_28_regular = "\uf691";
+ public const string search_32_regular = "\uea7d";
+ public const string search_48_regular = "\uea7e";
+ public const string search_info_20_regular = "\uf692";
+ public const string search_info_24_regular = "\uf693";
+ public const string search_settings_20_regular = "\uea7f";
+ public const string search_shield_20_regular = "\uea80";
+ public const string search_sparkle_16_regular = "\U000f0635";
+ public const string search_sparkle_20_regular = "\U000f0636";
+ public const string search_sparkle_24_regular = "\U000f0637";
+ public const string search_sparkle_28_regular = "\U000f0638";
+ public const string search_sparkle_32_regular = "\U000f0639";
+ public const string search_sparkle_48_regular = "\U000f063a";
+ public const string search_square_16_regular = "\U000f05cc";
+ public const string search_square_20_regular = "\uea81";
+ public const string search_square_24_regular = "\uf694";
+ public const string search_visual_16_regular = "\uea82";
+ public const string search_visual_20_regular = "\uea83";
+ public const string search_visual_24_regular = "\uea84";
+ public const string seat_16_regular = "\U000f04d9";
+ public const string seat_20_regular = "\U000f04da";
+ public const string seat_24_regular = "\U000f04db";
+ public const string seat_add_16_regular = "\U000f04dc";
+ public const string seat_add_20_regular = "\U000f04dd";
+ public const string seat_add_24_regular = "\U000f04de";
+ public const string select_all_off_16_regular = "\U000f04b8";
+ public const string select_all_off_20_regular = "\uea85";
+ public const string select_all_off_24_regular = "\uf696";
+ public const string select_all_on_16_regular = "\U000f04b9";
+ public const string select_all_on_20_regular = "\uea86";
+ public const string select_all_on_24_regular = "\uea87";
+ public const string select_object_20_regular = "\uf697";
+ public const string select_object_24_regular = "\uf698";
+ public const string select_object_skew_20_regular = "\uea88";
+ public const string select_object_skew_24_regular = "\uea89";
+ public const string select_object_skew_dismiss_20_regular = "\uea8a";
+ public const string select_object_skew_dismiss_24_regular = "\uea8b";
+ public const string select_object_skew_edit_20_regular = "\uea8c";
+ public const string select_object_skew_edit_24_regular = "\uea8d";
+ public const string send_16_regular = "\uea8e";
+ public const string send_20_regular = "\uf699";
+ public const string send_24_regular = "\uf69a";
+ public const string send_28_regular = "\uf69b";
+ public const string send_32_regular = "\U000f0098";
+ public const string send_48_regular = "\U000f0099";
+ public const string send_beaker_16_regular = "\U000f00f3";
+ public const string send_beaker_20_regular = "\U000f00f4";
+ public const string send_beaker_24_regular = "\U000f00f5";
+ public const string send_beaker_28_regular = "\U000f00f6";
+ public const string send_beaker_32_regular = "\U000f00f7";
+ public const string send_beaker_48_regular = "\U000f00f8";
+ public const string send_clock_20_regular = "\uf69c";
+ public const string send_clock_24_regular = "\uea8f";
+ public const string send_copy_20_regular = "\uea90";
+ public const string send_copy_24_regular = "\uf69d";
+ public const string send_person_16_regular = "\U000f0612";
+ public const string send_person_20_regular = "\U000f0613";
+ public const string send_person_24_regular = "\U000f0614";
+ public const string serial_port_16_regular = "\uf6a1";
+ public const string serial_port_20_regular = "\uf6a2";
+ public const string serial_port_24_regular = "\uf6a3";
+ public const string server_12_regular = "\U000f0360";
+ public const string server_16_regular = "\uf1dc";
+ public const string server_20_regular = "\uf769";
+ public const string server_24_regular = "\uf76c";
+ public const string server_link_16_regular = "\U000f032b";
+ public const string server_link_20_regular = "\U000f032c";
+ public const string server_link_24_regular = "\U000f023c";
+ public const string server_multiple_20_regular = "\uea91";
+ public const string server_play_20_regular = "\uea92";
+ public const string server_surface_16_regular = "\uf1dd";
+ public const string server_surface_multiple_16_regular = "\uf206";
+ public const string service_bell_16_regular = "\U000f009a";
+ public const string service_bell_20_regular = "\uea93";
+ public const string service_bell_24_regular = "\uf6a4";
+ public const string settings_16_regular = "\uf6a8";
+ public const string settings_20_regular = "\uf6a9";
+ public const string settings_24_regular = "\uf6aa";
+ public const string settings_28_regular = "\uf6ab";
+ public const string settings_32_regular = "\uea94";
+ public const string settings_48_regular = "\uea95";
+ public const string settings_chat_16_regular = "\U000f05cd";
+ public const string settings_chat_20_regular = "\uea96";
+ public const string settings_chat_24_regular = "\uea97";
+ public const string settings_cog_multiple_20_regular = "\U000f013c";
+ public const string settings_cog_multiple_24_regular = "\U000f013d";
+ public const string shape_exclude_16_regular = "\uea98";
+ public const string shape_exclude_20_regular = "\uea99";
+ public const string shape_exclude_24_regular = "\uea9a";
+ public const string shape_intersect_16_regular = "\uea9b";
+ public const string shape_intersect_20_regular = "\uea9c";
+ public const string shape_intersect_24_regular = "\uea9d";
+ public const string shape_organic_16_regular = "\U000f0397";
+ public const string shape_organic_20_regular = "\U000f0398";
+ public const string shape_organic_24_regular = "\U000f0399";
+ public const string shape_organic_28_regular = "\U000f039a";
+ public const string shape_organic_32_regular = "\U000f039b";
+ public const string shape_organic_48_regular = "\U000f039c";
+ public const string shape_subtract_16_regular = "\uea9e";
+ public const string shape_subtract_20_regular = "\uea9f";
+ public const string shape_subtract_24_regular = "\ueaa0";
+ public const string shape_union_16_regular = "\ueaa1";
+ public const string shape_union_20_regular = "\ueaa2";
+ public const string shape_union_24_regular = "\ueaa3";
+ public const string shapes_16_regular = "\uf6ac";
+ public const string shapes_20_regular = "\uf6ad";
+ public const string shapes_24_regular = "\uf6ae";
+ public const string shapes_28_regular = "\ueaa4";
+ public const string shapes_32_regular = "\U000f03c3";
+ public const string shapes_48_regular = "\ueaa5";
+ public const string share_16_regular = "\ueaa6";
+ public const string share_20_regular = "\uf6af";
+ public const string share_24_regular = "\uf6b0";
+ public const string share_28_regular = "\ueaa7";
+ public const string share_48_regular = "\ueaa8";
+ public const string share_android_16_regular = "\U000f04ba";
+ public const string share_android_20_regular = "\uf6b1";
+ public const string share_android_24_regular = "\uf6b2";
+ public const string share_android_32_regular = "\U000f04bb";
+ public const string share_close_tray_20_regular = "\ueaa9";
+ public const string share_close_tray_24_regular = "\uf6b3";
+ public const string share_ios_20_regular = "\uf6b5";
+ public const string share_ios_24_regular = "\uf6b6";
+ public const string share_ios_28_regular = "\uf6b7";
+ public const string share_ios_48_regular = "\uf6b8";
+ public const string share_multiple_16_regular = "\U000f05ce";
+ public const string share_multiple_20_regular = "\U000f05cf";
+ public const string share_multiple_24_regular = "\U000f05d0";
+ public const string share_screen_person_16_regular = "\ueaaa";
+ public const string share_screen_person_24_regular = "\ueaac";
+ public const string share_screen_person_28_regular = "\ueaad";
+ public const string share_screen_person_overlay_16_regular = "\ueaae";
+ public const string share_screen_person_overlay_20_regular = "\ueaaf";
+ public const string share_screen_person_overlay_24_regular = "\ueab0";
+ public const string share_screen_person_overlay_28_regular = "\ueab1";
+ public const string share_screen_person_overlay_inside_16_regular = "\ueab2";
+ public const string share_screen_person_overlay_inside_20_regular = "\ueab3";
+ public const string share_screen_person_overlay_inside_24_regular = "\ueab4";
+ public const string share_screen_person_overlay_inside_28_regular = "\ueab5";
+ public const string share_screen_person_p_16_regular = "\ueab6";
+ public const string share_screen_person_p_20_regular = "\ueab7";
+ public const string share_screen_person_p_24_regular = "\ueab8";
+ public const string share_screen_person_p_28_regular = "\ueab9";
+ public const string share_screen_start_20_regular = "\ueaba";
+ public const string share_screen_start_24_regular = "\ueabb";
+ public const string share_screen_start_28_regular = "\ueabc";
+ public const string share_screen_start_48_regular = "\ueabd";
+ public const string share_screen_stop_16_regular = "\ueabe";
+ public const string share_screen_stop_20_regular = "\ueabf";
+ public const string share_screen_stop_24_regular = "\ueac0";
+ public const string share_screen_stop_28_regular = "\ueac1";
+ public const string share_screen_stop_48_regular = "\ueac2";
+ public const string shield_12_regular = "\uf21f";
+ public const string shield_16_regular = "\ueac3";
+ public const string shield_20_regular = "\uf6be";
+ public const string shield_24_regular = "\uf6bf";
+ public const string shield_28_regular = "\ueac4";
+ public const string shield_32_regular = "\uef20";
+ public const string shield_48_regular = "\ueac5";
+ public const string shield_add_16_regular = "\uefa8";
+ public const string shield_add_20_regular = "\uefa9";
+ public const string shield_add_24_regular = "\uefaa";
+ public const string shield_badge_20_regular = "\uf76d";
+ public const string shield_badge_24_regular = "\ueac6";
+ public const string shield_checkmark_16_regular = "\ueac7";
+ public const string shield_checkmark_20_regular = "\ueac8";
+ public const string shield_checkmark_24_regular = "\ueac9";
+ public const string shield_checkmark_28_regular = "\ueaca";
+ public const string shield_checkmark_48_regular = "\ueacb";
+ public const string shield_dismiss_16_regular = "\ueacc";
+ public const string shield_dismiss_20_regular = "\uf6c0";
+ public const string shield_dismiss_24_regular = "\uf6c1";
+ public const string shield_dismiss_shield_20_regular = "\ueacd";
+ public const string shield_error_16_regular = "\ueace";
+ public const string shield_error_20_regular = "\uf6c2";
+ public const string shield_error_24_regular = "\uf6c3";
+ public const string shield_globe_16_regular = "\ueeb0";
+ public const string shield_globe_20_regular = "\ueeb1";
+ public const string shield_globe_24_regular = "\ueeb2";
+ public const string shield_keyhole_16_regular = "\uf6c4";
+ public const string shield_keyhole_20_regular = "\uf6c5";
+ public const string shield_keyhole_24_regular = "\uf6c6";
+ public const string shield_lock_16_regular = "\ueacf";
+ public const string shield_lock_20_regular = "\uead0";
+ public const string shield_lock_24_regular = "\uead1";
+ public const string shield_lock_28_regular = "\uead2";
+ public const string shield_lock_48_regular = "\uead3";
+ public const string shield_person_20_regular = "\uead4";
+ public const string shield_person_add_20_regular = "\uead5";
+ public const string shield_prohibited_20_regular = "\uf6c7";
+ public const string shield_prohibited_24_regular = "\uf6c8";
+ public const string shield_question_16_regular = "\uef21";
+ public const string shield_question_20_regular = "\uef22";
+ public const string shield_question_24_regular = "\uef23";
+ public const string shield_question_32_regular = "\uef24";
+ public const string shield_task_16_regular = "\uead6";
+ public const string shield_task_20_regular = "\uead7";
+ public const string shield_task_24_regular = "\uead8";
+ public const string shield_task_28_regular = "\uead9";
+ public const string shield_task_48_regular = "\ueada";
+ public const string shifts_16_regular = "\ueadb";
+ public const string shifts_20_regular = "\ueadc";
+ public const string shifts_24_regular = "\uf6c9";
+ public const string shifts_28_regular = "\uf6cc";
+ public const string shifts_30_minutes_20_regular = "\ueadd";
+ public const string shifts_30_minutes_24_regular = "\uf6cd";
+ public const string shifts_32_regular = "\ueade";
+ public const string shifts_activity_16_regular = "\U000f009b";
+ public const string shifts_activity_20_regular = "\uf6ce";
+ public const string shifts_activity_24_regular = "\uf6cf";
+ public const string shifts_add_20_regular = "\ueadf";
+ public const string shifts_add_24_regular = "\uf6d0";
+ public const string shifts_availability_20_regular = "\ueae0";
+ public const string shifts_availability_24_regular = "\uf6d2";
+ public const string shifts_checkmark_20_regular = "\ueae1";
+ public const string shifts_checkmark_24_regular = "\ueae2";
+ public const string shifts_day_20_regular = "\ueae3";
+ public const string shifts_day_24_regular = "\ueae4";
+ public const string shifts_open_20_regular = "\uf6d4";
+ public const string shifts_open_24_regular = "\uf6d5";
+ public const string shifts_prohibited_20_regular = "\ueae5";
+ public const string shifts_prohibited_24_regular = "\ueae6";
+ public const string shifts_question_mark_20_regular = "\ueae7";
+ public const string shifts_question_mark_24_regular = "\ueae8";
+ public const string shifts_team_20_regular = "\ueae9";
+ public const string shifts_team_24_regular = "\uf6d7";
+ public const string shopping_bag_16_regular = "\uf76e";
+ public const string shopping_bag_20_regular = "\uf76f";
+ public const string shopping_bag_24_regular = "\uf770";
+ public const string shopping_bag_add_16_regular = "\U000f0595";
+ public const string shopping_bag_add_20_regular = "\U000f04f8";
+ public const string shopping_bag_add_24_regular = "\U000f04f9";
+ public const string shopping_bag_arrow_left_20_regular = "\ueaea";
+ public const string shopping_bag_arrow_left_24_regular = "\ueaeb";
+ public const string shopping_bag_dismiss_20_regular = "\ueaec";
+ public const string shopping_bag_dismiss_24_regular = "\ueaed";
+ public const string shopping_bag_pause_20_regular = "\ueaee";
+ public const string shopping_bag_pause_24_regular = "\ueaef";
+ public const string shopping_bag_percent_20_regular = "\ueaf0";
+ public const string shopping_bag_percent_24_regular = "\ueaf1";
+ public const string shopping_bag_play_20_regular = "\ueaf2";
+ public const string shopping_bag_play_24_regular = "\ueaf3";
+ public const string shopping_bag_tag_20_regular = "\ueaf4";
+ public const string shopping_bag_tag_24_regular = "\ueaf5";
+ public const string shortpick_20_regular = "\ueaf6";
+ public const string shortpick_24_regular = "\ueaf7";
+ public const string showerhead_20_regular = "\uf04d";
+ public const string showerhead_24_regular = "\uf04e";
+ public const string showerhead_32_regular = "\uf04f";
+ public const string sidebar_search_ltr_20_regular = "\ueaf8";
+ public const string sidebar_search_rtl_20_regular = "\ueaf9";
+ public const string sign_out_20_regular = "\ueafa";
+ public const string sign_out_24_regular = "\uf6da";
+ public const string signature_16_regular = "\uf6db";
+ public const string signature_20_regular = "\uf6dc";
+ public const string signature_24_regular = "\uf6dd";
+ public const string signature_28_regular = "\uf6de";
+ public const string signature_32_regular = "\U000f023d";
+ public const string sim_16_regular = "\uf6e2";
+ public const string sim_20_regular = "\uf6e3";
+ public const string sim_24_regular = "\uf6e4";
+ public const string skip_back_10_20_regular = "\ueafb";
+ public const string skip_back_10_24_regular = "\ueafc";
+ public const string skip_back_10_28_regular = "\ueafd";
+ public const string skip_back_10_32_regular = "\ueafe";
+ public const string skip_back_10_48_regular = "\ueaff";
+ public const string skip_forward_10_20_regular = "\ueb00";
+ public const string skip_forward_10_24_regular = "\ueb01";
+ public const string skip_forward_10_28_regular = "\ueb02";
+ public const string skip_forward_10_32_regular = "\ueb03";
+ public const string skip_forward_10_48_regular = "\ueb04";
+ public const string skip_forward_30_20_regular = "\ueb05";
+ public const string skip_forward_30_24_regular = "\ueb06";
+ public const string skip_forward_30_28_regular = "\ueb07";
+ public const string skip_forward_30_32_regular = "\ueb08";
+ public const string skip_forward_30_48_regular = "\ueb09";
+ public const string skip_forward_tab_20_regular = "\ueb0a";
+ public const string skip_forward_tab_24_regular = "\ueb0b";
+ public const string slash_forward_12_regular = "\U000f009c";
+ public const string slash_forward_16_regular = "\U000f009d";
+ public const string slash_forward_20_regular = "\U000f009e";
+ public const string slash_forward_24_regular = "\U000f009f";
+ public const string sleep_20_regular = "\ueb0c";
+ public const string sleep_24_regular = "\uf6e5";
+ public const string slide_add_16_regular = "\ueb0d";
+ public const string slide_add_20_regular = "\ueb0e";
+ public const string slide_add_24_regular = "\uf6e6";
+ public const string slide_add_28_regular = "\ueb0f";
+ public const string slide_add_32_regular = "\ueb10";
+ public const string slide_add_48_regular = "\ueb11";
+ public const string slide_arrow_right_20_regular = "\ueb12";
+ public const string slide_arrow_right_24_regular = "\ueb13";
+ public const string slide_content_24_regular = "\U000f013e";
+ public const string slide_eraser_16_regular = "\ueb14";
+ public const string slide_eraser_20_regular = "\ueb15";
+ public const string slide_eraser_24_regular = "\ueb16";
+ public const string slide_grid_20_regular = "\ueb17";
+ public const string slide_grid_24_regular = "\ueb18";
+ public const string slide_hide_20_regular = "\ueb19";
+ public const string slide_hide_24_regular = "\uf6e8";
+ public const string slide_layout_20_regular = "\uf6e9";
+ public const string slide_layout_24_regular = "\uf6ea";
+ public const string slide_link_20_regular = "\uef15";
+ public const string slide_link_24_regular = "\uef16";
+ public const string slide_microphone_20_regular = "\ueb1a";
+ public const string slide_microphone_24_regular = "\uf6eb";
+ public const string slide_microphone_32_regular = "\ueb1b";
+ public const string slide_multiple_20_regular = "\ueb1c";
+ public const string slide_multiple_24_regular = "\ueb1d";
+ public const string slide_multiple_arrow_right_20_regular = "\ueb1e";
+ public const string slide_multiple_arrow_right_24_regular = "\ueb1f";
+ public const string slide_multiple_search_20_regular = "\uf773";
+ public const string slide_multiple_search_24_regular = "\uf774";
+ public const string slide_play_20_regular = "\U000f05d1";
+ public const string slide_play_24_regular = "\U000f05d2";
+ public const string slide_record_16_regular = "\U000f013f";
+ public const string slide_record_20_regular = "\U000f0140";
+ public const string slide_record_24_regular = "\U000f0141";
+ public const string slide_record_28_regular = "\U000f0142";
+ public const string slide_record_48_regular = "\U000f0143";
+ public const string slide_search_16_regular = "\U000f0416";
+ public const string slide_search_20_regular = "\ueb20";
+ public const string slide_search_24_regular = "\ueb21";
+ public const string slide_search_28_regular = "\ueb22";
+ public const string slide_search_32_regular = "\U000f0417";
+ public const string slide_settings_20_regular = "\ueb23";
+ public const string slide_settings_24_regular = "\ueb24";
+ public const string slide_size_20_regular = "\ueb25";
+ public const string slide_size_24_regular = "\ueb26";
+ public const string slide_text_16_regular = "\ueb27";
+ public const string slide_text_20_regular = "\ueb28";
+ public const string slide_text_24_regular = "\uf6ec";
+ public const string slide_text_28_regular = "\ueb29";
+ public const string slide_text_48_regular = "\ueb2a";
+ public const string slide_text_call_16_regular = "\U000f063b";
+ public const string slide_text_call_20_regular = "\U000f063c";
+ public const string slide_text_call_24_regular = "\U000f063d";
+ public const string slide_text_call_28_regular = "\U000f063e";
+ public const string slide_text_call_48_regular = "\U000f063f";
+ public const string slide_text_cursor_20_regular = "\U000f0640";
+ public const string slide_text_cursor_24_regular = "\U000f0641";
+ public const string slide_text_edit_16_regular = "\U000f03c4";
+ public const string slide_text_edit_20_regular = "\U000f03c5";
+ public const string slide_text_edit_24_regular = "\U000f03c6";
+ public const string slide_text_edit_28_regular = "\U000f03c7";
+ public const string slide_text_multiple_16_regular = "\uf050";
+ public const string slide_text_multiple_20_regular = "\uf051";
+ public const string slide_text_multiple_24_regular = "\uf052";
+ public const string slide_text_multiple_32_regular = "\uf053";
+ public const string slide_text_person_16_regular = "\uf22f";
+ public const string slide_text_person_20_regular = "\uf25b";
+ public const string slide_text_person_24_regular = "\uf25c";
+ public const string slide_text_person_28_regular = "\uf25d";
+ public const string slide_text_person_32_regular = "\uf25e";
+ public const string slide_text_person_48_regular = "\uf2d9";
+ public const string slide_text_sparkle_16_regular = "\U000f00f9";
+ public const string slide_text_sparkle_20_regular = "\U000f00fa";
+ public const string slide_text_sparkle_24_regular = "\U000f00fb";
+ public const string slide_text_sparkle_28_regular = "\U000f00fc";
+ public const string slide_text_sparkle_32_regular = "\U000f00fd";
+ public const string slide_text_sparkle_48_regular = "\U000f00fe";
+ public const string slide_transition_20_regular = "\ueb2b";
+ public const string slide_transition_24_regular = "\ueb2c";
+ public const string smartwatch_20_regular = "\uf775";
+ public const string smartwatch_24_regular = "\uf776";
+ public const string smartwatch_dot_20_regular = "\uf786";
+ public const string smartwatch_dot_24_regular = "\uf787";
+ public const string snooze_16_regular = "\uf6f4";
+ public const string snooze_20_regular = "\ueb2d";
+ public const string snooze_24_regular = "\uf6f5";
+ public const string sound_source_20_regular = "\ueb2e";
+ public const string sound_source_24_regular = "\uf6f6";
+ public const string sound_source_28_regular = "\uf6f7";
+ public const string sound_wave_circle_20_regular = "\ueb2f";
+ public const string sound_wave_circle_24_regular = "\ueb30";
+ public const string space_3d_16_regular = "\U000f00a0";
+ public const string space_3d_20_regular = "\U000f00a1";
+ public const string space_3d_24_regular = "\U000f00a2";
+ public const string space_3d_28_regular = "\U000f00a3";
+ public const string space_3d_32_regular = "\U000f00a4";
+ public const string space_3d_48_regular = "\U000f00a5";
+ public const string spacebar_20_regular = "\ueb31";
+ public const string spacebar_24_regular = "\uf6f8";
+ public const string sparkle_16_regular = "\ueb32";
+ public const string sparkle_20_regular = "\ueb33";
+ public const string sparkle_24_regular = "\ueb34";
+ public const string sparkle_28_regular = "\ueb35";
+ public const string sparkle_32_regular = "\U000f00a6";
+ public const string sparkle_48_regular = "\ueb36";
+ public const string sparkle_circle_16_regular = "\U000f00a7";
+ public const string sparkle_circle_20_regular = "\uefab";
+ public const string sparkle_circle_24_regular = "\uefac";
+ public const string sparkle_circle_28_regular = "\U000f00a8";
+ public const string sparkle_circle_32_regular = "\U000f00a9";
+ public const string sparkle_circle_48_regular = "\U000f00aa";
+ public const string spatula_spoon_16_regular = "\U000f0596";
+ public const string spatula_spoon_20_regular = "\U000f0597";
+ public const string spatula_spoon_24_regular = "\U000f0598";
+ public const string spatula_spoon_28_regular = "\U000f0599";
+ public const string spatula_spoon_32_regular = "\U000f059a";
+ public const string spatula_spoon_48_regular = "\U000f059b";
+ public const string speaker_0_16_regular = "\ueb37";
+ public const string speaker_0_20_regular = "\ueb38";
+ public const string speaker_0_24_regular = "\uf6f9";
+ public const string speaker_0_28_regular = "\ueb39";
+ public const string speaker_0_32_regular = "\ueb3a";
+ public const string speaker_0_48_regular = "\ueb3b";
+ public const string speaker_1_16_regular = "\ueb3c";
+ public const string speaker_1_20_regular = "\ueb3d";
+ public const string speaker_1_24_regular = "\uf6fb";
+ public const string speaker_1_28_regular = "\ueb3e";
+ public const string speaker_1_32_regular = "\ueb3f";
+ public const string speaker_1_48_regular = "\ueb40";
+ public const string speaker_2_16_regular = "\ueb41";
+ public const string speaker_2_20_regular = "\ueb42";
+ public const string speaker_2_24_regular = "\ueb43";
+ public const string speaker_2_28_regular = "\ueb44";
+ public const string speaker_2_32_regular = "\ueb45";
+ public const string speaker_2_48_regular = "\ueb46";
+ public const string speaker_bluetooth_20_regular = "\ueb47";
+ public const string speaker_bluetooth_24_regular = "\uf6ff";
+ public const string speaker_bluetooth_28_regular = "\ueb48";
+ public const string speaker_box_16_regular = "\U000f04df";
+ public const string speaker_box_20_regular = "\U000f04e0";
+ public const string speaker_box_24_regular = "\U000f04e1";
+ public const string speaker_edit_16_regular = "\uf700";
+ public const string speaker_edit_20_regular = "\uf701";
+ public const string speaker_edit_24_regular = "\uf702";
+ public const string speaker_mute_16_regular = "\ueb49";
+ public const string speaker_mute_20_regular = "\ueb4a";
+ public const string speaker_mute_24_regular = "\ueb4b";
+ public const string speaker_mute_28_regular = "\ueb4c";
+ public const string speaker_mute_32_regular = "\U000f023e";
+ public const string speaker_mute_48_regular = "\ueb4d";
+ public const string speaker_off_16_regular = "\ueb4e";
+ public const string speaker_off_20_regular = "\ueb4f";
+ public const string speaker_off_24_regular = "\uf706";
+ public const string speaker_off_28_regular = "\uf707";
+ public const string speaker_off_48_regular = "\ueb50";
+ public const string speaker_settings_20_regular = "\ueb51";
+ public const string speaker_settings_24_regular = "\uf708";
+ public const string speaker_settings_28_regular = "\ueb52";
+ public const string speaker_usb_20_regular = "\ueb53";
+ public const string speaker_usb_24_regular = "\ueb54";
+ public const string speaker_usb_28_regular = "\ueb55";
+ public const string spinner_ios_16_regular = "\U000f01f7";
+ public const string spinner_ios_20_regular = "\uf709";
+ public const string split_hint_20_regular = "\ueb56";
+ public const string split_horizontal_12_regular = "\ueb57";
+ public const string split_horizontal_16_regular = "\ueb58";
+ public const string split_horizontal_20_regular = "\ueb59";
+ public const string split_horizontal_24_regular = "\ueb5a";
+ public const string split_horizontal_28_regular = "\ueb5b";
+ public const string split_horizontal_32_regular = "\ueb5c";
+ public const string split_horizontal_48_regular = "\ueb5d";
+ public const string split_vertical_12_regular = "\ueb5e";
+ public const string split_vertical_16_regular = "\ueb5f";
+ public const string split_vertical_20_regular = "\ueb60";
+ public const string split_vertical_24_regular = "\ueb61";
+ public const string split_vertical_28_regular = "\ueb62";
+ public const string split_vertical_32_regular = "\ueb63";
+ public const string split_vertical_48_regular = "\ueb64";
+ public const string sport_16_regular = "\ueb65";
+ public const string sport_20_regular = "\ueb66";
+ public const string sport_24_regular = "\ueb67";
+ public const string sport_american_football_20_regular = "\ueb68";
+ public const string sport_american_football_24_regular = "\ueb69";
+ public const string sport_baseball_20_regular = "\ueb6a";
+ public const string sport_baseball_24_regular = "\ueb6b";
+ public const string sport_basketball_20_regular = "\ueb6c";
+ public const string sport_basketball_24_regular = "\ueb6d";
+ public const string sport_hockey_20_regular = "\ueb6e";
+ public const string sport_hockey_24_regular = "\ueb6f";
+ public const string sport_soccer_16_regular = "\ueb70";
+ public const string sport_soccer_20_regular = "\ueb71";
+ public const string sport_soccer_24_regular = "\ueb72";
+ public const string spray_can_16_regular = "\uf2da";
+ public const string square_28_regular = "\ueb77";
+ public const string square_32_regular = "\ueb78";
+ public const string square_48_regular = "\ueb79";
+ public const string square_add_16_regular = "\ueb7a";
+ public const string square_add_20_regular = "\ueb7b";
+ public const string square_arrow_forward_16_regular = "\ueb7c";
+ public const string square_arrow_forward_20_regular = "\ueb7d";
+ public const string square_arrow_forward_24_regular = "\ueb7e";
+ public const string square_arrow_forward_28_regular = "\ueb7f";
+ public const string square_arrow_forward_32_regular = "\ueb80";
+ public const string square_arrow_forward_48_regular = "\ueb81";
+ public const string square_dismiss_16_regular = "\ueb82";
+ public const string square_dismiss_20_regular = "\ueb83";
+ public const string square_dovetail_joint_12_regular = "\U000f0615";
+ public const string square_dovetail_joint_16_regular = "\U000f0616";
+ public const string square_dovetail_joint_20_regular = "\U000f0617";
+ public const string square_dovetail_joint_24_regular = "\U000f0618";
+ public const string square_dovetail_joint_28_regular = "\U000f0619";
+ public const string square_dovetail_joint_32_regular = "\U000f061a";
+ public const string square_dovetail_joint_48_regular = "\U000f061b";
+ public const string square_eraser_20_regular = "\ueb84";
+ public const string square_hint_16_regular = "\ueb85";
+ public const string square_hint_20_regular = "\ueb86";
+ public const string square_hint_24_regular = "\ueb87";
+ public const string square_hint_28_regular = "\ueb88";
+ public const string square_hint_32_regular = "\ueb89";
+ public const string square_hint_48_regular = "\ueb8a";
+ public const string square_hint_apps_20_regular = "\ueb8b";
+ public const string square_hint_apps_24_regular = "\ueb8c";
+ public const string square_hint_arrow_back_16_regular = "\ueb8d";
+ public const string square_hint_arrow_back_20_regular = "\ueb8e";
+ public const string square_hint_hexagon_12_regular = "\U000f0361";
+ public const string square_hint_hexagon_16_regular = "\U000f0362";
+ public const string square_hint_hexagon_20_regular = "\U000f0363";
+ public const string square_hint_hexagon_24_regular = "\U000f0364";
+ public const string square_hint_hexagon_28_regular = "\U000f0365";
+ public const string square_hint_hexagon_32_regular = "\U000f0366";
+ public const string square_hint_hexagon_48_regular = "\U000f0367";
+ public const string square_hint_sparkles_16_regular = "\ueb8f";
+ public const string square_hint_sparkles_20_regular = "\ueb90";
+ public const string square_hint_sparkles_24_regular = "\ueb91";
+ public const string square_hint_sparkles_28_regular = "\ueb92";
+ public const string square_hint_sparkles_32_regular = "\ueb93";
+ public const string square_hint_sparkles_48_regular = "\ueb94";
+ public const string square_multiple_16_regular = "\ueb95";
+ public const string square_multiple_20_regular = "\ueb96";
+ public const string square_multiple_24_regular = "\uf78c";
+ public const string square_multiple_28_regular = "\ueeb3";
+ public const string square_multiple_32_regular = "\ueeb4";
+ public const string square_multiple_48_regular = "\ueeb5";
+ public const string square_shadow_12_regular = "\ueb97";
+ public const string square_shadow_20_regular = "\ueb98";
+ public const string squares_nested_20_regular = "\ueb99";
+ public const string stack_16_regular = "\uf78d";
+ public const string stack_20_regular = "\uf792";
+ public const string stack_24_regular = "\uf7a6";
+ public const string stack_32_regular = "\ueedf";
+ public const string stack_add_20_regular = "\U000f0144";
+ public const string stack_add_24_regular = "\U000f0145";
+ public const string stack_arrow_forward_20_regular = "\ueb9a";
+ public const string stack_arrow_forward_24_regular = "\ueb9b";
+ public const string stack_star_16_regular = "\ueb9c";
+ public const string stack_star_20_regular = "\ueb9d";
+ public const string stack_star_24_regular = "\ueb9e";
+ public const string stack_vertical_20_regular = "\U000f00ff";
+ public const string stack_vertical_24_regular = "\U000f0100";
+ public const string star_12_regular = "\uf70d";
+ public const string star_16_regular = "\uf70e";
+ public const string star_20_regular = "\uf70f";
+ public const string star_24_regular = "\uf710";
+ public const string star_28_regular = "\uf711";
+ public const string star_32_regular = "\U000f045e";
+ public const string star_48_regular = "\ueb9f";
+ public const string star_add_16_regular = "\uf712";
+ public const string star_add_20_regular = "\uf713";
+ public const string star_add_24_regular = "\uf714";
+ public const string star_add_28_regular = "\ueba0";
+ public const string star_arrow_back_16_regular = "\U000f00ab";
+ public const string star_arrow_back_20_regular = "\U000f00ac";
+ public const string star_arrow_back_24_regular = "\U000f00ad";
+ public const string star_arrow_right_end_20_regular = "\ueba1";
+ public const string star_arrow_right_end_24_regular = "\ueba2";
+ public const string star_arrow_right_start_20_regular = "\ueba3";
+ public const string star_arrow_right_start_24_regular = "\uf716";
+ public const string star_checkmark_16_regular = "\U000f0146";
+ public const string star_checkmark_20_regular = "\U000f0147";
+ public const string star_checkmark_24_regular = "\U000f0148";
+ public const string star_checkmark_28_regular = "\U000f0149";
+ public const string star_dismiss_16_regular = "\ueba4";
+ public const string star_dismiss_20_regular = "\ueba5";
+ public const string star_dismiss_24_regular = "\ueba6";
+ public const string star_dismiss_28_regular = "\ueba7";
+ public const string star_edit_20_regular = "\ueba8";
+ public const string star_edit_24_regular = "\ueba9";
+ public const string star_emphasis_16_regular = "\U000f01f8";
+ public const string star_emphasis_20_regular = "\uebaa";
+ public const string star_emphasis_24_regular = "\uf717";
+ public const string star_emphasis_32_regular = "\uebab";
+ public const string star_half_12_regular = "\uebac";
+ public const string star_half_16_regular = "\uebad";
+ public const string star_half_20_regular = "\uebae";
+ public const string star_half_24_regular = "\uebaf";
+ public const string star_half_28_regular = "\uebb0";
+ public const string star_line_horizontal_3_16_regular = "\uebb1";
+ public const string star_line_horizontal_3_20_regular = "\uebb2";
+ public const string star_line_horizontal_3_24_regular = "\uebb3";
+ public const string star_off_12_regular = "\uf718";
+ public const string star_off_16_regular = "\uf719";
+ public const string star_off_20_regular = "\uf71a";
+ public const string star_off_24_regular = "\uf71b";
+ public const string star_off_28_regular = "\uf71c";
+ public const string star_one_quarter_12_regular = "\uebb4";
+ public const string star_one_quarter_16_regular = "\uebb5";
+ public const string star_one_quarter_20_regular = "\uebb6";
+ public const string star_one_quarter_24_regular = "\uebb7";
+ public const string star_one_quarter_28_regular = "\uebb8";
+ public const string star_prohibited_16_regular = "\uf71d";
+ public const string star_prohibited_20_regular = "\uf71e";
+ public const string star_prohibited_24_regular = "\uf71f";
+ public const string star_settings_20_regular = "\uebb9";
+ public const string star_settings_24_regular = "\uf720";
+ public const string star_three_quarter_12_regular = "\uebba";
+ public const string star_three_quarter_16_regular = "\uebbb";
+ public const string star_three_quarter_20_regular = "\uebbc";
+ public const string star_three_quarter_24_regular = "\uebbd";
+ public const string star_three_quarter_28_regular = "\uebbe";
+ public const string status_12_regular = "\uf001";
+ public const string status_16_regular = "\uf721";
+ public const string status_20_regular = "\uf722";
+ public const string status_24_regular = "\uf723";
+ public const string status_28_regular = "\U000f051d";
+ public const string status_32_regular = "\U000f051e";
+ public const string status_48_regular = "\U000f051f";
+ public const string step_16_regular = "\uf2e7";
+ public const string step_20_regular = "\U000f032d";
+ public const string step_24_regular = "\U000f032e";
+ public const string steps_16_regular = "\uf2e8";
+ public const string steps_20_regular = "\uebbf";
+ public const string steps_24_regular = "\uebc0";
+ public const string stethoscope_20_regular = "\uf724";
+ public const string stethoscope_24_regular = "\uf725";
+ public const string sticker_12_regular = "\uebc1";
+ public const string sticker_20_regular = "\uf726";
+ public const string sticker_24_regular = "\uf727";
+ public const string sticker_add_20_regular = "\uebc2";
+ public const string sticker_add_24_regular = "\uf728";
+ public const string stop_16_regular = "\uf729";
+ public const string stop_20_regular = "\uf72a";
+ public const string stop_24_regular = "\uf72b";
+ public const string storage_16_regular = "\U000f0544";
+ public const string storage_20_regular = "\uebc3";
+ public const string storage_24_regular = "\uf72c";
+ public const string storage_28_regular = "\U000f0545";
+ public const string storage_32_regular = "\U000f0546";
+ public const string storage_48_regular = "\U000f0547";
+ public const string store_microsoft_16_regular = "\uf730";
+ public const string store_microsoft_20_regular = "\uf731";
+ public const string store_microsoft_24_regular = "\uf732";
+ public const string stream_20_regular = "\uebc4";
+ public const string stream_24_regular = "\uebc5";
+ public const string stream_32_regular = "\U000f014a";
+ public const string stream_48_regular = "\U000f027c";
+ public const string stream_input_20_regular = "\uebc6";
+ public const string stream_input_output_20_regular = "\uebc7";
+ public const string stream_output_20_regular = "\uebc8";
+ public const string street_sign_20_regular = "\U000f04fa";
+ public const string street_sign_24_regular = "\U000f04fb";
+ public const string style_guide_20_regular = "\uebc9";
+ public const string style_guide_24_regular = "\uf733";
+ public const string sub_grid_20_regular = "\uebca";
+ public const string sub_grid_24_regular = "\uf734";
+ public const string subtitles_16_regular = "\uebcb";
+ public const string subtitles_20_regular = "\uebcc";
+ public const string subtitles_24_regular = "\uebcd";
+ public const string subtract_12_regular = "\uebce";
+ public const string subtract_16_regular = "\uebcf";
+ public const string subtract_20_regular = "\uebd0";
+ public const string subtract_24_regular = "\uebd1";
+ public const string subtract_28_regular = "\uebd2";
+ public const string subtract_48_regular = "\uebd3";
+ public const string subtract_circle_12_regular = "\uebd4";
+ public const string subtract_circle_16_regular = "\uf7a7";
+ public const string subtract_circle_20_regular = "\uf7b0";
+ public const string subtract_circle_24_regular = "\uf7b1";
+ public const string subtract_circle_28_regular = "\uf7b4";
+ public const string subtract_circle_32_regular = "\uf7b5";
+ public const string subtract_circle_48_regular = "\U000f03c8";
+ public const string subtract_circle_arrow_back_16_regular = "\uebd5";
+ public const string subtract_circle_arrow_back_20_regular = "\uebd6";
+ public const string subtract_circle_arrow_forward_16_regular = "\uebd7";
+ public const string subtract_circle_arrow_forward_20_regular = "\uebd8";
+ public const string subtract_parentheses_16_regular = "\U000f03c9";
+ public const string subtract_parentheses_20_regular = "\U000f03ca";
+ public const string subtract_parentheses_24_regular = "\U000f03cb";
+ public const string subtract_parentheses_28_regular = "\U000f03cc";
+ public const string subtract_parentheses_32_regular = "\U000f03cd";
+ public const string subtract_parentheses_48_regular = "\U000f03ce";
+ public const string subtract_square_16_regular = "\U000f014b";
+ public const string subtract_square_20_regular = "\uebd9";
+ public const string subtract_square_24_regular = "\uebda";
+ public const string subtract_square_multiple_16_regular = "\uebdb";
+ public const string subtract_square_multiple_20_regular = "\uebdc";
+ public const string surface_earbuds_20_regular = "\uf738";
+ public const string surface_earbuds_24_regular = "\uf739";
+ public const string surface_hub_20_regular = "\uf73a";
+ public const string surface_hub_24_regular = "\uf73b";
+ public const string swimming_pool_20_regular = "\uf054";
+ public const string swimming_pool_24_regular = "\uf055";
+ public const string swimming_pool_32_regular = "\uf056";
+ public const string swimming_pool_48_regular = "\uf057";
+ public const string swipe_down_20_regular = "\uebdd";
+ public const string swipe_down_24_regular = "\uf73c";
+ public const string swipe_right_20_regular = "\uebde";
+ public const string swipe_right_24_regular = "\uf73d";
+ public const string swipe_up_20_regular = "\uebdf";
+ public const string swipe_up_24_regular = "\uf73e";
+ public const string symbols_16_regular = "\uebe0";
+ public const string symbols_20_regular = "\uebe1";
+ public const string symbols_24_regular = "\uf73f";
+ public const string sync_off_16_regular = "\uf740";
+ public const string sync_off_20_regular = "\uf741";
+ public const string syringe_20_regular = "\uebe2";
+ public const string syringe_24_regular = "\uebe3";
+ public const string system_20_regular = "\uebe4";
+ public const string system_24_regular = "\uf742";
+ public const string tab_16_regular = "\uf743";
+ public const string tab_20_regular = "\uf744";
+ public const string tab_add_20_regular = "\uebe5";
+ public const string tab_add_24_regular = "\uebe6";
+ public const string tab_arrow_left_20_regular = "\uebe7";
+ public const string tab_arrow_left_24_regular = "\uebe8";
+ public const string tab_desktop_16_regular = "\uebe9";
+ public const string tab_desktop_20_regular = "\uf747";
+ public const string tab_desktop_24_regular = "\uebea";
+ public const string tab_desktop_28_regular = "\U000f023f";
+ public const string tab_desktop_arrow_clockwise_16_regular = "\uf748";
+ public const string tab_desktop_arrow_clockwise_20_regular = "\uf749";
+ public const string tab_desktop_arrow_clockwise_24_regular = "\uf74a";
+ public const string tab_desktop_arrow_left_20_regular = "\uebeb";
+ public const string tab_desktop_bottom_20_regular = "\uebec";
+ public const string tab_desktop_bottom_24_regular = "\uebed";
+ public const string tab_desktop_clock_20_regular = "\uf74b";
+ public const string tab_desktop_copy_20_regular = "\uf74c";
+ public const string tab_desktop_image_16_regular = "\uf74d";
+ public const string tab_desktop_image_20_regular = "\uf74e";
+ public const string tab_desktop_image_24_regular = "\uf74f";
+ public const string tab_desktop_link_16_regular = "\U000f0240";
+ public const string tab_desktop_link_20_regular = "\U000f0241";
+ public const string tab_desktop_link_24_regular = "\U000f0242";
+ public const string tab_desktop_link_28_regular = "\U000f0243";
+ public const string tab_desktop_multiple_16_regular = "\U000f0368";
+ public const string tab_desktop_multiple_20_regular = "\uf750";
+ public const string tab_desktop_multiple_24_regular = "\U000f057a";
+ public const string tab_desktop_multiple_add_16_regular = "\U000f0369";
+ public const string tab_desktop_multiple_add_20_regular = "\U000f032f";
+ public const string tab_desktop_multiple_bottom_20_regular = "\uebee";
+ public const string tab_desktop_multiple_bottom_24_regular = "\uebef";
+ public const string tab_desktop_multiple_sparkle_16_regular = "\U000f057b";
+ public const string tab_desktop_multiple_sparkle_20_regular = "\U000f057c";
+ public const string tab_desktop_multiple_sparkle_24_regular = "\U000f057d";
+ public const string tab_desktop_new_page_20_regular = "\uf751";
+ public const string tab_desktop_search_16_regular = "\U000f05e1";
+ public const string tab_desktop_search_20_regular = "\U000f05e2";
+ public const string tab_desktop_search_24_regular = "\U000f05e3";
+ public const string tab_group_16_regular = "\U000f05b9";
+ public const string tab_group_20_regular = "\U000f05ba";
+ public const string tab_group_24_regular = "\U000f05bb";
+ public const string tab_in_private_16_regular = "\uf752";
+ public const string tab_in_private_20_regular = "\uf753";
+ public const string tab_in_private_24_regular = "\uf754";
+ public const string tab_in_private_28_regular = "\uf755";
+ public const string tab_inprivate_account_20_regular = "\uf756";
+ public const string tab_inprivate_account_24_regular = "\uf757";
+ public const string tab_prohibited_20_regular = "\uebf0";
+ public const string tab_prohibited_24_regular = "\uebf1";
+ public const string tab_shield_dismiss_20_regular = "\uebf2";
+ public const string tab_shield_dismiss_24_regular = "\uebf3";
+ public const string table_16_regular = "\uebf4";
+ public const string table_20_regular = "\uf75d";
+ public const string table_24_regular = "\uf75e";
+ public const string table_28_regular = "\uebf5";
+ public const string table_32_regular = "\uebf6";
+ public const string table_48_regular = "\uebf7";
+ public const string table_add_16_regular = "\uebf8";
+ public const string table_add_20_regular = "\uebf9";
+ public const string table_add_24_regular = "\uf75f";
+ public const string table_add_28_regular = "\uebfa";
+ public const string table_arrow_up_20_regular = "\U000f0244";
+ public const string table_arrow_up_24_regular = "\U000f0245";
+ public const string table_bottom_row_16_regular = "\uebfb";
+ public const string table_bottom_row_20_regular = "\uebfc";
+ public const string table_bottom_row_24_regular = "\uebfd";
+ public const string table_bottom_row_28_regular = "\uebfe";
+ public const string table_bottom_row_32_regular = "\uebff";
+ public const string table_bottom_row_48_regular = "\uec00";
+ public const string table_calculator_16_regular = "\uf08e";
+ public const string table_calculator_20_regular = "\ueeb6";
+ public const string table_cell_edit_16_regular = "\uec01";
+ public const string table_cell_edit_20_regular = "\uec02";
+ public const string table_cell_edit_24_regular = "\uec03";
+ public const string table_cell_edit_28_regular = "\uec04";
+ public const string table_cells_merge_16_regular = "\uec05";
+ public const string table_cells_merge_20_regular = "\uf760";
+ public const string table_cells_merge_24_regular = "\uf761";
+ public const string table_cells_merge_28_regular = "\uec06";
+ public const string table_cells_split_16_regular = "\uec07";
+ public const string table_cells_split_20_regular = "\uf762";
+ public const string table_cells_split_24_regular = "\uf763";
+ public const string table_cells_split_28_regular = "\uec08";
+ public const string table_checker_20_regular = "\uec09";
+ public const string table_column_top_bottom_20_regular = "\U000f0101";
+ public const string table_column_top_bottom_24_regular = "\U000f0102";
+ public const string table_copy_20_regular = "\uec0a";
+ public const string table_cursor_16_regular = "\U000f061c";
+ public const string table_cursor_20_regular = "\U000f061d";
+ public const string table_cursor_24_regular = "\U000f061e";
+ public const string table_default_32_regular = "\U000f014c";
+ public const string table_delete_column_16_regular = "\uec0b";
+ public const string table_delete_column_20_regular = "\uec0c";
+ public const string table_delete_column_24_regular = "\uec0d";
+ public const string table_delete_column_28_regular = "\uec0e";
+ public const string table_delete_row_16_regular = "\uec0f";
+ public const string table_delete_row_20_regular = "\uec10";
+ public const string table_delete_row_24_regular = "\uec11";
+ public const string table_delete_row_28_regular = "\uec12";
+ public const string table_dismiss_16_regular = "\uec13";
+ public const string table_dismiss_20_regular = "\uec14";
+ public const string table_dismiss_24_regular = "\uec15";
+ public const string table_dismiss_28_regular = "\uec16";
+ public const string table_edit_16_regular = "\uec17";
+ public const string table_edit_20_regular = "\uec18";
+ public const string table_edit_24_regular = "\uf768";
+ public const string table_edit_28_regular = "\uec19";
+ public const string table_freeze_column_16_regular = "\uec1a";
+ public const string table_freeze_column_20_regular = "\uec1b";
+ public const string table_freeze_column_24_regular = "\uf76a";
+ public const string table_freeze_column_28_regular = "\uec1c";
+ public const string table_freeze_column_and_row_16_regular = "\uec1d";
+ public const string table_freeze_column_and_row_20_regular = "\uec1e";
+ public const string table_freeze_column_and_row_24_regular = "\uec1f";
+ public const string table_freeze_column_and_row_28_regular = "\uec20";
+ public const string table_freeze_row_16_regular = "\uec21";
+ public const string table_freeze_row_20_regular = "\uec22";
+ public const string table_freeze_row_24_regular = "\uf76b";
+ public const string table_freeze_row_28_regular = "\uec23";
+ public const string table_image_20_regular = "\uec24";
+ public const string table_insert_column_16_regular = "\uec25";
+ public const string table_insert_column_20_regular = "\uec26";
+ public const string table_insert_column_24_regular = "\uec27";
+ public const string table_insert_column_28_regular = "\uec28";
+ public const string table_insert_row_16_regular = "\uec29";
+ public const string table_insert_row_20_regular = "\uec2a";
+ public const string table_insert_row_24_regular = "\uec2b";
+ public const string table_insert_row_28_regular = "\uec2c";
+ public const string table_lightning_16_regular = "\uec2d";
+ public const string table_lightning_20_regular = "\uec2e";
+ public const string table_lightning_24_regular = "\uec2f";
+ public const string table_lightning_28_regular = "\uec30";
+ public const string table_link_16_regular = "\uec31";
+ public const string table_link_20_regular = "\uec32";
+ public const string table_link_24_regular = "\uec33";
+ public const string table_link_28_regular = "\uec34";
+ public const string table_lock_16_regular = "\uf2e9";
+ public const string table_lock_20_regular = "\uf2ec";
+ public const string table_lock_24_regular = "\uf2ed";
+ public const string table_lock_28_regular = "\uf2ee";
+ public const string table_lock_32_regular = "\uf302";
+ public const string table_lock_48_regular = "\uf309";
+ public const string table_move_above_16_regular = "\uec35";
+ public const string table_move_above_20_regular = "\uec36";
+ public const string table_move_above_24_regular = "\uec37";
+ public const string table_move_above_28_regular = "\uec38";
+ public const string table_move_below_16_regular = "\uec39";
+ public const string table_move_below_20_regular = "\uec3a";
+ public const string table_move_below_24_regular = "\uec3b";
+ public const string table_move_below_28_regular = "\uec3c";
+ public const string table_move_left_16_regular = "\uec3d";
+ public const string table_move_left_20_regular = "\uec3e";
+ public const string table_move_left_24_regular = "\uf771";
+ public const string table_move_left_28_regular = "\uec3f";
+ public const string table_move_right_16_regular = "\uec40";
+ public const string table_move_right_20_regular = "\uec41";
+ public const string table_move_right_24_regular = "\uf772";
+ public const string table_move_right_28_regular = "\uec42";
+ public const string table_multiple_20_regular = "\uec43";
+ public const string table_offset_20_regular = "\U000f0103";
+ public const string table_offset_24_regular = "\U000f0104";
+ public const string table_offset_add_20_regular = "\U000f0105";
+ public const string table_offset_add_24_regular = "\U000f0106";
+ public const string table_offset_less_than_or_equal_to_20_regular = "\U000f0107";
+ public const string table_offset_less_than_or_equal_to_24_regular = "\U000f0108";
+ public const string table_offset_settings_20_regular = "\U000f0109";
+ public const string table_offset_settings_24_regular = "\U000f010a";
+ public const string table_resize_column_16_regular = "\uec44";
+ public const string table_resize_column_20_regular = "\uec45";
+ public const string table_resize_column_24_regular = "\uec46";
+ public const string table_resize_column_28_regular = "\uec47";
+ public const string table_resize_row_16_regular = "\uec48";
+ public const string table_resize_row_20_regular = "\uec49";
+ public const string table_resize_row_24_regular = "\uec4a";
+ public const string table_resize_row_28_regular = "\uec4b";
+ public const string table_search_20_regular = "\uec4c";
+ public const string table_settings_16_regular = "\uec4d";
+ public const string table_settings_20_regular = "\uec4e";
+ public const string table_settings_24_regular = "\uf777";
+ public const string table_settings_28_regular = "\uec4f";
+ public const string table_simple_16_regular = "\uec50";
+ public const string table_simple_20_regular = "\uec51";
+ public const string table_simple_28_regular = "\uec53";
+ public const string table_simple_32_regular = "\U000f014d";
+ public const string table_simple_48_regular = "\uec54";
+ public const string table_simple_checkmark_16_regular = "\uf08f";
+ public const string table_simple_checkmark_20_regular = "\uf090";
+ public const string table_simple_checkmark_24_regular = "\uf091";
+ public const string table_simple_checkmark_28_regular = "\uf092";
+ public const string table_simple_checkmark_32_regular = "\uf093";
+ public const string table_simple_checkmark_48_regular = "\uf094";
+ public const string table_simple_exclude_16_regular = "\U000f014e";
+ public const string table_simple_exclude_20_regular = "\U000f014f";
+ public const string table_simple_exclude_24_regular = "\U000f0150";
+ public const string table_simple_exclude_28_regular = "\U000f0151";
+ public const string table_simple_exclude_32_regular = "\U000f0152";
+ public const string table_simple_exclude_48_regular = "\U000f0153";
+ public const string table_simple_include_16_regular = "\U000f0154";
+ public const string table_simple_include_20_regular = "\U000f0155";
+ public const string table_simple_include_24_regular = "\U000f0156";
+ public const string table_simple_include_28_regular = "\U000f0157";
+ public const string table_simple_include_32_regular = "\U000f0158";
+ public const string table_simple_include_48_regular = "\U000f0159";
+ public const string table_simple_multiple_20_regular = "\U000f00ae";
+ public const string table_simple_multiple_24_regular = "\U000f00af";
+ public const string table_sparkle_20_regular = "\U000f05e4";
+ public const string table_sparkle_24_regular = "\U000f05e5";
+ public const string table_split_20_regular = "\uec55";
+ public const string table_stack_above_16_regular = "\uec56";
+ public const string table_stack_above_20_regular = "\uec57";
+ public const string table_stack_above_24_regular = "\uec58";
+ public const string table_stack_above_28_regular = "\uec59";
+ public const string table_stack_below_16_regular = "\uec5a";
+ public const string table_stack_below_20_regular = "\uec5b";
+ public const string table_stack_below_24_regular = "\uec5c";
+ public const string table_stack_below_28_regular = "\uec5d";
+ public const string table_stack_left_16_regular = "\uec5e";
+ public const string table_stack_left_20_regular = "\uec5f";
+ public const string table_stack_left_24_regular = "\uec60";
+ public const string table_stack_left_28_regular = "\uec61";
+ public const string table_stack_right_16_regular = "\uec62";
+ public const string table_stack_right_20_regular = "\uec63";
+ public const string table_stack_right_24_regular = "\uec64";
+ public const string table_stack_right_28_regular = "\uec65";
+ public const string table_switch_16_regular = "\uec66";
+ public const string table_switch_20_regular = "\uec67";
+ public const string table_switch_24_regular = "\uf778";
+ public const string table_switch_28_regular = "\uec68";
+ public const string tablet_12_regular = "\uec69";
+ public const string tablet_16_regular = "\uec6a";
+ public const string tablet_20_regular = "\uf779";
+ public const string tablet_24_regular = "\uf77a";
+ public const string tablet_32_regular = "\uec6b";
+ public const string tablet_48_regular = "\uec6c";
+ public const string tablet_laptop_20_regular = "\U000f015a";
+ public const string tablet_laptop_24_regular = "\U000f0246";
+ public const string tablet_speaker_20_regular = "\uec6d";
+ public const string tablet_speaker_24_regular = "\uec6e";
+ public const string tabs_16_regular = "\uf095";
+ public const string tabs_20_regular = "\uec6f";
+ public const string tabs_24_regular = "\uf77b";
+ public const string tag_16_regular = "\uec70";
+ public const string tag_20_regular = "\uf77c";
+ public const string tag_24_regular = "\uf77d";
+ public const string tag_28_regular = "\uec71";
+ public const string tag_32_regular = "\uec72";
+ public const string tag_circle_20_regular = "\uec73";
+ public const string tag_dismiss_16_regular = "\uec74";
+ public const string tag_dismiss_20_regular = "\uec75";
+ public const string tag_dismiss_24_regular = "\uec76";
+ public const string tag_error_16_regular = "\uec77";
+ public const string tag_error_20_regular = "\uec78";
+ public const string tag_error_24_regular = "\uec79";
+ public const string tag_lock_16_regular = "\uec7a";
+ public const string tag_lock_20_regular = "\uec7b";
+ public const string tag_lock_24_regular = "\uec7c";
+ public const string tag_lock_32_regular = "\uec7d";
+ public const string tag_multiple_16_regular = "\uf7b6";
+ public const string tag_multiple_20_regular = "\uec7e";
+ public const string tag_multiple_24_regular = "\uec7f";
+ public const string tag_off_16_regular = "\U000f05f4";
+ public const string tag_off_20_regular = "\uec80";
+ public const string tag_off_24_regular = "\uec81";
+ public const string tag_question_mark_16_regular = "\uec82";
+ public const string tag_question_mark_20_regular = "\uec83";
+ public const string tag_question_mark_24_regular = "\uec84";
+ public const string tag_question_mark_32_regular = "\uec85";
+ public const string tag_reset_20_regular = "\uec86";
+ public const string tag_reset_24_regular = "\uec87";
+ public const string tag_search_20_regular = "\uec88";
+ public const string tag_search_24_regular = "\uec89";
+ public const string tap_double_20_regular = "\uec8a";
+ public const string tap_double_24_regular = "\uf77e";
+ public const string tap_double_32_regular = "\uec8b";
+ public const string tap_double_48_regular = "\uec8c";
+ public const string tap_single_20_regular = "\uec8d";
+ public const string tap_single_24_regular = "\uf77f";
+ public const string tap_single_32_regular = "\uec8e";
+ public const string tap_single_48_regular = "\uec8f";
+ public const string target_16_regular = "\uf780";
+ public const string target_20_regular = "\uf781";
+ public const string target_24_regular = "\uf782";
+ public const string target_32_regular = "\uec90";
+ public const string target_add_20_regular = "\U000f036a";
+ public const string target_add_24_regular = "\U000f036b";
+ public const string target_arrow_16_regular = "\uf7b7";
+ public const string target_arrow_20_regular = "\uf7b8";
+ public const string target_arrow_24_regular = "\uec91";
+ public const string target_dismiss_20_regular = "\U000f036c";
+ public const string target_dismiss_24_regular = "\U000f036d";
+ public const string target_edit_16_regular = "\uf783";
+ public const string target_edit_20_regular = "\uf784";
+ public const string target_edit_24_regular = "\uf785";
+ public const string task_list_add_20_regular = "\uf788";
+ public const string task_list_add_24_regular = "\uf789";
+ public const string task_list_ltr_20_regular = "\uec92";
+ public const string task_list_ltr_24_regular = "\uec93";
+ public const string task_list_rtl_20_regular = "\uec94";
+ public const string task_list_rtl_24_regular = "\uec95";
+ public const string task_list_square_add_20_regular = "\uec96";
+ public const string task_list_square_add_24_regular = "\uec97";
+ public const string task_list_square_database_20_regular = "\uec98";
+ public const string task_list_square_ltr_16_regular = "\uefad";
+ public const string task_list_square_ltr_20_regular = "\uec99";
+ public const string task_list_square_ltr_24_regular = "\uec9a";
+ public const string task_list_square_person_20_regular = "\uec9b";
+ public const string task_list_square_rtl_16_regular = "\uefae";
+ public const string task_list_square_rtl_20_regular = "\uec9c";
+ public const string task_list_square_rtl_24_regular = "\uec9d";
+ public const string task_list_square_settings_20_regular = "\uec9e";
+ public const string tasks_app_20_regular = "\uec9f";
+ public const string tasks_app_24_regular = "\uf78a";
+ public const string tasks_app_28_regular = "\uf78b";
+ public const string teardrop_bottom_right_16_regular = "\U000f039d";
+ public const string teardrop_bottom_right_20_regular = "\U000f039e";
+ public const string teardrop_bottom_right_24_regular = "\U000f039f";
+ public const string teardrop_bottom_right_28_regular = "\U000f03a0";
+ public const string teardrop_bottom_right_32_regular = "\U000f03a1";
+ public const string teardrop_bottom_right_48_regular = "\U000f03a2";
+ public const string teddy_20_regular = "\ueca0";
+ public const string teddy_24_regular = "\uf78e";
+ public const string temperature_16_regular = "\ueca1";
+ public const string temperature_20_regular = "\uf78f";
+ public const string temperature_24_regular = "\uf790";
+ public const string temperature_32_regular = "\uf058";
+ public const string temperature_48_regular = "\uf059";
+ public const string tent_12_regular = "\ueca2";
+ public const string tent_16_regular = "\ueca3";
+ public const string tent_20_regular = "\ueca4";
+ public const string tent_24_regular = "\uf791";
+ public const string tent_28_regular = "\ueca5";
+ public const string tent_48_regular = "\ueca6";
+ public const string tetris_app_16_regular = "\ueca7";
+ public const string tetris_app_20_regular = "\ueca8";
+ public const string tetris_app_24_regular = "\ueca9";
+ public const string tetris_app_28_regular = "\uecaa";
+ public const string tetris_app_32_regular = "\uecab";
+ public const string tetris_app_48_regular = "\uecac";
+ public const string text_12_regular = "\uecad";
+ public const string text_16_regular = "\uecae";
+ public const string text_32_regular = "\uecaf";
+ public const string text_abc_underline_double_32_regular = "\U000f00b0";
+ public const string text_add_20_regular = "\uecb0";
+ public const string text_add_space_after_20_regular = "\uf795";
+ public const string text_add_space_after_24_regular = "\uf796";
+ public const string text_add_space_before_20_regular = "\uf797";
+ public const string text_add_space_before_24_regular = "\uf798";
+ public const string text_add_t_24_regular = "\uecb1";
+ public const string text_align_center_16_regular = "\uecb2";
+ public const string text_align_center_20_regular = "\uf799";
+ public const string text_align_center_24_regular = "\uf79a";
+ public const string text_align_center_rotate_270_16_regular = "\uecb3";
+ public const string text_align_center_rotate_270_20_regular = "\uecb4";
+ public const string text_align_center_rotate_270_24_regular = "\uecb5";
+ public const string text_align_center_rotate_90_16_regular = "\uecb6";
+ public const string text_align_center_rotate_90_20_regular = "\uecb7";
+ public const string text_align_center_rotate_90_24_regular = "\uecb8";
+ public const string text_align_distributed_20_regular = "\uf79b";
+ public const string text_align_distributed_24_regular = "\uf79c";
+ public const string text_align_distributed_evenly_20_regular = "\uecb9";
+ public const string text_align_distributed_evenly_24_regular = "\uecba";
+ public const string text_align_distributed_vertical_20_regular = "\uecbb";
+ public const string text_align_distributed_vertical_24_regular = "\uecbc";
+ public const string text_align_justify_24_regular = "\uf79e";
+ public const string text_align_justify_low_20_regular = "\uecbd";
+ public const string text_align_justify_low_24_regular = "\uecbe";
+ public const string text_align_justify_low_rotate_90_20_regular = "\ueee2";
+ public const string text_align_justify_low_rotate_90_24_regular = "\ueee3";
+ public const string text_align_justify_low_rotate_270_20_regular = "\ueee0";
+ public const string text_align_justify_low_rotate_270_24_regular = "\ueee1";
+ public const string text_align_justify_rotate_270_20_regular = "\uecbf";
+ public const string text_align_justify_rotate_270_24_regular = "\uecc0";
+ public const string text_align_justify_rotate_90_20_regular = "\uecc1";
+ public const string text_align_justify_rotate_90_24_regular = "\uecc2";
+ public const string text_align_left_16_regular = "\uecc3";
+ public const string text_align_left_20_regular = "\uf79f";
+ public const string text_align_left_24_regular = "\uf7a0";
+ public const string text_align_left_rotate_270_16_regular = "\uecc4";
+ public const string text_align_left_rotate_270_20_regular = "\uecc5";
+ public const string text_align_left_rotate_270_24_regular = "\uecc6";
+ public const string text_align_left_rotate_90_16_regular = "\uecc7";
+ public const string text_align_left_rotate_90_20_regular = "\uecc8";
+ public const string text_align_left_rotate_90_24_regular = "\uecc9";
+ public const string text_align_right_16_regular = "\uecca";
+ public const string text_align_right_20_regular = "\uf7a1";
+ public const string text_align_right_24_regular = "\uf7a2";
+ public const string text_align_right_rotate_270_16_regular = "\ueccb";
+ public const string text_align_right_rotate_270_20_regular = "\ueccc";
+ public const string text_align_right_rotate_270_24_regular = "\ueccd";
+ public const string text_align_right_rotate_90_16_regular = "\uecce";
+ public const string text_align_right_rotate_90_20_regular = "\ueccf";
+ public const string text_align_right_rotate_90_24_regular = "\uecd0";
+ public const string text_arrow_down_right_column_16_regular = "\U000f04bc";
+ public const string text_arrow_down_right_column_20_regular = "\U000f04bd";
+ public const string text_arrow_down_right_column_24_regular = "\U000f04be";
+ public const string text_arrow_down_right_column_28_regular = "\U000f04bf";
+ public const string text_arrow_down_right_column_32_regular = "\U000f04c0";
+ public const string text_arrow_down_right_column_48_regular = "\U000f04c1";
+ public const string text_asterisk_16_regular = "\U000f03a7";
+ public const string text_asterisk_20_regular = "\uf7a3";
+ public const string text_baseline_20_regular = "\uecd1";
+ public const string text_bold_16_regular = "\uecd2";
+ public const string text_bold_20_regular = "\uf7a4";
+ public const string text_bold_24_regular = "\uf7a5";
+ public const string text_box_settings_20_regular = "\uecd3";
+ public const string text_box_settings_24_regular = "\uecd4";
+ public const string text_bullet_list_ltr_16_regular = "\uecd8";
+ public const string text_bullet_list_ltr_20_regular = "\uecd9";
+ public const string text_bullet_list_ltr_24_regular = "\uecda";
+ public const string text_bullet_list_ltr_rotate_270_24_regular = "\uef85";
+ public const string text_bullet_list_rtl_90_20_regular = "\uef86";
+ public const string text_bullet_list_ltr_90_24_regular = "\uef84";
+ public const string text_bullet_list_add_20_regular = "\uecd5";
+ public const string text_bullet_list_add_24_regular = "\uf7a8";
+ public const string text_bullet_list_checkmark_20_regular = "\uecd6";
+ public const string text_bullet_list_dismiss_20_regular = "\uecd7";
+ public const string text_bullet_list_ltr_90_20_regular = "\uef83";
+ public const string text_bullet_list_rtl_16_regular = "\uecdf";
+ public const string text_bullet_list_rtl_20_regular = "\uece0";
+ public const string text_bullet_list_rtl_24_regular = "\uece1";
+ public const string text_bullet_list_square_16_regular = "\U000f01ad";
+ public const string text_bullet_list_square_20_regular = "\uece2";
+ public const string text_bullet_list_square_24_regular = "\uf7a9";
+ public const string text_bullet_list_square_32_regular = "\U000f01ae";
+ public const string text_bullet_list_square_48_regular = "\U000f027d";
+ public const string text_bullet_list_square_clock_20_regular = "\uece3";
+ public const string text_bullet_list_square_edit_20_regular = "\uf7b9";
+ public const string text_bullet_list_square_edit_24_regular = "\uf7ba";
+ public const string text_bullet_list_square_person_20_regular = "\uece4";
+ public const string text_bullet_list_square_person_32_regular = "\uefd3";
+ public const string text_bullet_list_square_search_20_regular = "\uece5";
+ public const string text_bullet_list_square_settings_20_regular = "\uece6";
+ public const string text_bullet_list_square_shield_20_regular = "\uece7";
+ public const string text_bullet_list_square_shield_48_regular = "\U000f027e";
+ public const string text_bullet_list_square_sparkle_16_regular = "\U000f01af";
+ public const string text_bullet_list_square_sparkle_20_regular = "\U000f01b0";
+ public const string text_bullet_list_square_sparkle_24_regular = "\U000f01b1";
+ public const string text_bullet_list_square_toolbox_20_regular = "\uece8";
+ public const string text_bullet_list_square_warning_16_regular = "\uf7aa";
+ public const string text_bullet_list_square_warning_20_regular = "\uf7ab";
+ public const string text_bullet_list_square_warning_24_regular = "\uf7ac";
+ public const string text_bullet_list_tree_16_regular = "\uf7ad";
+ public const string text_bullet_list_tree_20_regular = "\uf7ae";
+ public const string text_bullet_list_tree_24_regular = "\uf7af";
+ public const string text_case_lowercase_16_regular = "\uece9";
+ public const string text_case_lowercase_20_regular = "\uecea";
+ public const string text_case_lowercase_24_regular = "\ueceb";
+ public const string text_case_title_16_regular = "\uecec";
+ public const string text_case_title_20_regular = "\ueced";
+ public const string text_case_title_24_regular = "\uecee";
+ public const string text_case_uppercase_16_regular = "\uecef";
+ public const string text_case_uppercase_20_regular = "\uecf0";
+ public const string text_case_uppercase_24_regular = "\uecf1";
+ public const string text_change_case_16_regular = "\uecf2";
+ public const string text_change_case_20_regular = "\uf7b2";
+ public const string text_change_case_24_regular = "\uf7b3";
+ public const string text_clear_formatting_16_regular = "\uecf3";
+ public const string text_clear_formatting_20_regular = "\uf7bc";
+ public const string text_clear_formatting_24_regular = "\uf7bd";
+ public const string text_collapse_20_regular = "\uecf4";
+ public const string text_collapse_24_regular = "\uf7be";
+ public const string text_color_16_regular = "\uecf5";
+ public const string text_color_20_regular = "\uf7bf";
+ public const string text_color_24_regular = "\uf7c0";
+ public const string text_column_one_20_regular = "\uf7c1";
+ public const string text_column_one_24_regular = "\uf7c2";
+ public const string text_column_one_narrow_20_regular = "\uecf6";
+ public const string text_column_one_narrow_24_regular = "\uecf7";
+ public const string text_column_one_semi_narrow_20_regular = "\U000f00b1";
+ public const string text_column_one_semi_narrow_24_regular = "\U000f00b2";
+ public const string text_column_one_wide_20_regular = "\uecf8";
+ public const string text_column_one_wide_24_regular = "\uecf9";
+ public const string text_column_one_wide_lightning_16_regular = "\U000f05f5";
+ public const string text_column_one_wide_lightning_20_regular = "\uecfa";
+ public const string text_column_one_wide_lightning_24_regular = "\uecfb";
+ public const string text_column_three_20_regular = "\uf7c3";
+ public const string text_column_three_24_regular = "\uf7c4";
+ public const string text_column_two_20_regular = "\uf7c5";
+ public const string text_column_two_24_regular = "\uf7c6";
+ public const string text_column_two_left_20_regular = "\uf7c7";
+ public const string text_column_two_left_24_regular = "\uf7c8";
+ public const string text_column_two_right_20_regular = "\uf7c9";
+ public const string text_column_two_right_24_regular = "\uf7ca";
+ public const string text_continuous_20_regular = "\uecfc";
+ public const string text_continuous_24_regular = "\uecfd";
+ public const string text_density_16_regular = "\uecfe";
+ public const string text_density_20_regular = "\uecff";
+ public const string text_density_24_regular = "\ued00";
+ public const string text_density_28_regular = "\ued01";
+ public const string text_density_32_regular = "\U000f045f";
+ public const string text_description_16_regular = "\U000f0330";
+ public const string text_description_ltr_20_regular = "\uef87";
+ public const string text_description_ltr_24_regular = "\uef88";
+ public const string text_description_28_regular = "\U000f0331";
+ public const string text_description_32_regular = "\U000f0332";
+ public const string text_description_rtl_20_regular = "\uef89";
+ public const string text_description_rtl_24_regular = "\uef8a";
+ public const string text_direction_horizontal_left_20_regular = "\ued02";
+ public const string text_direction_horizontal_left_24_regular = "\ued03";
+ public const string text_direction_horizontal_right_20_regular = "\ued04";
+ public const string text_direction_horizontal_right_24_regular = "\ued05";
+ public const string text_direction_rotate_270_right_20_regular = "\ued06";
+ public const string text_direction_rotate_270_right_24_regular = "\ued07";
+ public const string text_direction_rotate_315_right_20_regular = "\U000f01f9";
+ public const string text_direction_rotate_315_right_24_regular = "\U000f01fa";
+ public const string text_direction_rotate_45_right_20_regular = "\U000f01fb";
+ public const string text_direction_rotate_45_right_24_regular = "\U000f01fc";
+ public const string text_direction_rotate_90_left_20_regular = "\ued08";
+ public const string text_direction_rotate_90_left_24_regular = "\ued09";
+ public const string text_direction_rotate_90_right_20_regular = "\ued0a";
+ public const string text_direction_rotate_90_right_24_regular = "\ued0b";
+ public const string text_direction_vertical_20_regular = "\uf7d7";
+ public const string text_direction_vertical_24_regular = "\uf7d8";
+ public const string text_edit_style_16_regular = "\U000f03a3";
+ public const string text_edit_style_20_regular = "\uf7d9";
+ public const string text_edit_style_24_regular = "\uf7da";
+ public const string text_edit_style_character_a_32_regular = "\U000f0460";
+ public const string text_edit_style_character_ga_32_regular = "\U000f04e2";
+ public const string text_effects_20_regular = "\uf7db";
+ public const string text_effects_24_regular = "\uf7dc";
+ public const string text_effects_sparkle_20_regular = "\U000f04c2";
+ public const string text_effects_sparkle_24_regular = "\U000f04c3";
+ public const string text_expand_16_regular = "\U000f00b3";
+ public const string text_expand_20_regular = "\ued0c";
+ public const string text_expand_24_regular = "\uf7dd";
+ public const string text_field_16_regular = "\uf7de";
+ public const string text_field_20_regular = "\uf7df";
+ public const string text_field_24_regular = "\uf7e0";
+ public const string text_first_line_20_regular = "\uf7e1";
+ public const string text_first_line_24_regular = "\uf7e2";
+ public const string text_font_16_regular = "\uf7e3";
+ public const string text_font_20_regular = "\uf7e4";
+ public const string text_font_24_regular = "\uf7e5";
+ public const string text_font_info_16_regular = "\ued0d";
+ public const string text_font_info_20_regular = "\ued0e";
+ public const string text_font_info_24_regular = "\ued0f";
+ public const string text_font_size_16_regular = "\ued10";
+ public const string text_font_size_20_regular = "\uf7e6";
+ public const string text_font_size_24_regular = "\uf7e7";
+ public const string text_footnote_20_regular = "\uf7e8";
+ public const string text_footnote_24_regular = "\uf7e9";
+ public const string text_grammar_arrow_left_20_regular = "\ued11";
+ public const string text_grammar_arrow_left_24_regular = "\ued12";
+ public const string text_grammar_arrow_right_20_regular = "\ued13";
+ public const string text_grammar_arrow_right_24_regular = "\ued14";
+ public const string text_grammar_checkmark_20_regular = "\ued15";
+ public const string text_grammar_checkmark_24_regular = "\ued16";
+ public const string text_grammar_dismiss_20_regular = "\ued17";
+ public const string text_grammar_dismiss_24_regular = "\ued18";
+ public const string text_grammar_error_20_regular = "\ued19";
+ public const string text_grammar_lightning_16_regular = "\U000f0333";
+ public const string text_grammar_lightning_20_regular = "\U000f0334";
+ public const string text_grammar_lightning_24_regular = "\U000f0335";
+ public const string text_grammar_lightning_28_regular = "\U000f0336";
+ public const string text_grammar_lightning_32_regular = "\U000f0337";
+ public const string text_grammar_settings_20_regular = "\ued1a";
+ public const string text_grammar_settings_24_regular = "\ued1b";
+ public const string text_grammar_wand_16_regular = "\ued1c";
+ public const string text_grammar_wand_20_regular = "\ued1d";
+ public const string text_grammar_wand_24_regular = "\ued1e";
+ public const string text_hanging_20_regular = "\uf7ed";
+ public const string text_hanging_24_regular = "\uf7ee";
+ public const string text_header_1_20_regular = "\uf7ef";
+ public const string text_header_1_24_regular = "\ued1f";
+ public const string text_header_1_lines_16_regular = "\U000f036e";
+ public const string text_header_1_lines_20_regular = "\U000f036f";
+ public const string text_header_1_lines_24_regular = "\U000f0370";
+ public const string text_header_1_lines_caret_16_regular = "\U000f0371";
+ public const string text_header_1_lines_caret_20_regular = "\U000f0372";
+ public const string text_header_1_lines_caret_24_regular = "\U000f0373";
+ public const string text_header_2_20_regular = "\uf7f0";
+ public const string text_header_2_24_regular = "\ued20";
+ public const string text_header_2_lines_16_regular = "\U000f0374";
+ public const string text_header_2_lines_20_regular = "\U000f0375";
+ public const string text_header_2_lines_24_regular = "\U000f0376";
+ public const string text_header_2_lines_caret_16_regular = "\U000f0377";
+ public const string text_header_2_lines_caret_20_regular = "\U000f0378";
+ public const string text_header_2_lines_caret_24_regular = "\U000f0379";
+ public const string text_header_3_20_regular = "\uf7f1";
+ public const string text_header_3_24_regular = "\ued21";
+ public const string text_header_3_lines_16_regular = "\U000f037a";
+ public const string text_header_3_lines_20_regular = "\U000f037b";
+ public const string text_header_3_lines_24_regular = "\U000f037c";
+ public const string text_header_3_lines_caret_16_regular = "\U000f037d";
+ public const string text_header_3_lines_caret_20_regular = "\U000f037e";
+ public const string text_header_3_lines_caret_24_regular = "\U000f037f";
+ public const string text_indent_decrease_ltr_16_regular = "\ued22";
+ public const string text_indent_decrease_ltr_20_regular = "\ued23";
+ public const string text_indent_decrease_ltr_24_regular = "\ued24";
+ public const string text_indent_decrease_rotate_90_20_regular = "\ued27";
+ public const string text_indent_decrease_rotate_90_24_regular = "\ued28";
+ public const string text_indent_decrease_rotate_270_20_regular = "\ued25";
+ public const string text_indent_decrease_rotate_270_24_regular = "\ued26";
+ public const string text_indent_decrease_rtl_16_regular = "\ued29";
+ public const string text_indent_decrease_rtl_20_regular = "\ued2a";
+ public const string text_indent_decrease_rtl_24_regular = "\ued2b";
+ public const string text_indent_decrease_rtl_90_24_regular = "\uef90";
+ public const string text_indent_decrease_rtl_rotate_270_24_regular = "\uefb0";
+ public const string text_indent_increase_ltr_16_regular = "\ued2c";
+ public const string text_indent_increase_ltr_20_regular = "\ued2d";
+ public const string text_indent_increase_ltr_24_regular = "\ued2e";
+ public const string text_indent_increase_rotate_90_20_regular = "\ued31";
+ public const string text_indent_increase_rotate_90_24_regular = "\ued32";
+ public const string text_indent_increase_rotate_270_20_regular = "\ued2f";
+ public const string text_indent_increase_rotate_270_24_regular = "\ued30";
+ public const string text_indent_increase_rtl_16_regular = "\ued33";
+ public const string text_indent_increase_rtl_20_regular = "\ued34";
+ public const string text_indent_increase_rtl_24_regular = "\ued35";
+ public const string text_indent_increase_rtl_90_24_regular = "\uf029";
+ public const string text_indent_increase_rtl_rotate_270_24_regular = "\uf3fc";
+ public const string text_italic_16_regular = "\ued36";
+ public const string text_italic_20_regular = "\uf7f4";
+ public const string text_italic_24_regular = "\uf7f5";
+ public const string text_line_spacing_20_regular = "\uf7f6";
+ public const string text_line_spacing_24_regular = "\uf7f7";
+ public const string text_more_20_regular = "\ued37";
+ public const string text_more_24_regular = "\ued38";
+ public const string text_number_format_20_regular = "\ued39";
+ public const string text_number_format_24_regular = "\uf7f8";
+ public const string text_number_list_ltr_16_regular = "\ued3a";
+ public const string text_number_list_ltr_20_regular = "\uf7f9";
+ public const string text_number_list_ltr_24_regular = "\uf7fa";
+ public const string text_number_list_rotate_90_20_regular = "\ued3d";
+ public const string text_number_list_rotate_90_24_regular = "\ued3e";
+ public const string text_number_list_rotate_270_20_regular = "\ued3b";
+ public const string text_number_list_ltr_rotate_270_24_regular = "\uf50b";
+ public const string text_number_list_rotate_270_24_regular = "\ued3c";
+ public const string text_number_list_rtl_16_regular = "\ued3f";
+ public const string text_number_list_rtl_20_regular = "\ued40";
+ public const string text_number_list_rtl_24_regular = "\uf7fb";
+ public const string text_number_list_rtl_90_20_regular = "\uf50c";
+ public const string text_number_list_rtl_90_24_regular = "\uf543";
+ public const string text_number_list_rtl_rotate_270_20_regular = "\uf544";
+ public const string text_number_list_rtl_rotate_270_24_regular = "\uf545";
+ public const string text_paragraph_direction_20_regular = "\ued44";
+ public const string text_paragraph_direction_24_regular = "\ued45";
+ public const string text_paragraph_direction_left_16_regular = "\ued46";
+ public const string text_paragraph_direction_left_20_regular = "\ued47";
+ public const string text_paragraph_direction_right_16_regular = "\ued48";
+ public const string text_paragraph_direction_right_20_regular = "\ued49";
+ public const string text_period_asterisk_20_regular = "\ued4a";
+ public const string text_position_behind_20_regular = "\ued4b";
+ public const string text_position_behind_24_regular = "\ued4c";
+ public const string text_position_front_20_regular = "\ued4d";
+ public const string text_position_front_24_regular = "\ued4e";
+ public const string text_position_line_20_regular = "\ued4f";
+ public const string text_position_line_24_regular = "\ued50";
+ public const string text_position_square_20_regular = "\ued51";
+ public const string text_position_square_24_regular = "\ued52";
+ public const string text_position_square_left_16_regular = "\U000f00b4";
+ public const string text_position_square_left_20_regular = "\U000f00b5";
+ public const string text_position_square_left_24_regular = "\U000f00b6";
+ public const string text_position_square_right_16_regular = "\U000f00b7";
+ public const string text_position_square_right_20_regular = "\U000f00b8";
+ public const string text_position_square_right_24_regular = "\U000f00b9";
+ public const string text_position_through_20_regular = "\ued53";
+ public const string text_position_through_24_regular = "\ued54";
+ public const string text_position_tight_20_regular = "\ued55";
+ public const string text_position_tight_24_regular = "\ued56";
+ public const string text_position_top_bottom_20_regular = "\ued57";
+ public const string text_position_top_bottom_24_regular = "\ued58";
+ public const string text_proofing_tools_20_regular = "\uf7fe";
+ public const string text_proofing_tools_24_regular = "\uf7ff";
+ public const string text_quote_16_regular = "\ued59";
+ public const string text_quote_20_regular = "\uf800";
+ public const string text_quote_24_regular = "\uf801";
+ public const string text_sort_ascending_16_regular = "\ued5a";
+ public const string text_sort_ascending_20_regular = "\uf802";
+ public const string text_sort_ascending_24_regular = "\ued5b";
+ public const string text_sort_descending_16_regular = "\ued5c";
+ public const string text_sort_descending_20_regular = "\uf803";
+ public const string text_sort_descending_24_regular = "\ued5d";
+ public const string text_strikethrough_16_regular = "\ued5e";
+ public const string text_strikethrough_20_regular = "\ued5f";
+ public const string text_strikethrough_24_regular = "\ued60";
+ public const string text_subscript_16_regular = "\ued61";
+ public const string text_subscript_20_regular = "\uf806";
+ public const string text_subscript_24_regular = "\uf807";
+ public const string text_superscript_16_regular = "\ued62";
+ public const string text_superscript_20_regular = "\uf808";
+ public const string text_superscript_24_regular = "\uf809";
+ public const string text_t_20_regular = "\ued63";
+ public const string text_t_24_regular = "\ued64";
+ public const string text_t_28_regular = "\ued65";
+ public const string text_t_48_regular = "\ued66";
+ public const string text_t_tag_16_regular = "\uf326";
+ public const string text_underline_16_regular = "\ued67";
+ public const string text_underline_20_regular = "\uf80a";
+ public const string text_underline_24_regular = "\uf80b";
+ public const string text_underline_character_u_16_regular = "\U000f00ba";
+ public const string text_underline_character_u_20_regular = "\U000f00bb";
+ public const string text_underline_character_u_24_regular = "\U000f00bc";
+ public const string text_underline_double_20_regular = "\uf096";
+ public const string text_underline_double_24_regular = "\uf097";
+ public const string text_whole_word_16_regular = "\U000f03a4";
+ public const string text_whole_word_20_regular = "\ued68";
+ public const string text_word_count_20_regular = "\uf80c";
+ public const string text_word_count_24_regular = "\uf80d";
+ public const string text_wrap_16_regular = "\uef28";
+ public const string text_wrap_20_regular = "\ued69";
+ public const string text_wrap_24_regular = "\uf80e";
+ public const string text_wrap_off_16_regular = "\uef29";
+ public const string text_wrap_off_20_regular = "\uef2a";
+ public const string text_wrap_off_24_regular = "\uef2b";
+ public const string textbox_16_regular = "\ued6a";
+ public const string textbox_20_regular = "\uf80f";
+ public const string textbox_24_regular = "\uf810";
+ public const string textbox_align_bottom_20_regular = "\uf813";
+ public const string textbox_align_bottom_24_regular = "\uf814";
+ public const string textbox_align_bottom_center_16_regular = "\U000f02e0";
+ public const string textbox_align_bottom_center_20_regular = "\U000f02e1";
+ public const string textbox_align_bottom_center_24_regular = "\U000f02e2";
+ public const string textbox_align_bottom_left_16_regular = "\U000f02e3";
+ public const string textbox_align_bottom_left_20_regular = "\U000f02e4";
+ public const string textbox_align_bottom_left_24_regular = "\U000f02e5";
+ public const string textbox_align_bottom_right_16_regular = "\U000f02e6";
+ public const string textbox_align_bottom_right_20_regular = "\U000f02e7";
+ public const string textbox_align_bottom_right_24_regular = "\U000f02e8";
+ public const string textbox_align_bottom_rotate_90_20_regular = "\ued6b";
+ public const string textbox_align_bottom_rotate_90_24_regular = "\ued6c";
+ public const string textbox_align_center_16_regular = "\U000f02e9";
+ public const string textbox_align_center_20_regular = "\ued6d";
+ public const string textbox_align_center_24_regular = "\ued6e";
+ public const string textbox_align_middle_16_regular = "\U000f015b";
+ public const string textbox_align_middle_20_regular = "\uf815";
+ public const string textbox_align_middle_24_regular = "\uf816";
+ public const string textbox_align_middle_left_16_regular = "\U000f02ea";
+ public const string textbox_align_middle_left_20_regular = "\U000f02eb";
+ public const string textbox_align_middle_left_24_regular = "\U000f02ec";
+ public const string textbox_align_middle_right_16_regular = "\U000f02ed";
+ public const string textbox_align_middle_right_20_regular = "\U000f02ee";
+ public const string textbox_align_middle_right_24_regular = "\U000f02ef";
+ public const string textbox_align_middle_rotate_90_20_regular = "\ued6f";
+ public const string textbox_align_middle_rotate_90_24_regular = "\ued70";
+ public const string textbox_align_top_20_regular = "\uf817";
+ public const string textbox_align_top_24_regular = "\uf818";
+ public const string textbox_align_top_center_16_regular = "\U000f02f0";
+ public const string textbox_align_top_center_20_regular = "\U000f02f1";
+ public const string textbox_align_top_center_24_regular = "\U000f02f2";
+ public const string textbox_align_top_left_16_regular = "\U000f02f3";
+ public const string textbox_align_top_left_20_regular = "\U000f02f4";
+ public const string textbox_align_top_left_24_regular = "\U000f02f5";
+ public const string textbox_align_top_right_16_regular = "\U000f02f6";
+ public const string textbox_align_top_right_20_regular = "\U000f02f7";
+ public const string textbox_align_top_right_24_regular = "\U000f02f8";
+ public const string textbox_align_top_rotate_90_20_regular = "\ued71";
+ public const string textbox_align_top_rotate_90_24_regular = "\ued72";
+ public const string textbox_more_20_regular = "\ued73";
+ public const string textbox_more_24_regular = "\ued74";
+ public const string textbox_rotate_90_20_regular = "\ued75";
+ public const string textbox_rotate_90_24_regular = "\ued76";
+ public const string thinking_20_regular = "\uf81b";
+ public const string thinking_24_regular = "\uf81c";
+ public const string thumb_dislike_16_regular = "\ued77";
+ public const string thumb_dislike_20_regular = "\uf81d";
+ public const string thumb_dislike_24_regular = "\uf81e";
+ public const string thumb_like_16_regular = "\ued78";
+ public const string thumb_like_20_regular = "\uf81f";
+ public const string thumb_like_24_regular = "\uf820";
+ public const string thumb_like_28_regular = "\ued79";
+ public const string thumb_like_48_regular = "\ued7a";
+ public const string thumb_like_dislike_16_regular = "\U000f0247";
+ public const string thumb_like_dislike_20_regular = "\U000f0248";
+ public const string thumb_like_dislike_24_regular = "\U000f0249";
+ public const string ticket_diagonal_16_regular = "\ued7b";
+ public const string ticket_diagonal_20_regular = "\ued7c";
+ public const string ticket_diagonal_24_regular = "\ued7d";
+ public const string ticket_diagonal_28_regular = "\ued7e";
+ public const string ticket_horizontal_20_regular = "\ued7f";
+ public const string ticket_horizontal_24_regular = "\ued80";
+ public const string time_and_weather_20_regular = "\ued81";
+ public const string time_and_weather_24_regular = "\uf823";
+ public const string time_picker_20_regular = "\ued82";
+ public const string time_picker_24_regular = "\uf824";
+ public const string timeline_20_regular = "\ued83";
+ public const string timeline_24_regular = "\uf825";
+ public const string timer_10_20_regular = "\ued84";
+ public const string timer_10_24_regular = "\uf826";
+ public const string timer_12_regular = "\ued85";
+ public const string timer_16_regular = "\ued86";
+ public const string timer_2_20_regular = "\ued87";
+ public const string timer_2_24_regular = "\uf828";
+ public const string timer_20_regular = "\ued88";
+ public const string timer_24_regular = "\uf827";
+ public const string timer_28_regular = "\ued89";
+ public const string timer_3_20_regular = "\ued8a";
+ public const string timer_3_24_regular = "\ued8b";
+ public const string timer_32_regular = "\ued8c";
+ public const string timer_48_regular = "\ued8d";
+ public const string timer_off_20_regular = "\ued8e";
+ public const string timer_off_24_regular = "\uf829";
+ public const string toggle_left_16_regular = "\ued8f";
+ public const string toggle_left_20_regular = "\ued90";
+ public const string toggle_left_24_regular = "\ued91";
+ public const string toggle_left_28_regular = "\ued92";
+ public const string toggle_left_48_regular = "\ued93";
+ public const string toggle_multiple_16_regular = "\ued94";
+ public const string toggle_multiple_20_regular = "\ued95";
+ public const string toggle_multiple_24_regular = "\ued96";
+ public const string toggle_right_16_regular = "\uf82a";
+ public const string toggle_right_20_regular = "\uf82b";
+ public const string toggle_right_24_regular = "\uf82c";
+ public const string toggle_right_28_regular = "\ued97";
+ public const string toggle_right_48_regular = "\ued98";
+ public const string toolbox_12_regular = "\ued99";
+ public const string toolbox_16_regular = "\uf82d";
+ public const string toolbox_20_regular = "\uf82e";
+ public const string toolbox_24_regular = "\uf82f";
+ public const string toolbox_28_regular = "\uf830";
+ public const string tooltip_quote_20_regular = "\uf7bb";
+ public const string tooltip_quote_24_regular = "\ued9a";
+ public const string top_speed_20_regular = "\ued9b";
+ public const string top_speed_24_regular = "\uf831";
+ public const string translate_16_regular = "\uf832";
+ public const string translate_20_regular = "\uf833";
+ public const string translate_24_regular = "\uf834";
+ public const string translate_auto_16_regular = "\U000f01b2";
+ public const string translate_auto_20_regular = "\U000f01b3";
+ public const string translate_auto_24_regular = "\U000f01b4";
+ public const string translate_off_16_regular = "\U000f00bd";
+ public const string translate_off_20_regular = "\U000f00be";
+ public const string translate_off_24_regular = "\U000f00bf";
+ public const string transmission_20_regular = "\ued9c";
+ public const string transmission_24_regular = "\ued9d";
+ public const string transparency_square_20_regular = "\U000f061f";
+ public const string transparency_square_24_regular = "\U000f0620";
+ public const string tray_item_add_20_regular = "\ued9e";
+ public const string tray_item_add_24_regular = "\ued9f";
+ public const string tray_item_remove_20_regular = "\ueda0";
+ public const string tray_item_remove_24_regular = "\ueda1";
+ public const string tree_deciduous_20_regular = "\ueda2";
+ public const string tree_deciduous_24_regular = "\U000f015c";
+ public const string tree_deciduous_28_regular = "\U000f015d";
+ public const string tree_evergreen_20_regular = "\ueda3";
+ public const string triangle_12_regular = "\ueda4";
+ public const string triangle_16_regular = "\ueda5";
+ public const string triangle_20_regular = "\ueda6";
+ public const string triangle_24_regular = "\U000f03a5";
+ public const string triangle_28_regular = "\U000f03a6";
+ public const string triangle_32_regular = "\ueda7";
+ public const string triangle_48_regular = "\ueda8";
+ public const string triangle_down_12_regular = "\ueda9";
+ public const string triangle_down_16_regular = "\uedaa";
+ public const string triangle_down_20_regular = "\uedab";
+ public const string triangle_down_24_regular = "\U000f02f9";
+ public const string triangle_down_32_regular = "\uedac";
+ public const string triangle_down_48_regular = "\uedad";
+ public const string triangle_left_12_regular = "\uedae";
+ public const string triangle_left_16_regular = "\uedaf";
+ public const string triangle_left_20_regular = "\uedb0";
+ public const string triangle_left_32_regular = "\uedb1";
+ public const string triangle_left_48_regular = "\uedb2";
+ public const string triangle_right_12_regular = "\uedb3";
+ public const string triangle_right_16_regular = "\uedb4";
+ public const string triangle_right_20_regular = "\uedb5";
+ public const string triangle_right_32_regular = "\uedb6";
+ public const string triangle_right_48_regular = "\uedb7";
+ public const string triangle_up_20_regular = "\U000f01e1";
+ public const string trophy_16_regular = "\uf835";
+ public const string trophy_20_regular = "\uf836";
+ public const string trophy_24_regular = "\uf837";
+ public const string trophy_28_regular = "\uedb8";
+ public const string trophy_32_regular = "\uedb9";
+ public const string trophy_48_regular = "\uedba";
+ public const string trophy_lock_16_regular = "\uef2c";
+ public const string trophy_lock_20_regular = "\uef2d";
+ public const string trophy_lock_24_regular = "\uef2e";
+ public const string trophy_lock_28_regular = "\uef2f";
+ public const string trophy_lock_32_regular = "\uef30";
+ public const string trophy_lock_48_regular = "\uef31";
+ public const string trophy_off_16_regular = "\uedbb";
+ public const string trophy_off_20_regular = "\uedbc";
+ public const string trophy_off_24_regular = "\uedbd";
+ public const string trophy_off_28_regular = "\uedbe";
+ public const string trophy_off_32_regular = "\uedbf";
+ public const string trophy_off_48_regular = "\uedc0";
+ public const string tv_16_regular = "\uedc1";
+ public const string tv_20_regular = "\uedc2";
+ public const string tv_24_regular = "\uedc3";
+ public const string tv_28_regular = "\uedc4";
+ public const string tv_48_regular = "\uedc5";
+ public const string tv_arrow_right_20_regular = "\uedc6";
+ public const string tv_usb_16_regular = "\uedc7";
+ public const string tv_usb_20_regular = "\uedc8";
+ public const string tv_usb_24_regular = "\uedc9";
+ public const string tv_usb_28_regular = "\uedca";
+ public const string tv_usb_48_regular = "\uedcb";
+ public const string umbrella_20_regular = "\uedcc";
+ public const string umbrella_24_regular = "\uedcd";
+ public const string uninstall_app_20_regular = "\uedce";
+ public const string uninstall_app_24_regular = "\uf838";
+ public const string usb_plug_20_regular = "\uedcf";
+ public const string usb_plug_24_regular = "\uedd0";
+ public const string usb_stick_20_regular = "\uf83f";
+ public const string usb_stick_24_regular = "\uf840";
+ public const string vault_16_regular = "\uf841";
+ public const string vault_20_regular = "\uf842";
+ public const string vault_24_regular = "\uf843";
+ public const string vehicle_bicycle_16_regular = "\uedd1";
+ public const string vehicle_bicycle_20_regular = "\uedd2";
+ public const string vehicle_bicycle_24_regular = "\uf844";
+ public const string vehicle_bus_16_regular = "\uedd3";
+ public const string vehicle_bus_20_regular = "\uedd4";
+ public const string vehicle_bus_24_regular = "\uf845";
+ public const string vehicle_cab_16_regular = "\uedd5";
+ public const string vehicle_cab_20_regular = "\uedd6";
+ public const string vehicle_cab_24_regular = "\uf846";
+ public const string vehicle_cab_28_regular = "\uedd7";
+ public const string vehicle_cable_car_20_regular = "\U000f010b";
+ public const string vehicle_cable_car_24_regular = "\U000f010c";
+ public const string vehicle_cable_car_28_regular = "\U000f010d";
+ public const string vehicle_car_16_regular = "\uf847";
+ public const string vehicle_car_20_regular = "\uf848";
+ public const string vehicle_car_24_regular = "\uf849";
+ public const string vehicle_car_28_regular = "\uedd8";
+ public const string vehicle_car_32_regular = "\uf05a";
+ public const string vehicle_car_48_regular = "\uedd9";
+ public const string vehicle_car_collision_16_regular = "\uedda";
+ public const string vehicle_car_collision_20_regular = "\ueddb";
+ public const string vehicle_car_collision_24_regular = "\ueddc";
+ public const string vehicle_car_collision_28_regular = "\ueddd";
+ public const string vehicle_car_collision_32_regular = "\uedde";
+ public const string vehicle_car_collision_48_regular = "\ueddf";
+ public const string vehicle_car_parking_16_regular = "\uf05b";
+ public const string vehicle_car_parking_20_regular = "\uf002";
+ public const string vehicle_car_parking_24_regular = "\uf003";
+ public const string vehicle_car_parking_32_regular = "\uf05c";
+ public const string vehicle_car_parking_48_regular = "\uf05d";
+ public const string vehicle_car_profile_ltr_16_regular = "\uf7cd";
+ public const string vehicle_car_profile_ltr_20_regular = "\uede0";
+ public const string vehicle_car_profile_ltr_24_regular = "\uf004";
+ public const string vehicle_car_profile_ltr_clock_16_regular = "\uf05e";
+ public const string vehicle_car_profile_ltr_clock_20_regular = "\uf05f";
+ public const string vehicle_car_profile_ltr_clock_24_regular = "\uf060";
+ public const string vehicle_car_profile_rtl_16_regular = "\uf7ce";
+ public const string vehicle_car_profile_rtl_20_regular = "\uede1";
+ public const string vehicle_car_profile_rtl_24_regular = "\uf005";
+ public const string vehicle_motorcycle_16_regular = "\U000f0642";
+ public const string vehicle_motorcycle_20_regular = "\U000f0643";
+ public const string vehicle_motorcycle_24_regular = "\U000f0644";
+ public const string vehicle_motorcycle_28_regular = "\U000f0645";
+ public const string vehicle_motorcycle_32_regular = "\U000f0646";
+ public const string vehicle_motorcycle_48_regular = "\U000f0647";
+ public const string vehicle_ship_16_regular = "\uede2";
+ public const string vehicle_ship_20_regular = "\uede3";
+ public const string vehicle_ship_24_regular = "\uede4";
+ public const string vehicle_subway_16_regular = "\uede5";
+ public const string vehicle_subway_20_regular = "\uede6";
+ public const string vehicle_subway_24_regular = "\uede7";
+ public const string vehicle_subway_clock_16_regular = "\U000f0418";
+ public const string vehicle_subway_clock_20_regular = "\U000f0419";
+ public const string vehicle_subway_clock_24_regular = "\U000f041a";
+ public const string vehicle_tractor_20_regular = "\U000f057e";
+ public const string vehicle_tractor_24_regular = "\U000f057f";
+ public const string vehicle_truck_16_regular = "\uede8";
+ public const string vehicle_truck_20_regular = "\uede9";
+ public const string vehicle_truck_24_regular = "\uf84a";
+ public const string vehicle_truck_bag_20_regular = "\uedea";
+ public const string vehicle_truck_bag_24_regular = "\uedeb";
+ public const string vehicle_truck_cube_20_regular = "\uedec";
+ public const string vehicle_truck_cube_24_regular = "\ueded";
+ public const string vehicle_truck_profile_16_regular = "\uf7ea";
+ public const string vehicle_truck_profile_20_regular = "\uedee";
+ public const string vehicle_truck_profile_24_regular = "\uedef";
+ public const string video_16_regular = "\uf84b";
+ public const string video_20_regular = "\uf84c";
+ public const string video_24_regular = "\uf84d";
+ public const string video_28_regular = "\uf84e";
+ public const string video_32_regular = "\uedf0";
+ public const string video_360_20_regular = "\uedf1";
+ public const string video_360_24_regular = "\uedf2";
+ public const string video_360_off_20_regular = "\uedf3";
+ public const string video_48_regular = "\uedf4";
+ public const string video_add_20_regular = "\uedf5";
+ public const string video_add_24_regular = "\uedf6";
+ public const string video_background_effect_16_regular = "\U000f00c0";
+ public const string video_background_effect_20_regular = "\uedf7";
+ public const string video_background_effect_24_regular = "\uf84f";
+ public const string video_background_effect_28_regular = "\U000f00c1";
+ public const string video_background_effect_32_regular = "\U000f00c2";
+ public const string video_background_effect_48_regular = "\U000f00c3";
+ public const string video_background_effect_horizontal_16_regular = "\U000f00c4";
+ public const string video_background_effect_horizontal_20_regular = "\U000f00c5";
+ public const string video_background_effect_horizontal_24_regular = "\U000f00c6";
+ public const string video_background_effect_horizontal_28_regular = "\U000f00c7";
+ public const string video_background_effect_horizontal_32_regular = "\U000f00c8";
+ public const string video_background_effect_horizontal_48_regular = "\U000f00c9";
+ public const string video_chat_16_regular = "\uedf8";
+ public const string video_chat_20_regular = "\uedf9";
+ public const string video_chat_24_regular = "\uedfa";
+ public const string video_chat_28_regular = "\uedfb";
+ public const string video_chat_32_regular = "\uedfc";
+ public const string video_chat_48_regular = "\uedfd";
+ public const string video_clip_16_regular = "\uedfe";
+ public const string video_clip_20_regular = "\uedff";
+ public const string video_clip_24_regular = "\uf850";
+ public const string video_clip_28_regular = "\U000f00ca";
+ public const string video_clip_32_regular = "\U000f00cb";
+ public const string video_clip_48_regular = "\U000f00cc";
+ public const string video_clip_multiple_16_regular = "\uee00";
+ public const string video_clip_multiple_20_regular = "\uee01";
+ public const string video_clip_multiple_24_regular = "\uee02";
+ public const string video_clip_off_16_regular = "\uee03";
+ public const string video_clip_off_20_regular = "\uee04";
+ public const string video_clip_off_24_regular = "\uee05";
+ public const string video_clip_optimize_16_regular = "\U000f041b";
+ public const string video_clip_optimize_20_regular = "\U000f041c";
+ public const string video_clip_optimize_24_regular = "\U000f041d";
+ public const string video_clip_optimize_28_regular = "\U000f041e";
+ public const string video_clip_wand_16_regular = "\U000f0548";
+ public const string video_clip_wand_20_regular = "\U000f0549";
+ public const string video_clip_wand_24_regular = "\U000f054a";
+ public const string video_link_24_regular = "\U000f04fc";
+ public const string video_link_28_regular = "\U000f04fd";
+ public const string video_off_16_regular = "\U000f0520";
+ public const string video_off_20_regular = "\uf851";
+ public const string video_off_24_regular = "\uf852";
+ public const string video_off_28_regular = "\uf853";
+ public const string video_off_32_regular = "\uee06";
+ public const string video_off_48_regular = "\uee07";
+ public const string video_people_32_regular = "\uf061";
+ public const string video_person_12_regular = "\uee08";
+ public const string video_person_16_regular = "\uee09";
+ public const string video_person_20_regular = "\uee0a";
+ public const string video_person_24_regular = "\uf854";
+ public const string video_person_28_regular = "\uee0b";
+ public const string video_person_32_regular = "\uf327";
+ public const string video_person_48_regular = "\uee0c";
+ public const string video_person_call_16_regular = "\uee0d";
+ public const string video_person_call_20_regular = "\uee0e";
+ public const string video_person_call_24_regular = "\uee0f";
+ public const string video_person_call_32_regular = "\uee10";
+ public const string video_person_clock_16_regular = "\uf38e";
+ public const string video_person_clock_20_regular = "\uf392";
+ public const string video_person_clock_24_regular = "\uf3f5";
+ public const string video_person_clock_28_regular = "\uf3f6";
+ public const string video_person_clock_32_regular = "\uf3f7";
+ public const string video_person_clock_48_regular = "\uf3f8";
+ public const string video_person_off_20_regular = "\uee11";
+ public const string video_person_off_24_regular = "\uf855";
+ public const string video_person_pulse_16_regular = "\U000f041f";
+ public const string video_person_pulse_20_regular = "\U000f0420";
+ public const string video_person_pulse_24_regular = "\U000f0421";
+ public const string video_person_pulse_28_regular = "\U000f0422";
+ public const string video_person_sparkle_16_regular = "\uee12";
+ public const string video_person_sparkle_20_regular = "\uee13";
+ public const string video_person_sparkle_24_regular = "\uee14";
+ public const string video_person_sparkle_28_regular = "\uee15";
+ public const string video_person_sparkle_48_regular = "\uee16";
+ public const string video_person_sparkle_off_20_regular = "\U000f02ca";
+ public const string video_person_sparkle_off_24_regular = "\U000f02cb";
+ public const string video_person_star_20_regular = "\uee17";
+ public const string video_person_star_24_regular = "\uf856";
+ public const string video_person_star_off_20_regular = "\uee18";
+ public const string video_person_star_off_24_regular = "\uee19";
+ public const string video_play_pause_20_regular = "\uee1a";
+ public const string video_play_pause_24_regular = "\uf857";
+ public const string video_prohibited_16_regular = "\uee1b";
+ public const string video_prohibited_20_regular = "\uee1c";
+ public const string video_prohibited_24_regular = "\uee1d";
+ public const string video_prohibited_28_regular = "\uee1e";
+ public const string video_recording_20_regular = "\uee1f";
+ public const string video_security_20_regular = "\uf858";
+ public const string video_security_24_regular = "\uf859";
+ public const string video_switch_20_regular = "\uee20";
+ public const string video_switch_24_regular = "\uf85a";
+ public const string video_sync_20_regular = "\uee21";
+ public const string view_desktop_20_regular = "\uf85b";
+ public const string view_desktop_24_regular = "\uf85c";
+ public const string view_desktop_mobile_20_regular = "\uf85d";
+ public const string view_desktop_mobile_24_regular = "\uf85e";
+ public const string virtual_network_20_regular = "\uee22";
+ public const string virtual_network_toolbox_20_regular = "\uee23";
+ public const string voicemail_16_regular = "\uf862";
+ public const string voicemail_20_regular = "\uf863";
+ public const string voicemail_24_regular = "\uf864";
+ public const string voicemail_28_regular = "\uee24";
+ public const string voicemail_32_regular = "\uf3f9";
+ public const string voicemail_48_regular = "\U000f00cd";
+ public const string voicemail_arrow_back_16_regular = "\uf7eb";
+ public const string voicemail_arrow_back_20_regular = "\uee25";
+ public const string voicemail_arrow_forward_16_regular = "\uf7ec";
+ public const string voicemail_arrow_forward_20_regular = "\uee26";
+ public const string voicemail_arrow_subtract_20_regular = "\uee27";
+ public const string voicemail_shield_16_regular = "\U000f031f";
+ public const string voicemail_shield_20_regular = "\U000f02cc";
+ public const string voicemail_shield_24_regular = "\U000f02cd";
+ public const string voicemail_shield_32_regular = "\U000f02ce";
+ public const string voicemail_subtract_16_regular = "\uf7fc";
+ public const string vote_20_regular = "\uee28";
+ public const string vote_24_regular = "\uee29";
+ public const string walkie_talkie_20_regular = "\uee2a";
+ public const string walkie_talkie_24_regular = "\uf865";
+ public const string walkie_talkie_28_regular = "\uf866";
+ public const string wallet_16_regular = "\uee2b";
+ public const string wallet_20_regular = "\uee2c";
+ public const string wallet_24_regular = "\uee2d";
+ public const string wallet_28_regular = "\uee2e";
+ public const string wallet_32_regular = "\uee2f";
+ public const string wallet_48_regular = "\uee30";
+ public const string wallet_credit_card_16_regular = "\uee31";
+ public const string wallet_credit_card_20_regular = "\uee32";
+ public const string wallet_credit_card_24_regular = "\uee33";
+ public const string wallet_credit_card_28_regular = "\U000f05f6";
+ public const string wallet_credit_card_32_regular = "\uee34";
+ public const string wallet_credit_card_48_regular = "\U000f05f7";
+ public const string wallpaper_20_regular = "\uee35";
+ public const string wallpaper_24_regular = "\uf867";
+ public const string wand_16_regular = "\uee36";
+ public const string wand_20_regular = "\uee37";
+ public const string wand_24_regular = "\uee38";
+ public const string wand_28_regular = "\uee39";
+ public const string wand_48_regular = "\uee3a";
+ public const string warning_12_regular = "\uee3b";
+ public const string warning_16_regular = "\uf868";
+ public const string warning_20_regular = "\uf869";
+ public const string warning_24_regular = "\uf86a";
+ public const string warning_28_regular = "\uee3c";
+ public const string warning_32_regular = "\U000f024a";
+ public const string warning_48_regular = "\U000f03cf";
+ public const string warning_shield_20_regular = "\uee3d";
+ public const string washer_20_regular = "\uf006";
+ public const string washer_24_regular = "\uf007";
+ public const string washer_32_regular = "\uf008";
+ public const string washer_48_regular = "\uf009";
+ public const string water_16_regular = "\uf062";
+ public const string water_20_regular = "\uf063";
+ public const string water_24_regular = "\uf064";
+ public const string water_32_regular = "\uf065";
+ public const string water_48_regular = "\uf066";
+ public const string weather_blowing_snow_20_regular = "\uf86b";
+ public const string weather_blowing_snow_24_regular = "\uf86c";
+ public const string weather_blowing_snow_48_regular = "\uf86d";
+ public const string weather_cloudy_20_regular = "\uf86e";
+ public const string weather_cloudy_24_regular = "\uf86f";
+ public const string weather_cloudy_48_regular = "\uf870";
+ public const string weather_drizzle_20_regular = "\uee3e";
+ public const string weather_drizzle_24_regular = "\uee3f";
+ public const string weather_drizzle_48_regular = "\uee40";
+ public const string weather_duststorm_20_regular = "\uf871";
+ public const string weather_duststorm_24_regular = "\uf872";
+ public const string weather_duststorm_48_regular = "\uf873";
+ public const string weather_fog_20_regular = "\uf874";
+ public const string weather_fog_24_regular = "\uf875";
+ public const string weather_fog_48_regular = "\uf876";
+ public const string weather_hail_day_20_regular = "\uf877";
+ public const string weather_hail_day_24_regular = "\uf878";
+ public const string weather_hail_day_48_regular = "\uf879";
+ public const string weather_hail_night_20_regular = "\uf87a";
+ public const string weather_hail_night_24_regular = "\uf87b";
+ public const string weather_hail_night_48_regular = "\uf87c";
+ public const string weather_haze_20_regular = "\uee41";
+ public const string weather_haze_24_regular = "\uee42";
+ public const string weather_haze_48_regular = "\uee43";
+ public const string weather_moon_16_regular = "\uee44";
+ public const string weather_moon_20_regular = "\uf87d";
+ public const string weather_moon_24_regular = "\uf87e";
+ public const string weather_moon_28_regular = "\uee45";
+ public const string weather_moon_48_regular = "\uf87f";
+ public const string weather_moon_off_16_regular = "\uee46";
+ public const string weather_moon_off_20_regular = "\uee47";
+ public const string weather_moon_off_24_regular = "\uee48";
+ public const string weather_moon_off_28_regular = "\uee49";
+ public const string weather_moon_off_48_regular = "\uee4a";
+ public const string weather_partly_cloudy_day_16_regular = "\uee4b";
+ public const string weather_partly_cloudy_day_20_regular = "\uf880";
+ public const string weather_partly_cloudy_day_24_regular = "\uf881";
+ public const string weather_partly_cloudy_day_48_regular = "\uf882";
+ public const string weather_partly_cloudy_night_20_regular = "\uf883";
+ public const string weather_partly_cloudy_night_24_regular = "\uf884";
+ public const string weather_partly_cloudy_night_48_regular = "\uf885";
+ public const string weather_rain_20_regular = "\uf886";
+ public const string weather_rain_24_regular = "\uf887";
+ public const string weather_rain_48_regular = "\uf888";
+ public const string weather_rain_showers_day_20_regular = "\uf889";
+ public const string weather_rain_showers_day_24_regular = "\uf88a";
+ public const string weather_rain_showers_day_48_regular = "\uf88b";
+ public const string weather_rain_showers_night_20_regular = "\uf88c";
+ public const string weather_rain_showers_night_24_regular = "\uf88d";
+ public const string weather_rain_showers_night_48_regular = "\uf88e";
+ public const string weather_rain_snow_20_regular = "\uf88f";
+ public const string weather_rain_snow_24_regular = "\uf890";
+ public const string weather_rain_snow_48_regular = "\uf891";
+ public const string weather_snow_20_regular = "\uf892";
+ public const string weather_snow_24_regular = "\uf893";
+ public const string weather_snow_48_regular = "\uf894";
+ public const string weather_snow_shower_day_20_regular = "\uf895";
+ public const string weather_snow_shower_day_24_regular = "\uf896";
+ public const string weather_snow_shower_day_48_regular = "\uf897";
+ public const string weather_snow_shower_night_20_regular = "\uf898";
+ public const string weather_snow_shower_night_24_regular = "\uf899";
+ public const string weather_snow_shower_night_48_regular = "\uf89a";
+ public const string weather_snowflake_20_regular = "\uf89b";
+ public const string weather_snowflake_24_regular = "\uf89c";
+ public const string weather_snowflake_32_regular = "\uefd4";
+ public const string weather_snowflake_48_regular = "\uf89d";
+ public const string weather_squalls_20_regular = "\uf89e";
+ public const string weather_squalls_24_regular = "\uf89f";
+ public const string weather_squalls_48_regular = "\uf8a0";
+ public const string weather_sunny_16_regular = "\uee4c";
+ public const string weather_sunny_28_regular = "\uee4d";
+ public const string weather_sunny_32_regular = "\uee4e";
+ public const string weather_sunny_48_regular = "\uf8a3";
+ public const string weather_sunny_high_20_regular = "\uee4f";
+ public const string weather_sunny_high_24_regular = "\uee50";
+ public const string weather_sunny_high_48_regular = "\uee51";
+ public const string weather_sunny_low_20_regular = "\uee52";
+ public const string weather_sunny_low_24_regular = "\uee53";
+ public const string weather_sunny_low_48_regular = "\uee54";
+ public const string weather_thunderstorm_20_regular = "\uf8a4";
+ public const string weather_thunderstorm_24_regular = "\uf8a5";
+ public const string weather_thunderstorm_48_regular = "\uf8a6";
+ public const string web_asset_16_regular = "\uf3fa";
+ public const string web_asset_20_regular = "\uee55";
+ public const string web_asset_24_regular = "\uf8a7";
+ public const string whiteboard_16_regular = "\U000f04c4";
+ public const string whiteboard_20_regular = "\uf8aa";
+ public const string whiteboard_24_regular = "\uf8ab";
+ public const string whiteboard_48_regular = "\uee56";
+ public const string whiteboard_off_16_regular = "\U000f04c5";
+ public const string whiteboard_off_20_regular = "\U000f04c6";
+ public const string whiteboard_off_24_regular = "\U000f04c7";
+ public const string wifi_1_20_regular = "\uf8ac";
+ public const string wifi_1_24_regular = "\uf8ad";
+ public const string wifi_2_20_regular = "\uf8ae";
+ public const string wifi_2_24_regular = "\uf8af";
+ public const string wifi_3_20_regular = "\uf8b0";
+ public const string wifi_3_24_regular = "\uf8b1";
+ public const string wifi_4_20_regular = "\uf8b2";
+ public const string wifi_4_24_regular = "\uf8b3";
+ public const string wifi_lock_20_regular = "\uee57";
+ public const string wifi_lock_24_regular = "\uee58";
+ public const string wifi_off_20_regular = "\uee59";
+ public const string wifi_off_24_regular = "\uee5a";
+ public const string wifi_settings_20_regular = "\uee5b";
+ public const string wifi_warning_20_regular = "\uee5c";
+ public const string wifi_warning_24_regular = "\uf7fd";
+ public const string window_16_regular = "\uee5d";
+ public const string window_20_regular = "\uf8b5";
+ public const string window_24_regular = "\uee5e";
+ public const string window_28_regular = "\uee5f";
+ public const string window_48_regular = "\uee61";
+ public const string window_ad_20_regular = "\uf8b6";
+ public const string window_ad_24_regular = "\U000f04e3";
+ public const string window_ad_off_20_regular = "\uee62";
+ public const string window_ad_person_20_regular = "\uee63";
+ public const string window_apps_16_regular = "\uee64";
+ public const string window_apps_20_regular = "\uee65";
+ public const string window_apps_24_regular = "\uee66";
+ public const string window_apps_28_regular = "\uee67";
+ public const string window_apps_32_regular = "\uee68";
+ public const string window_apps_48_regular = "\uee69";
+ public const string window_arrow_up_16_regular = "\uee6a";
+ public const string window_arrow_up_20_regular = "\uee6b";
+ public const string window_arrow_up_24_regular = "\uee6c";
+ public const string window_bullet_list_20_regular = "\uee6d";
+ public const string window_bullet_list_add_20_regular = "\uee6e";
+ public const string window_console_20_regular = "\uee6f";
+ public const string window_database_20_regular = "\uee70";
+ public const string window_database_24_regular = "\uefd5";
+ public const string window_database_32_regular = "\U000f02cf";
+ public const string window_dev_edit_16_regular = "\uee71";
+ public const string window_dev_edit_20_regular = "\uee72";
+ public const string window_dev_tools_16_regular = "\uf8b7";
+ public const string window_dev_tools_20_regular = "\uf8b8";
+ public const string window_dev_tools_24_regular = "\uf8b9";
+ public const string window_edit_16_regular = "\uf804";
+ public const string window_edit_20_regular = "\uee73";
+ public const string window_fingerprint_16_regular = "\U000f054b";
+ public const string window_fingerprint_20_regular = "\U000f054c";
+ public const string window_fingerprint_24_regular = "\U000f054d";
+ public const string window_fingerprint_28_regular = "\U000f054e";
+ public const string window_fingerprint_32_regular = "\U000f054f";
+ public const string window_fingerprint_48_regular = "\U000f0550";
+ public const string window_header_horizontal_20_regular = "\uee74";
+ public const string window_header_horizontal_off_20_regular = "\uee75";
+ public const string window_header_vertical_20_regular = "\uee76";
+ public const string window_inprivate_20_regular = "\uf8ba";
+ public const string window_inprivate_account_20_regular = "\uf8bb";
+ public const string window_location_target_20_regular = "\uee77";
+ public const string window_multiple_16_regular = "\uee78";
+ public const string window_multiple_20_regular = "\uf8bc";
+ public const string window_multiple_swap_20_regular = "\uee79";
+ public const string window_new_16_regular = "\uee7a";
+ public const string window_new_20_regular = "\uf8bd";
+ public const string window_new_24_regular = "\uee7b";
+ public const string window_play_20_regular = "\uee7c";
+ public const string window_settings_20_regular = "\uee7d";
+ public const string window_shield_16_regular = "\uf8be";
+ public const string window_shield_20_regular = "\uf8bf";
+ public const string window_shield_24_regular = "\uf8c0";
+ public const string window_text_20_regular = "\uee7e";
+ public const string window_wrench_16_regular = "\uee7f";
+ public const string window_wrench_20_regular = "\uee80";
+ public const string window_wrench_24_regular = "\uee81";
+ public const string window_wrench_28_regular = "\uee82";
+ public const string window_wrench_32_regular = "\uee83";
+ public const string window_wrench_48_regular = "\uee84";
+ public const string wrench_16_regular = "\uee85";
+ public const string wrench_20_regular = "\uee86";
+ public const string wrench_24_regular = "\uf8c1";
+ public const string wrench_screwdriver_20_regular = "\uee87";
+ public const string wrench_screwdriver_24_regular = "\uee88";
+ public const string wrench_screwdriver_32_regular = "\U000f0461";
+ public const string wrench_settings_20_regular = "\U000f04e4";
+ public const string wrench_settings_24_regular = "\U000f04e5";
+ public const string xbox_console_20_regular = "\uf8c2";
+ public const string xbox_console_24_regular = "\uf8c3";
+ public const string xbox_controller_16_regular = "\ueeb7";
+ public const string xbox_controller_20_regular = "\ueeb8";
+ public const string xbox_controller_24_regular = "\ueeb9";
+ public const string xbox_controller_28_regular = "\ueeba";
+ public const string xbox_controller_32_regular = "\ueebb";
+ public const string xbox_controller_48_regular = "\ueebc";
+ public const string xbox_controller_error_20_regular = "\uf098";
+ public const string xbox_controller_error_24_regular = "\uf099";
+ public const string xbox_controller_error_32_regular = "\uf09a";
+ public const string xbox_controller_error_48_regular = "\uf09b";
+ public const string xray_20_regular = "\uee89";
+ public const string xray_24_regular = "\uee8a";
+ public const string zoom_fit_16_regular = "\uee8b";
+ public const string zoom_fit_20_regular = "\uee8c";
+ public const string zoom_fit_24_regular = "\uee8d";
+ public const string zoom_in_16_regular = "\uee8e";
+ public const string zoom_in_20_regular = "\uf8c4";
+ public const string zoom_in_24_regular = "\uf8c5";
+ public const string zoom_out_16_regular = "\uee8f";
+ public const string zoom_out_20_regular = "\uf8c6";
+ public const string zoom_out_24_regular = "\uf8c7";
+}
\ No newline at end of file
diff --git a/samples/EssentialsAISample/MauiProgram.cs b/samples/EssentialsAISample/MauiProgram.cs
new file mode 100644
index 000000000..b3892862a
--- /dev/null
+++ b/samples/EssentialsAISample/MauiProgram.cs
@@ -0,0 +1,241 @@
+using System.Reflection;
+using EssentialsAISample.AI;
+using EssentialsAISample.Pages;
+using EssentialsAISample.Services;
+using EssentialsAISample.ViewModels;
+using Microsoft.Extensions.AI;
+using Microsoft.Extensions.Configuration;
+using Microsoft.Extensions.Logging;
+using Microsoft.Maui.Essentials.AI;
+using System.ClientModel;
+
+#if ENABLE_OPENAI_CLIENT
+using OpenAI;
+using OpenAI.Chat;
+using OpenAI.Embeddings;
+#endif
+
+namespace EssentialsAISample;
+
+public static class MauiProgram
+{
+ public static MauiApp CreateMauiApp()
+ {
+ var builder = MauiApp.CreateBuilder();
+
+ builder.Configuration.AddUserSecrets();
+
+ builder.UseMauiApp();
+
+#if IOS || ANDROID || MACCATALYST
+ builder.UseMauiMaps();
+#endif
+
+ builder.ConfigureFonts(fonts =>
+ {
+ fonts.AddFont("OpenSans-Regular.ttf", "OpenSansRegular");
+ fonts.AddFont("OpenSans-Semibold.ttf", "OpenSansSemibold");
+ fonts.AddFont("FluentSystemIcons-Regular.ttf", FluentUI.FontFamily);
+ });
+
+ // Register AI agents and workflow
+#if IOS || MACCATALYST
+ builder.AddAppleIntelligenceServices();
+#else
+ builder.AddOpenAIServices();
+#endif
+ builder.AddItineraryWorkflow();
+
+ // Register Pages
+ builder.Services.AddTransient();
+ builder.Services.AddTransient();
+ builder.Services.AddTransient();
+
+ // Register ViewModels
+ builder.Services.AddTransient();
+ builder.Services.AddTransient();
+ builder.Services.AddTransient();
+ builder.Services.AddSingleton();
+
+ // Register Services
+ builder.Services.AddSingleton();
+ builder.Services.AddTransient();
+ builder.Services.AddTransient();
+ builder.Services.AddHttpClient();
+ builder.Services.AddSingleton();
+
+ // Semantic search — uses whatever IEmbeddingGenerator is registered (Apple NL or OpenAI)
+ builder.Services.AddSingleton(sp =>
+ new EmbeddingSearchService(sp.GetRequiredService>>()));
+
+ // Configure Logging
+ builder.Services.AddLogging();
+ builder.Logging.AddDebug();
+ builder.Logging.AddConsole();
+#if DEBUG
+ builder.Logging.SetMinimumLevel(LogLevel.Debug);
+#else
+ builder.Logging.SetMinimumLevel(LogLevel.Information);
+#endif
+
+ return builder.Build();
+ }
+
+ private static Stream? AddUserSecrets(this ConfigurationManager manager)
+ {
+ var assembly = Assembly.GetExecutingAssembly();
+ var stream = assembly.GetManifestResourceStream("EssentialsAISample.secrets.json");
+ if (stream is not null)
+ {
+ manager.AddJsonStream(stream);
+ }
+ return stream;
+ }
+
+#if IOS || MACCATALYST
+#pragma warning disable CA1416 // Validate platform compatibility - this sample requires iOS/macCatalyst 26.0+
+ private static MauiAppBuilder AddAppleIntelligenceServices(this MauiAppBuilder builder)
+ {
+ // Register the base Apple Intelligence client
+ builder.Services.AddSingleton();
+
+ // Register the Apple Intelligence client as IChatClient to allow direct use
+ builder.Services.AddSingleton(sp =>
+ {
+ var appleClient = sp.GetRequiredService();
+ var loggerFactory = sp.GetRequiredService();
+ return appleClient
+ .AsBuilder()
+ .UseLogging(loggerFactory)
+ .Build();
+ });
+
+ // Register the Agent Framework wrapper as "local-model"
+ builder.Services.AddKeyedSingleton("local-model", (sp, _) =>
+ {
+ var appleClient = sp.GetRequiredService();
+ var loggerFactory = sp.GetRequiredService();
+ return appleClient
+ .AsBuilder()
+ .UseLogging(loggerFactory)
+ .Build();
+ });
+
+ // Register "cloud-model" with buffering
+ builder.Services.AddKeyedSingleton("cloud-model", (sp, _) =>
+ {
+ // TODO: Add OpenAI/Azure support for better translation quality
+ var appleClient = sp.GetRequiredService();
+ var loggerFactory = sp.GetRequiredService();
+ return appleClient
+ .AsBuilder()
+ .UseLogging(loggerFactory)
+ .Use(cc => new BufferedChatClient(cc))
+ .Build();
+ });
+
+ // Register the Natural Language Embedding generator
+ builder.Services.AddSingleton();
+
+ // Register embedding generator
+ builder.Services.AddSingleton>>(sp =>
+ {
+ var embeddings = sp.GetRequiredService();
+ var loggerFactory = sp.GetRequiredService();
+ return embeddings.AsBuilder()
+ .UseLogging(loggerFactory)
+ .Build();
+ });
+
+ // Semantic search backed by NL embeddings (also registered in common services above,
+ // but this line is kept in case the common registration is removed in the future)
+
+ return builder;
+ }
+#pragma warning restore CA1416
+#endif
+
+ private static MauiAppBuilder AddOpenAIServices(this MauiAppBuilder builder)
+ {
+#if ENABLE_OPENAI_CLIENT
+ var aiSection = builder.Configuration.GetSection("AI");
+ var apikey = aiSection["ApiKey"];
+ var endpointStr = aiSection["Endpoint"];
+ var chatModel = aiSection["DeploymentName"];
+ var embeddingModel = aiSection["EmbeddingDeploymentName"];
+
+ if (string.IsNullOrEmpty(apikey) || string.IsNullOrEmpty(endpointStr) ||
+ string.IsNullOrEmpty(chatModel) || string.IsNullOrEmpty(embeddingModel))
+ {
+ // OpenAI not configured — skip registration. The sample will still
+ // work with Apple Intelligence on iOS/macOS.
+ return builder;
+ }
+
+ var endpoint = new Uri(endpointStr);
+ var client = new ChatClient(
+ credential: new ApiKeyCredential(apikey),
+ model: chatModel,
+ options: new OpenAIClientOptions()
+ {
+ Endpoint = endpoint,
+ });
+ var embeddings = new EmbeddingClient(
+ credential: new ApiKeyCredential(apikey),
+ model: embeddingModel,
+ options: new OpenAIClientOptions()
+ {
+ Endpoint = endpoint,
+ });
+
+ // Add generic chat client for simple inference
+ builder.Services.AddSingleton(provider =>
+ {
+ var lf = provider.GetRequiredService();
+ var realClient = client.AsIChatClient()
+ .AsBuilder()
+ .UseLogging(lf)
+ .Build();
+ return realClient;
+ });
+
+ // Add chat client for local model with function calling
+ builder.Services.AddKeyedSingleton("local-model", (provider, _) =>
+ {
+ var lf = provider.GetRequiredService();
+ var realClient = client.AsIChatClient()
+ .AsBuilder()
+ .UseLogging(lf)
+ .UseFunctionInvocation()
+ .Use(cc => new BufferedChatClient(cc))
+ .Build();
+ return realClient;
+ });
+
+ // Add chat client for cloud model without function calling
+ builder.Services.AddKeyedSingleton("cloud-model", (provider, _) =>
+ {
+ var lf = provider.GetRequiredService();
+ var realClient = client.AsIChatClient()
+ .AsBuilder()
+ .UseLogging(lf)
+ .Use(cc => new BufferedChatClient(cc))
+ .Build();
+ return realClient;
+ });
+
+ // Add embedding generation client
+ builder.Services.AddSingleton>>(provider =>
+ {
+ var lf = provider.GetRequiredService();
+ var realClient = embeddings.AsIEmbeddingGenerator()
+ .AsBuilder()
+ .UseLogging(lf)
+ .Build();
+ return realClient;
+ });
+#endif
+
+ return builder;
+ }
+}
diff --git a/samples/EssentialsAISample/Models/Itinerary.cs b/samples/EssentialsAISample/Models/Itinerary.cs
new file mode 100644
index 000000000..e3c9eb8c3
--- /dev/null
+++ b/samples/EssentialsAISample/Models/Itinerary.cs
@@ -0,0 +1,101 @@
+using System.ComponentModel;
+using System.ComponentModel.DataAnnotations;
+
+namespace EssentialsAISample.Models;
+
+[DisplayName("Itinerary")]
+[Description("A travel itinerary with days and activities.")]
+public record Itinerary
+{
+ [Description("An exciting name for the trip.")]
+ public required string Title { get; init; }
+
+ public required string DestinationName { get; init; }
+
+ public required string Description { get; init; }
+
+ [Description("An explanation of how the itinerary meets the person's special requests.")]
+ public required string Rationale { get; init; }
+
+ [Description("A list of day-by-day plans.")]
+ [Length(3, 3)]
+ public required List Days { get; init; }
+
+ public static Itinerary GetExampleTripToJapan() =>
+ new()
+ {
+ Title = "Onsen Trip to Japan",
+ DestinationName = "Mt. Fuji",
+ Description = "Sushi, hot springs, and ryokan with a toddler!",
+ Rationale =
+ """
+ You are traveling with a child, so climbing Mt. Fuji is probably not an option,
+ but there is lots to do around Kawaguchiko Lake, including Fujikyu.
+ I recommend staying in a ryokan because you love hotsprings.
+ """,
+ Days = [
+ new DayPlan
+ {
+ Title = "Sushi and Shopping Near Kawaguchiko",
+ Subtitle = "Spend your final day enjoying sushi and souvenir shopping.",
+ Destination = "Kawaguchiko Lake",
+ Activities = [
+ new Activity
+ {
+ Type = ActivityKind.FoodAndDining,
+ Title = "The Restaurant serving Sushi",
+ Description = "Visit an authentic sushi restaurant for lunch."
+ },
+ new Activity
+ {
+ Type = ActivityKind.Shopping,
+ Title = "The Plaza",
+ Description = "Enjoy souvenir shopping at various shops."
+ },
+ new Activity
+ {
+ Type = ActivityKind.Sightseeing,
+ Title = "The Beautiful Cherry Blossom Park",
+ Description = "Admire the beautiful cherry blossom trees in the park."
+ },
+ new Activity
+ {
+ Type = ActivityKind.HotelAndLodging,
+ Title = "The Hotel",
+ Description = "Spend one final evening in the hotspring before heading home."
+ }]
+ }]
+ };
+}
+
+[DisplayName("DayPlan")]
+public record DayPlan
+{
+ [Description("A unique and exciting title for this day plan.")]
+ public required string Title { get; init; }
+
+ public required string Subtitle { get; init; }
+
+ public required string Destination { get; init; }
+
+ [Length(3, 3)]
+ public required List Activities { get; init; }
+}
+
+[DisplayName("Activity")]
+public record Activity
+{
+ public required ActivityKind Type { get; init; }
+
+ public required string Title { get; init; }
+
+ public required string Description { get; init; }
+}
+
+public enum ActivityKind
+{
+ Sightseeing,
+ FoodAndDining,
+ Shopping,
+ HotelAndLodging
+}
diff --git a/samples/EssentialsAISample/Models/Landmark.cs b/samples/EssentialsAISample/Models/Landmark.cs
new file mode 100644
index 000000000..f1c4ea058
--- /dev/null
+++ b/samples/EssentialsAISample/Models/Landmark.cs
@@ -0,0 +1,33 @@
+using System.Text.Json.Serialization;
+
+namespace EssentialsAISample.Models;
+
+public record Landmark
+{
+ public int Id { get; init; }
+
+ public required string Name { get; init; }
+
+ public required string Continent { get; init; }
+
+ public required string Description { get; init; }
+
+ public required string ShortDescription { get; init; }
+
+ public double Latitude { get; init; }
+
+ public double Longitude { get; init; }
+
+ public double Span { get; init; }
+
+ public string? PlaceId { get; init; }
+
+ [JsonIgnore]
+ public string BackgroundImageName => $"{Id}";
+
+ [JsonIgnore]
+ public string ThumbnailImageName => $"{Id}_thumb";
+
+ [JsonIgnore]
+ public Location Location => new(Latitude, Longitude);
+}
diff --git a/samples/EssentialsAISample/Models/PointOfInterest.cs b/samples/EssentialsAISample/Models/PointOfInterest.cs
new file mode 100644
index 000000000..e19018e34
--- /dev/null
+++ b/samples/EssentialsAISample/Models/PointOfInterest.cs
@@ -0,0 +1,24 @@
+using System.Text.Json.Serialization;
+
+namespace EssentialsAISample.Models;
+
+public class PointOfInterest
+{
+ public string Name { get; set; } = string.Empty;
+
+ public PointOfInterestCategory Category { get; set; } = PointOfInterestCategory.None;
+
+ public string Description { get; set; } = string.Empty;
+}
+
+public enum PointOfInterestCategory
+{
+ None,
+ Cafe,
+ Campground,
+ Hotel,
+ Marina,
+ Museum,
+ NationalMonument,
+ Restaurant,
+}
diff --git a/samples/EssentialsAISample/Models/Weather.cs b/samples/EssentialsAISample/Models/Weather.cs
new file mode 100644
index 000000000..d21add303
--- /dev/null
+++ b/samples/EssentialsAISample/Models/Weather.cs
@@ -0,0 +1,66 @@
+using System.Text.Json.Serialization;
+
+namespace EssentialsAISample.Models;
+
+public record WeatherForecast
+{
+ [JsonPropertyName("latitude")]
+ public double Latitude { get; init; }
+
+ [JsonPropertyName("longitude")]
+ public double Longitude { get; init; }
+
+ [JsonPropertyName("daily")]
+ public DailyWeather Daily { get; init; } = new();
+}
+
+public record DailyWeather
+{
+ [JsonPropertyName("time")]
+ public List Time { get; init; } = [];
+
+ [JsonPropertyName("temperature_2m_mean")]
+ public List TemperatureMean { get; init; } = [];
+
+ [JsonPropertyName("weather_code")]
+ public List WeatherCode { get; init; } = [];
+}
+
+public static class WeatherCodeExtensions
+{
+ public static string GetWeatherDescription(int code)
+ {
+ return code switch
+ {
+ 0 => "Clear sky",
+ 1 => "Mainly clear",
+ 2 => "Partly cloudy",
+ 3 => "Overcast",
+ 45 => "Fog",
+ 48 => "Depositing rime fog",
+ 51 => "Light drizzle",
+ 53 => "Moderate drizzle",
+ 55 => "Dense drizzle",
+ 56 => "Light freezing drizzle",
+ 57 => "Dense freezing drizzle",
+ 61 => "Slight rain",
+ 63 => "Moderate rain",
+ 65 => "Heavy rain",
+ 66 => "Light freezing rain",
+ 67 => "Heavy freezing rain",
+ 71 => "Slight snow",
+ 73 => "Moderate snow",
+ 75 => "Heavy snow",
+ 77 => "Snow grains",
+ 80 => "Slight rain showers",
+ 81 => "Moderate rain showers",
+ 82 => "Violent rain showers",
+ 85 => "Slight snow showers",
+ 86 => "Heavy snow showers",
+ 95 => "Thunderstorm",
+ 96 => "Thunderstorm with slight hail",
+ 99 => "Thunderstorm with heavy hail",
+ _ => "Unknown"
+ };
+ }
+}
diff --git a/samples/EssentialsAISample/Pages/LandmarkDetailPage.xaml b/samples/EssentialsAISample/Pages/LandmarkDetailPage.xaml
new file mode 100644
index 000000000..999bd6c1e
--- /dev/null
+++ b/samples/EssentialsAISample/Pages/LandmarkDetailPage.xaml
@@ -0,0 +1,224 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/samples/EssentialsAISample/Pages/LandmarkDetailPage.xaml.cs b/samples/EssentialsAISample/Pages/LandmarkDetailPage.xaml.cs
new file mode 100644
index 000000000..9d4075e27
--- /dev/null
+++ b/samples/EssentialsAISample/Pages/LandmarkDetailPage.xaml.cs
@@ -0,0 +1,44 @@
+using EssentialsAISample.Models;
+using EssentialsAISample.ViewModels;
+
+namespace EssentialsAISample.Pages;
+
+public partial class LandmarkDetailPage : ContentPage
+{
+ private readonly LandmarkDetailViewModel _viewModel;
+
+ public LandmarkDetailPage(LandmarkDetailViewModel viewModel)
+ {
+ InitializeComponent();
+ _viewModel = viewModel;
+ BindingContext = viewModel;
+
+ Loaded += (_, _) => _ = viewModel.InitializeAsync(); // fire-and-forget so page renders immediately
+ NavigatingFrom += (_, _) => viewModel.Cancel();
+ }
+
+ private async void OnBackClicked(object? sender, EventArgs e)
+ {
+ await Shell.Current.GoToAsync("..");
+ }
+
+ private async void OnPlanTripClicked(object? sender, EventArgs e)
+ {
+ var parameters = new Dictionary
+ {
+ { "Landmark", _viewModel.Landmark },
+ { "Language", _viewModel.SelectedLanguage }
+ };
+ await Shell.Current.GoToAsync(nameof(TripPlanningPage), parameters);
+ }
+
+ private async void OnSimilarLandmarkTapped(object? sender, Landmark landmark)
+ {
+ var parameters = new Dictionary
+ {
+ { "Landmark", landmark }
+ };
+ // Navigate to a new detail page for the similar landmark
+ await Shell.Current.GoToAsync(nameof(LandmarkDetailPage), parameters);
+ }
+}
diff --git a/samples/EssentialsAISample/Pages/LandmarksPage.xaml b/samples/EssentialsAISample/Pages/LandmarksPage.xaml
new file mode 100644
index 000000000..ee3eff0d3
--- /dev/null
+++ b/samples/EssentialsAISample/Pages/LandmarksPage.xaml
@@ -0,0 +1,134 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/samples/EssentialsAISample/Pages/LandmarksPage.xaml.cs b/samples/EssentialsAISample/Pages/LandmarksPage.xaml.cs
new file mode 100644
index 000000000..bbec3e13c
--- /dev/null
+++ b/samples/EssentialsAISample/Pages/LandmarksPage.xaml.cs
@@ -0,0 +1,104 @@
+using EssentialsAISample.Models;
+using EssentialsAISample.ViewModels;
+using EssentialsAISample.Views;
+
+namespace EssentialsAISample.Pages;
+
+public partial class LandmarksPage : ContentPage
+{
+ private readonly LandmarksViewModel _viewModel;
+ private readonly ChatOverlayView _chatOverlay;
+ private readonly ChatViewModel _chatViewModel;
+
+ public LandmarksPage(LandmarksViewModel viewModel, ChatViewModel chatViewModel)
+ {
+ InitializeComponent();
+
+ _viewModel = viewModel;
+ _chatViewModel = chatViewModel;
+ BindingContext = viewModel;
+
+ _chatOverlay = new ChatOverlayView();
+ _chatOverlay.Initialize(chatViewModel);
+
+ // Remove native border and focus ring from the search entry
+ SearchEntry.HandlerChanged += (s, _) =>
+ {
+#if MACCATALYST || IOS
+ if (SearchEntry.Handler?.PlatformView is UIKit.UITextField textField)
+ {
+ textField.BorderStyle = UIKit.UITextBorderStyle.None;
+ if (OperatingSystem.IsIOSVersionAtLeast(15) || OperatingSystem.IsMacCatalystVersionAtLeast(15))
+ textField.FocusEffect = null;
+ }
+#elif WINDOWS
+ if (SearchEntry.Handler?.PlatformView is Microsoft.UI.Xaml.Controls.TextBox textBox)
+ {
+ textBox.BorderThickness = new Microsoft.UI.Xaml.Thickness(0);
+ textBox.BorderBrush = new Microsoft.UI.Xaml.Media.SolidColorBrush(Microsoft.UI.Colors.Transparent);
+ // Remove the focus underline
+ textBox.Resources["TextControlBorderThemeThicknessFocused"] = new Microsoft.UI.Xaml.Thickness(0);
+ }
+#endif
+ };
+
+ Loaded += async (_, _) => await viewModel.InitializeAsync();
+ }
+
+ protected override void OnAppearing()
+ {
+ base.OnAppearing();
+ _chatViewModel.ChatService.NavigateToTripRequested += OnNavigateToTrip;
+ }
+
+ protected override void OnDisappearing()
+ {
+ _viewModel.CancelPendingSearch();
+ _chatViewModel.ChatService.NavigateToTripRequested -= OnNavigateToTrip;
+ base.OnDisappearing();
+ }
+
+ private async void OnNavigateToTrip(Landmark landmark)
+ {
+ // Close chat overlay first if open
+ await _chatOverlay.Hide();
+
+ var parameters = new Dictionary
+ {
+ { "Landmark", landmark }
+ };
+ await Shell.Current.GoToAsync(nameof(TripPlanningPage), parameters);
+ }
+
+ private async void OnLandmarkTapped(object? sender, Landmark landmark)
+ {
+ await NavigateToDetail(landmark);
+ }
+
+ async Task NavigateToDetail(Landmark landmark)
+ {
+ var parameters = new Dictionary
+ {
+ { "Landmark", landmark },
+ { "RecentSearches", _viewModel.RecentSearches }
+ };
+ await Shell.Current.GoToAsync(nameof(LandmarkDetailPage), parameters);
+ }
+
+ private async void OnChatButtonClicked(object? sender, EventArgs e)
+ {
+ ChatFab.IsVisible = false;
+ var grid = (Grid)Content;
+ grid.Children.Add(_chatOverlay);
+ _chatOverlay.Closed += OnChatOverlayClosed;
+ await _chatOverlay.Show();
+ }
+
+ private void OnChatOverlayClosed(object? sender, EventArgs e)
+ {
+ _chatOverlay.Closed -= OnChatOverlayClosed;
+ var grid = (Grid)Content;
+ grid.Children.Remove(_chatOverlay);
+ ChatFab.IsVisible = true;
+ }
+}
diff --git a/samples/EssentialsAISample/Pages/TripPlanningPage.xaml b/samples/EssentialsAISample/Pages/TripPlanningPage.xaml
new file mode 100644
index 000000000..13a7ede2b
--- /dev/null
+++ b/samples/EssentialsAISample/Pages/TripPlanningPage.xaml
@@ -0,0 +1,80 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/samples/EssentialsAISample/Pages/TripPlanningPage.xaml.cs b/samples/EssentialsAISample/Pages/TripPlanningPage.xaml.cs
new file mode 100644
index 000000000..6444fcf3d
--- /dev/null
+++ b/samples/EssentialsAISample/Pages/TripPlanningPage.xaml.cs
@@ -0,0 +1,20 @@
+using EssentialsAISample.ViewModels;
+
+namespace EssentialsAISample.Pages;
+
+public partial class TripPlanningPage : ContentPage
+{
+ public TripPlanningPage(TripPlanningViewModel viewModel)
+ {
+ InitializeComponent();
+ BindingContext = viewModel;
+
+ Loaded += (_, _) => _ = viewModel.InitializeAsync();
+ NavigatingFrom += (_, _) => viewModel.Cancel();
+ }
+
+ private async void OnBackButtonClicked(object? sender, EventArgs e)
+ {
+ await Shell.Current.GoToAsync("..");
+ }
+}
diff --git a/samples/EssentialsAISample/Platforms/Android/AndroidManifest.xml b/samples/EssentialsAISample/Platforms/Android/AndroidManifest.xml
new file mode 100644
index 000000000..e9937ad77
--- /dev/null
+++ b/samples/EssentialsAISample/Platforms/Android/AndroidManifest.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/samples/EssentialsAISample/Platforms/Android/MainActivity.cs b/samples/EssentialsAISample/Platforms/Android/MainActivity.cs
new file mode 100644
index 000000000..f8689528c
--- /dev/null
+++ b/samples/EssentialsAISample/Platforms/Android/MainActivity.cs
@@ -0,0 +1,10 @@
+using Android.App;
+using Android.Content.PM;
+using Android.OS;
+
+namespace EssentialsAISample;
+
+[Activity(Theme = "@style/Maui.SplashTheme", MainLauncher = true, LaunchMode = LaunchMode.SingleTop, ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation | ConfigChanges.UiMode | ConfigChanges.ScreenLayout | ConfigChanges.SmallestScreenSize | ConfigChanges.Density)]
+public class MainActivity : MauiAppCompatActivity
+{
+}
diff --git a/samples/EssentialsAISample/Platforms/Android/MainApplication.cs b/samples/EssentialsAISample/Platforms/Android/MainApplication.cs
new file mode 100644
index 000000000..aba849701
--- /dev/null
+++ b/samples/EssentialsAISample/Platforms/Android/MainApplication.cs
@@ -0,0 +1,15 @@
+using Android.App;
+using Android.Runtime;
+
+namespace EssentialsAISample;
+
+[Application]
+public class MainApplication : MauiApplication
+{
+ public MainApplication(IntPtr handle, JniHandleOwnership ownership)
+ : base(handle, ownership)
+ {
+ }
+
+ protected override MauiApp CreateMauiApp() => MauiProgram.CreateMauiApp();
+}
diff --git a/samples/EssentialsAISample/Platforms/Android/Resources/values/colors.xml b/samples/EssentialsAISample/Platforms/Android/Resources/values/colors.xml
new file mode 100644
index 000000000..c04d7492a
--- /dev/null
+++ b/samples/EssentialsAISample/Platforms/Android/Resources/values/colors.xml
@@ -0,0 +1,6 @@
+
+
+ #512BD4
+ #2B0B98
+ #2B0B98
+
\ No newline at end of file
diff --git a/samples/EssentialsAISample/Platforms/MacCatalyst/AppDelegate.cs b/samples/EssentialsAISample/Platforms/MacCatalyst/AppDelegate.cs
new file mode 100644
index 000000000..c89fea337
--- /dev/null
+++ b/samples/EssentialsAISample/Platforms/MacCatalyst/AppDelegate.cs
@@ -0,0 +1,9 @@
+using Foundation;
+
+namespace EssentialsAISample;
+
+[Register("AppDelegate")]
+public class AppDelegate : MauiUIApplicationDelegate
+{
+ protected override MauiApp CreateMauiApp() => MauiProgram.CreateMauiApp();
+}
diff --git a/samples/EssentialsAISample/Platforms/MacCatalyst/Entitlements.plist b/samples/EssentialsAISample/Platforms/MacCatalyst/Entitlements.plist
new file mode 100644
index 000000000..de4adc94a
--- /dev/null
+++ b/samples/EssentialsAISample/Platforms/MacCatalyst/Entitlements.plist
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+ com.apple.security.app-sandbox
+
+
+ com.apple.security.network.client
+
+
+
+
diff --git a/samples/EssentialsAISample/Platforms/MacCatalyst/Info.plist b/samples/EssentialsAISample/Platforms/MacCatalyst/Info.plist
new file mode 100644
index 000000000..726897715
--- /dev/null
+++ b/samples/EssentialsAISample/Platforms/MacCatalyst/Info.plist
@@ -0,0 +1,38 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+ UIDeviceFamily
+
+ 2
+
+ UIRequiredDeviceCapabilities
+
+ arm64
+
+ UISupportedInterfaceOrientations
+
+ UIInterfaceOrientationPortrait
+ UIInterfaceOrientationLandscapeLeft
+ UIInterfaceOrientationLandscapeRight
+
+ UISupportedInterfaceOrientations~ipad
+
+ UIInterfaceOrientationPortrait
+ UIInterfaceOrientationPortraitUpsideDown
+ UIInterfaceOrientationLandscapeLeft
+ UIInterfaceOrientationLandscapeRight
+
+ XSAppIconAssets
+ Assets.xcassets/appicon.appiconset
+
+
diff --git a/samples/EssentialsAISample/Platforms/MacCatalyst/Program.cs b/samples/EssentialsAISample/Platforms/MacCatalyst/Program.cs
new file mode 100644
index 000000000..eddc165c8
--- /dev/null
+++ b/samples/EssentialsAISample/Platforms/MacCatalyst/Program.cs
@@ -0,0 +1,15 @@
+using ObjCRuntime;
+using UIKit;
+
+namespace EssentialsAISample;
+
+public class Program
+{
+ // This is the main entry point of the application.
+ static void Main(string[] args)
+ {
+ // if you want to use a different Application Delegate class from "AppDelegate"
+ // you can specify it here.
+ UIApplication.Main(args, null, typeof(AppDelegate));
+ }
+}
diff --git a/samples/EssentialsAISample/Platforms/Windows/App.xaml b/samples/EssentialsAISample/Platforms/Windows/App.xaml
new file mode 100644
index 000000000..4ca30dac1
--- /dev/null
+++ b/samples/EssentialsAISample/Platforms/Windows/App.xaml
@@ -0,0 +1,8 @@
+
+
+
diff --git a/samples/EssentialsAISample/Platforms/Windows/App.xaml.cs b/samples/EssentialsAISample/Platforms/Windows/App.xaml.cs
new file mode 100644
index 000000000..8ea3851bb
--- /dev/null
+++ b/samples/EssentialsAISample/Platforms/Windows/App.xaml.cs
@@ -0,0 +1,24 @@
+using Microsoft.UI.Xaml;
+
+// To learn more about WinUI, the WinUI project structure,
+// and more about our project templates, see: http://aka.ms/winui-project-info.
+
+namespace EssentialsAISample.WinUI;
+
+///
+/// Provides application-specific behavior to supplement the default Application class.
+///
+public partial class App : MauiWinUIApplication
+{
+ ///
+ /// Initializes the singleton application object. This is the first line of authored code
+ /// executed, and as such is the logical equivalent of main() or WinMain().
+ ///
+ public App()
+ {
+ this.InitializeComponent();
+ }
+
+ protected override MauiApp CreateMauiApp() => MauiProgram.CreateMauiApp();
+}
+
diff --git a/samples/EssentialsAISample/Platforms/Windows/Package.appxmanifest b/samples/EssentialsAISample/Platforms/Windows/Package.appxmanifest
new file mode 100644
index 000000000..b5b1cc504
--- /dev/null
+++ b/samples/EssentialsAISample/Platforms/Windows/Package.appxmanifest
@@ -0,0 +1,46 @@
+
+
+
+
+
+
+
+
+ $placeholder$
+ User Name
+ $placeholder$.png
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/samples/EssentialsAISample/Platforms/Windows/app.manifest b/samples/EssentialsAISample/Platforms/Windows/app.manifest
new file mode 100644
index 000000000..556741ef7
--- /dev/null
+++ b/samples/EssentialsAISample/Platforms/Windows/app.manifest
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+ true/PM
+ PerMonitorV2, PerMonitor
+
+
+
diff --git a/samples/EssentialsAISample/Platforms/iOS/AppDelegate.cs b/samples/EssentialsAISample/Platforms/iOS/AppDelegate.cs
new file mode 100644
index 000000000..c89fea337
--- /dev/null
+++ b/samples/EssentialsAISample/Platforms/iOS/AppDelegate.cs
@@ -0,0 +1,9 @@
+using Foundation;
+
+namespace EssentialsAISample;
+
+[Register("AppDelegate")]
+public class AppDelegate : MauiUIApplicationDelegate
+{
+ protected override MauiApp CreateMauiApp() => MauiProgram.CreateMauiApp();
+}
diff --git a/samples/EssentialsAISample/Platforms/iOS/Info.plist b/samples/EssentialsAISample/Platforms/iOS/Info.plist
new file mode 100644
index 000000000..0004a4fde
--- /dev/null
+++ b/samples/EssentialsAISample/Platforms/iOS/Info.plist
@@ -0,0 +1,32 @@
+
+
+
+
+ LSRequiresIPhoneOS
+
+ UIDeviceFamily
+
+ 1
+ 2
+
+ UIRequiredDeviceCapabilities
+
+ arm64
+
+ UISupportedInterfaceOrientations
+
+ UIInterfaceOrientationPortrait
+ UIInterfaceOrientationLandscapeLeft
+ UIInterfaceOrientationLandscapeRight
+
+ UISupportedInterfaceOrientations~ipad
+
+ UIInterfaceOrientationPortrait
+ UIInterfaceOrientationPortraitUpsideDown
+ UIInterfaceOrientationLandscapeLeft
+ UIInterfaceOrientationLandscapeRight
+
+ XSAppIconAssets
+ Assets.xcassets/appicon.appiconset
+
+
diff --git a/samples/EssentialsAISample/Platforms/iOS/Program.cs b/samples/EssentialsAISample/Platforms/iOS/Program.cs
new file mode 100644
index 000000000..eddc165c8
--- /dev/null
+++ b/samples/EssentialsAISample/Platforms/iOS/Program.cs
@@ -0,0 +1,15 @@
+using ObjCRuntime;
+using UIKit;
+
+namespace EssentialsAISample;
+
+public class Program
+{
+ // This is the main entry point of the application.
+ static void Main(string[] args)
+ {
+ // if you want to use a different Application Delegate class from "AppDelegate"
+ // you can specify it here.
+ UIApplication.Main(args, null, typeof(AppDelegate));
+ }
+}
diff --git a/samples/EssentialsAISample/Platforms/iOS/Resources/PrivacyInfo.xcprivacy b/samples/EssentialsAISample/Platforms/iOS/Resources/PrivacyInfo.xcprivacy
new file mode 100644
index 000000000..24ab3b433
--- /dev/null
+++ b/samples/EssentialsAISample/Platforms/iOS/Resources/PrivacyInfo.xcprivacy
@@ -0,0 +1,51 @@
+
+
+
+
+
+ NSPrivacyAccessedAPITypes
+
+
+ NSPrivacyAccessedAPIType
+ NSPrivacyAccessedAPICategoryFileTimestamp
+ NSPrivacyAccessedAPITypeReasons
+
+ C617.1
+
+
+
+ NSPrivacyAccessedAPIType
+ NSPrivacyAccessedAPICategorySystemBootTime
+ NSPrivacyAccessedAPITypeReasons
+
+ 35F9.1
+
+
+
+ NSPrivacyAccessedAPIType
+ NSPrivacyAccessedAPICategoryDiskSpace
+ NSPrivacyAccessedAPITypeReasons
+
+ E174.1
+
+
+
+
+
+
diff --git a/samples/EssentialsAISample/Properties/launchSettings.json b/samples/EssentialsAISample/Properties/launchSettings.json
new file mode 100644
index 000000000..4f857936f
--- /dev/null
+++ b/samples/EssentialsAISample/Properties/launchSettings.json
@@ -0,0 +1,8 @@
+{
+ "profiles": {
+ "Windows Machine": {
+ "commandName": "Project",
+ "nativeDebugging": false
+ }
+ }
+}
\ No newline at end of file
diff --git a/samples/EssentialsAISample/README.md b/samples/EssentialsAISample/README.md
new file mode 100644
index 000000000..6066eefc3
--- /dev/null
+++ b/samples/EssentialsAISample/README.md
@@ -0,0 +1,94 @@
+# Essentials.AI.Sample - Trip Planner
+
+AI-powered travel itinerary generator using Microsoft.Extensions.AI and Microsoft.Agents.AI in .NET MAUI.
+
+## Overview
+
+This sample demonstrates how to integrate Large Language Models (LLMs) into a .NET MAUI application using a multi-agent workflow architecture. The app generates personalized multi-day travel itineraries for famous landmarks worldwide, featuring:
+
+- **Multi-Agent Workflow**: 4 specialized AI agents that collaborate to generate itineraries
+- **Streaming AI Responses**: Real-time itinerary generation with incremental updates
+- **Structured JSON Output**: Uses JSON schema to ensure consistent, typed responses
+- **AI-Powered Tools**: Agents use function calling to discover points of interest
+- **Conditional Translation**: Automatic translation when non-English output is requested
+- **Cross-Platform**: Runs on iOS, Android, Windows, and macOS
+
+## Setup
+
+To run this sample, you need to configure Azure OpenAI credentials using user secrets.
+
+### Configure User Secrets
+
+1. Navigate to the sample directory:
+ ```bash
+ cd src/AI/samples/Essentials.AI.Sample
+ ```
+
+2. Initialize user secrets (if not already done):
+ ```bash
+ dotnet user-secrets init
+ ```
+
+3. Create a `secrets.json` file with your Azure OpenAI configuration:
+ ```json
+ {
+ "AI": {
+ "DeploymentName": "",
+ "EmbeddingDeploymentName": "",
+ "Endpoint": "",
+ "ApiKey": ""
+ }
+ }
+ ```
+
+ Replace the placeholders:
+ - `` - Your Azure OpenAI chat model deployment (e.g., `gpt-4o`)
+ - `` - Your embedding model deployment (e.g., `text-embedding-3-small`)
+ - `` - Your Azure OpenAI endpoint URL
+ - `` - Your Azure OpenAI API key
+
+4. The secrets file should be placed at the user secrets location or embedded as `secrets.json` in the project.
+
+## How It Works
+
+### Agent Workflow Architecture
+
+The app uses a 4-agent workflow registered via `AddItineraryWorkflow()`:
+
+1. **Travel Planner Agent** - Parses natural language input to extract destination, day count, and target language (no tools - just structured output)
+2. **Researcher Agent** - Uses semantic search (RAG with embeddings) to find candidate destinations, then AI selects the best match
+3. **Itinerary Planner Agent** - Builds a detailed itinerary using the `findPointsOfInterest` tool with streaming JSON output
+4. **Translator Agent** - Translates the itinerary if a non-English language was requested (conditional, streaming)
+
+The workflow uses a conditional branching pattern:
+- **English requests**: Travel Planner → Researcher → Itinerary Planner → Output
+- **Non-English requests**: Travel Planner → Researcher → Itinerary Planner → Translator → Output
+
+### Service Registration
+
+Multiple AI clients are registered in dependency injection:
+- `IChatClient` - Generic chat client for simple inference (e.g., `TaggingService`)
+- `IChatClient` keyed `"local-model"` - Chat client with function calling support
+- `IChatClient` keyed `"cloud-model"` - Chat client for high-quality output (translation)
+- `AIAgent` keyed `"itinerary-workflow-agent"` - The complete workflow as an invocable agent
+
+### User Flow
+
+1. **Landmark Selection**: Users browse landmarks organized by continent and select one for trip planning
+2. **Tag Generation**: The `TaggingService` extracts relevant tags from landmark descriptions using AI
+3. **Itinerary Generation**: The `ItineraryService` invokes the workflow agent which:
+ - Parses the user's request to extract intent
+ - Researches available destinations to find the best match
+ - Generates a structured itinerary with real places using tool calls
+ - Optionally translates the result if a non-English language was requested
+4. **Display**: Generated itineraries show daily activities including sightseeing, dining, and lodging recommendations with real-time streaming updates
+
+### Key AI Patterns
+
+- **Workflow-as-Agent**: The multi-agent workflow is registered as a single `AIAgent` for clean invocation via `workflowAgent.RunStreamingAsync()`
+- **RAG (Retrieval-Augmented Generation)**: Researcher agent uses embedding-based semantic search to find candidate destinations before AI selection
+- **Structured Output**: Uses `ChatResponseFormat.ForJsonSchema()` to enforce response structure matching C# record types
+- **Function Calling**: Itinerary Planner uses `AIFunctionFactory.Create()` to define the `findPointsOfInterest` tool
+- **Streaming**: Agents use `RunStreamingAsync()` to emit partial JSON as it's generated for progressive UI updates
+- **Partial Deserialization**: `StreamingJsonDeserializer` deserializes incomplete JSON during streaming to show progressive updates
+- **Conditional Edges**: Workflow uses typed edge conditions to branch based on output (e.g., skip translation for English)
diff --git a/samples/EssentialsAISample/Resources/AppIcon/appicon.svg b/samples/EssentialsAISample/Resources/AppIcon/appicon.svg
new file mode 100644
index 000000000..9d63b6513
--- /dev/null
+++ b/samples/EssentialsAISample/Resources/AppIcon/appicon.svg
@@ -0,0 +1,4 @@
+
+
\ No newline at end of file
diff --git a/samples/EssentialsAISample/Resources/AppIcon/appiconfg.svg b/samples/EssentialsAISample/Resources/AppIcon/appiconfg.svg
new file mode 100644
index 000000000..21dfb25f1
--- /dev/null
+++ b/samples/EssentialsAISample/Resources/AppIcon/appiconfg.svg
@@ -0,0 +1,8 @@
+
+
+
\ No newline at end of file
diff --git a/samples/EssentialsAISample/Resources/Fonts/FluentSystemIcons-Regular.ttf b/samples/EssentialsAISample/Resources/Fonts/FluentSystemIcons-Regular.ttf
new file mode 100644
index 000000000..ede56a277
Binary files /dev/null and b/samples/EssentialsAISample/Resources/Fonts/FluentSystemIcons-Regular.ttf differ
diff --git a/samples/EssentialsAISample/Resources/Fonts/OpenSans-Regular.ttf b/samples/EssentialsAISample/Resources/Fonts/OpenSans-Regular.ttf
new file mode 100644
index 000000000..63ba3efc1
Binary files /dev/null and b/samples/EssentialsAISample/Resources/Fonts/OpenSans-Regular.ttf differ
diff --git a/samples/EssentialsAISample/Resources/Fonts/OpenSans-Semibold.ttf b/samples/EssentialsAISample/Resources/Fonts/OpenSans-Semibold.ttf
new file mode 100644
index 000000000..774cb9bb3
Binary files /dev/null and b/samples/EssentialsAISample/Resources/Fonts/OpenSans-Semibold.ttf differ
diff --git a/samples/EssentialsAISample/Resources/Images/dotnet_bot.png b/samples/EssentialsAISample/Resources/Images/dotnet_bot.png
new file mode 100644
index 000000000..054167e59
Binary files /dev/null and b/samples/EssentialsAISample/Resources/Images/dotnet_bot.png differ
diff --git a/samples/EssentialsAISample/Resources/Raw/AboutAssets.txt b/samples/EssentialsAISample/Resources/Raw/AboutAssets.txt
new file mode 100644
index 000000000..89dc758d6
--- /dev/null
+++ b/samples/EssentialsAISample/Resources/Raw/AboutAssets.txt
@@ -0,0 +1,15 @@
+Any raw assets you want to be deployed with your application can be placed in
+this directory (and child directories). Deployment of the asset to your application
+is automatically handled by the following `MauiAsset` Build Action within your `.csproj`.
+
+
+
+These files will be deployed with your package and will be accessible using Essentials:
+
+ async Task LoadMauiAsset()
+ {
+ using var stream = await FileSystem.OpenAppPackageFileAsync("AboutAssets.txt");
+ using var reader = new StreamReader(stream);
+
+ var contents = reader.ReadToEnd();
+ }
diff --git a/samples/EssentialsAISample/Resources/Raw/Images/Backgrounds/1001.jpg b/samples/EssentialsAISample/Resources/Raw/Images/Backgrounds/1001.jpg
new file mode 100644
index 000000000..ff63af08b
Binary files /dev/null and b/samples/EssentialsAISample/Resources/Raw/Images/Backgrounds/1001.jpg differ
diff --git a/samples/EssentialsAISample/Resources/Raw/Images/Backgrounds/1002.jpg b/samples/EssentialsAISample/Resources/Raw/Images/Backgrounds/1002.jpg
new file mode 100644
index 000000000..2446e92a1
Binary files /dev/null and b/samples/EssentialsAISample/Resources/Raw/Images/Backgrounds/1002.jpg differ
diff --git a/samples/EssentialsAISample/Resources/Raw/Images/Backgrounds/1003.jpg b/samples/EssentialsAISample/Resources/Raw/Images/Backgrounds/1003.jpg
new file mode 100644
index 000000000..82121c8cf
Binary files /dev/null and b/samples/EssentialsAISample/Resources/Raw/Images/Backgrounds/1003.jpg differ
diff --git a/samples/EssentialsAISample/Resources/Raw/Images/Backgrounds/1004.jpg b/samples/EssentialsAISample/Resources/Raw/Images/Backgrounds/1004.jpg
new file mode 100644
index 000000000..e56bc7582
Binary files /dev/null and b/samples/EssentialsAISample/Resources/Raw/Images/Backgrounds/1004.jpg differ
diff --git a/samples/EssentialsAISample/Resources/Raw/Images/Backgrounds/1005.jpg b/samples/EssentialsAISample/Resources/Raw/Images/Backgrounds/1005.jpg
new file mode 100644
index 000000000..1efa74bd5
Binary files /dev/null and b/samples/EssentialsAISample/Resources/Raw/Images/Backgrounds/1005.jpg differ
diff --git a/samples/EssentialsAISample/Resources/Raw/Images/Backgrounds/1006.jpg b/samples/EssentialsAISample/Resources/Raw/Images/Backgrounds/1006.jpg
new file mode 100644
index 000000000..9100f361c
Binary files /dev/null and b/samples/EssentialsAISample/Resources/Raw/Images/Backgrounds/1006.jpg differ
diff --git a/samples/EssentialsAISample/Resources/Raw/Images/Backgrounds/1007.jpg b/samples/EssentialsAISample/Resources/Raw/Images/Backgrounds/1007.jpg
new file mode 100644
index 000000000..47bd2c822
Binary files /dev/null and b/samples/EssentialsAISample/Resources/Raw/Images/Backgrounds/1007.jpg differ
diff --git a/samples/EssentialsAISample/Resources/Raw/Images/Backgrounds/1008.jpg b/samples/EssentialsAISample/Resources/Raw/Images/Backgrounds/1008.jpg
new file mode 100644
index 000000000..e6b22fc2c
Binary files /dev/null and b/samples/EssentialsAISample/Resources/Raw/Images/Backgrounds/1008.jpg differ
diff --git a/samples/EssentialsAISample/Resources/Raw/Images/Backgrounds/1009.jpg b/samples/EssentialsAISample/Resources/Raw/Images/Backgrounds/1009.jpg
new file mode 100644
index 000000000..2d93e94b1
Binary files /dev/null and b/samples/EssentialsAISample/Resources/Raw/Images/Backgrounds/1009.jpg differ
diff --git a/samples/EssentialsAISample/Resources/Raw/Images/Backgrounds/1010.jpg b/samples/EssentialsAISample/Resources/Raw/Images/Backgrounds/1010.jpg
new file mode 100644
index 000000000..ff25d95f4
Binary files /dev/null and b/samples/EssentialsAISample/Resources/Raw/Images/Backgrounds/1010.jpg differ
diff --git a/samples/EssentialsAISample/Resources/Raw/Images/Backgrounds/1011.jpg b/samples/EssentialsAISample/Resources/Raw/Images/Backgrounds/1011.jpg
new file mode 100644
index 000000000..43cc8b03c
Binary files /dev/null and b/samples/EssentialsAISample/Resources/Raw/Images/Backgrounds/1011.jpg differ
diff --git a/samples/EssentialsAISample/Resources/Raw/Images/Backgrounds/1012.jpg b/samples/EssentialsAISample/Resources/Raw/Images/Backgrounds/1012.jpg
new file mode 100644
index 000000000..79e172af3
Binary files /dev/null and b/samples/EssentialsAISample/Resources/Raw/Images/Backgrounds/1012.jpg differ
diff --git a/samples/EssentialsAISample/Resources/Raw/Images/Backgrounds/1014.jpg b/samples/EssentialsAISample/Resources/Raw/Images/Backgrounds/1014.jpg
new file mode 100644
index 000000000..963098d9b
Binary files /dev/null and b/samples/EssentialsAISample/Resources/Raw/Images/Backgrounds/1014.jpg differ
diff --git a/samples/EssentialsAISample/Resources/Raw/Images/Backgrounds/1015.jpg b/samples/EssentialsAISample/Resources/Raw/Images/Backgrounds/1015.jpg
new file mode 100644
index 000000000..4aecc6425
Binary files /dev/null and b/samples/EssentialsAISample/Resources/Raw/Images/Backgrounds/1015.jpg differ
diff --git a/samples/EssentialsAISample/Resources/Raw/Images/Backgrounds/1016.jpg b/samples/EssentialsAISample/Resources/Raw/Images/Backgrounds/1016.jpg
new file mode 100644
index 000000000..3bc356c9a
Binary files /dev/null and b/samples/EssentialsAISample/Resources/Raw/Images/Backgrounds/1016.jpg differ
diff --git a/samples/EssentialsAISample/Resources/Raw/Images/Backgrounds/1017.jpg b/samples/EssentialsAISample/Resources/Raw/Images/Backgrounds/1017.jpg
new file mode 100644
index 000000000..5077a4f43
Binary files /dev/null and b/samples/EssentialsAISample/Resources/Raw/Images/Backgrounds/1017.jpg differ
diff --git a/samples/EssentialsAISample/Resources/Raw/Images/Backgrounds/1018.jpg b/samples/EssentialsAISample/Resources/Raw/Images/Backgrounds/1018.jpg
new file mode 100644
index 000000000..6755635f1
Binary files /dev/null and b/samples/EssentialsAISample/Resources/Raw/Images/Backgrounds/1018.jpg differ
diff --git a/samples/EssentialsAISample/Resources/Raw/Images/Backgrounds/1019.jpg b/samples/EssentialsAISample/Resources/Raw/Images/Backgrounds/1019.jpg
new file mode 100644
index 000000000..4542228ae
Binary files /dev/null and b/samples/EssentialsAISample/Resources/Raw/Images/Backgrounds/1019.jpg differ
diff --git a/samples/EssentialsAISample/Resources/Raw/Images/Backgrounds/1020.jpg b/samples/EssentialsAISample/Resources/Raw/Images/Backgrounds/1020.jpg
new file mode 100644
index 000000000..b2f4f5ddc
Binary files /dev/null and b/samples/EssentialsAISample/Resources/Raw/Images/Backgrounds/1020.jpg differ
diff --git a/samples/EssentialsAISample/Resources/Raw/Images/Backgrounds/1021.jpg b/samples/EssentialsAISample/Resources/Raw/Images/Backgrounds/1021.jpg
new file mode 100644
index 000000000..c9544e06b
Binary files /dev/null and b/samples/EssentialsAISample/Resources/Raw/Images/Backgrounds/1021.jpg differ
diff --git a/samples/EssentialsAISample/Resources/Raw/Images/Backgrounds/1022.jpg b/samples/EssentialsAISample/Resources/Raw/Images/Backgrounds/1022.jpg
new file mode 100644
index 000000000..0f5063f8b
Binary files /dev/null and b/samples/EssentialsAISample/Resources/Raw/Images/Backgrounds/1022.jpg differ
diff --git a/samples/EssentialsAISample/Resources/Raw/Images/Backgrounds/1023.jpg b/samples/EssentialsAISample/Resources/Raw/Images/Backgrounds/1023.jpg
new file mode 100644
index 000000000..dd8323ea0
Binary files /dev/null and b/samples/EssentialsAISample/Resources/Raw/Images/Backgrounds/1023.jpg differ
diff --git a/samples/EssentialsAISample/Resources/Raw/Images/Thumbnails/1001_thumb.jpg b/samples/EssentialsAISample/Resources/Raw/Images/Thumbnails/1001_thumb.jpg
new file mode 100644
index 000000000..72d869b25
Binary files /dev/null and b/samples/EssentialsAISample/Resources/Raw/Images/Thumbnails/1001_thumb.jpg differ
diff --git a/samples/EssentialsAISample/Resources/Raw/Images/Thumbnails/1002_thumb.jpg b/samples/EssentialsAISample/Resources/Raw/Images/Thumbnails/1002_thumb.jpg
new file mode 100644
index 000000000..85a8f1f0d
Binary files /dev/null and b/samples/EssentialsAISample/Resources/Raw/Images/Thumbnails/1002_thumb.jpg differ
diff --git a/samples/EssentialsAISample/Resources/Raw/Images/Thumbnails/1003_thumb.jpg b/samples/EssentialsAISample/Resources/Raw/Images/Thumbnails/1003_thumb.jpg
new file mode 100644
index 000000000..403190c92
Binary files /dev/null and b/samples/EssentialsAISample/Resources/Raw/Images/Thumbnails/1003_thumb.jpg differ
diff --git a/samples/EssentialsAISample/Resources/Raw/Images/Thumbnails/1004_thumb.jpg b/samples/EssentialsAISample/Resources/Raw/Images/Thumbnails/1004_thumb.jpg
new file mode 100644
index 000000000..34ca80f8a
Binary files /dev/null and b/samples/EssentialsAISample/Resources/Raw/Images/Thumbnails/1004_thumb.jpg differ
diff --git a/samples/EssentialsAISample/Resources/Raw/Images/Thumbnails/1005_thumb.jpg b/samples/EssentialsAISample/Resources/Raw/Images/Thumbnails/1005_thumb.jpg
new file mode 100644
index 000000000..1368e60d2
Binary files /dev/null and b/samples/EssentialsAISample/Resources/Raw/Images/Thumbnails/1005_thumb.jpg differ
diff --git a/samples/EssentialsAISample/Resources/Raw/Images/Thumbnails/1006_thumb.jpg b/samples/EssentialsAISample/Resources/Raw/Images/Thumbnails/1006_thumb.jpg
new file mode 100644
index 000000000..53a8fade6
Binary files /dev/null and b/samples/EssentialsAISample/Resources/Raw/Images/Thumbnails/1006_thumb.jpg differ
diff --git a/samples/EssentialsAISample/Resources/Raw/Images/Thumbnails/1007_thumb.jpg b/samples/EssentialsAISample/Resources/Raw/Images/Thumbnails/1007_thumb.jpg
new file mode 100644
index 000000000..c4f31826b
Binary files /dev/null and b/samples/EssentialsAISample/Resources/Raw/Images/Thumbnails/1007_thumb.jpg differ
diff --git a/samples/EssentialsAISample/Resources/Raw/Images/Thumbnails/1008_thumb.jpg b/samples/EssentialsAISample/Resources/Raw/Images/Thumbnails/1008_thumb.jpg
new file mode 100644
index 000000000..2a2847896
Binary files /dev/null and b/samples/EssentialsAISample/Resources/Raw/Images/Thumbnails/1008_thumb.jpg differ
diff --git a/samples/EssentialsAISample/Resources/Raw/Images/Thumbnails/1009_thumb.jpg b/samples/EssentialsAISample/Resources/Raw/Images/Thumbnails/1009_thumb.jpg
new file mode 100644
index 000000000..475d182f0
Binary files /dev/null and b/samples/EssentialsAISample/Resources/Raw/Images/Thumbnails/1009_thumb.jpg differ
diff --git a/samples/EssentialsAISample/Resources/Raw/Images/Thumbnails/1010_thumb.jpg b/samples/EssentialsAISample/Resources/Raw/Images/Thumbnails/1010_thumb.jpg
new file mode 100644
index 000000000..1e74432e1
Binary files /dev/null and b/samples/EssentialsAISample/Resources/Raw/Images/Thumbnails/1010_thumb.jpg differ
diff --git a/samples/EssentialsAISample/Resources/Raw/Images/Thumbnails/1011_thumb.jpg b/samples/EssentialsAISample/Resources/Raw/Images/Thumbnails/1011_thumb.jpg
new file mode 100644
index 000000000..6c4d02ca5
Binary files /dev/null and b/samples/EssentialsAISample/Resources/Raw/Images/Thumbnails/1011_thumb.jpg differ
diff --git a/samples/EssentialsAISample/Resources/Raw/Images/Thumbnails/1012_thumb.jpg b/samples/EssentialsAISample/Resources/Raw/Images/Thumbnails/1012_thumb.jpg
new file mode 100644
index 000000000..1c50f3d6c
Binary files /dev/null and b/samples/EssentialsAISample/Resources/Raw/Images/Thumbnails/1012_thumb.jpg differ
diff --git a/samples/EssentialsAISample/Resources/Raw/Images/Thumbnails/1014_thumb.jpg b/samples/EssentialsAISample/Resources/Raw/Images/Thumbnails/1014_thumb.jpg
new file mode 100644
index 000000000..eb17bcb43
Binary files /dev/null and b/samples/EssentialsAISample/Resources/Raw/Images/Thumbnails/1014_thumb.jpg differ
diff --git a/samples/EssentialsAISample/Resources/Raw/Images/Thumbnails/1015_thumb.jpg b/samples/EssentialsAISample/Resources/Raw/Images/Thumbnails/1015_thumb.jpg
new file mode 100644
index 000000000..880dea3f0
Binary files /dev/null and b/samples/EssentialsAISample/Resources/Raw/Images/Thumbnails/1015_thumb.jpg differ
diff --git a/samples/EssentialsAISample/Resources/Raw/Images/Thumbnails/1016_thumb.jpg b/samples/EssentialsAISample/Resources/Raw/Images/Thumbnails/1016_thumb.jpg
new file mode 100644
index 000000000..e77757bfd
Binary files /dev/null and b/samples/EssentialsAISample/Resources/Raw/Images/Thumbnails/1016_thumb.jpg differ
diff --git a/samples/EssentialsAISample/Resources/Raw/Images/Thumbnails/1017_thumb.jpg b/samples/EssentialsAISample/Resources/Raw/Images/Thumbnails/1017_thumb.jpg
new file mode 100644
index 000000000..f457c251e
Binary files /dev/null and b/samples/EssentialsAISample/Resources/Raw/Images/Thumbnails/1017_thumb.jpg differ
diff --git a/samples/EssentialsAISample/Resources/Raw/Images/Thumbnails/1018_thumb.jpg b/samples/EssentialsAISample/Resources/Raw/Images/Thumbnails/1018_thumb.jpg
new file mode 100644
index 000000000..9e204f823
Binary files /dev/null and b/samples/EssentialsAISample/Resources/Raw/Images/Thumbnails/1018_thumb.jpg differ
diff --git a/samples/EssentialsAISample/Resources/Raw/Images/Thumbnails/1019_thumb.jpg b/samples/EssentialsAISample/Resources/Raw/Images/Thumbnails/1019_thumb.jpg
new file mode 100644
index 000000000..18399c92c
Binary files /dev/null and b/samples/EssentialsAISample/Resources/Raw/Images/Thumbnails/1019_thumb.jpg differ
diff --git a/samples/EssentialsAISample/Resources/Raw/Images/Thumbnails/1020_thumb.jpg b/samples/EssentialsAISample/Resources/Raw/Images/Thumbnails/1020_thumb.jpg
new file mode 100644
index 000000000..e4cc55d85
Binary files /dev/null and b/samples/EssentialsAISample/Resources/Raw/Images/Thumbnails/1020_thumb.jpg differ
diff --git a/samples/EssentialsAISample/Resources/Raw/Images/Thumbnails/1021_thumb.jpg b/samples/EssentialsAISample/Resources/Raw/Images/Thumbnails/1021_thumb.jpg
new file mode 100644
index 000000000..1893301c1
Binary files /dev/null and b/samples/EssentialsAISample/Resources/Raw/Images/Thumbnails/1021_thumb.jpg differ
diff --git a/samples/EssentialsAISample/Resources/Raw/Images/Thumbnails/1022_thumb.jpg b/samples/EssentialsAISample/Resources/Raw/Images/Thumbnails/1022_thumb.jpg
new file mode 100644
index 000000000..6c71b24d3
Binary files /dev/null and b/samples/EssentialsAISample/Resources/Raw/Images/Thumbnails/1022_thumb.jpg differ
diff --git a/samples/EssentialsAISample/Resources/Raw/Images/Thumbnails/1023_thumb.jpg b/samples/EssentialsAISample/Resources/Raw/Images/Thumbnails/1023_thumb.jpg
new file mode 100644
index 000000000..56d0e3593
Binary files /dev/null and b/samples/EssentialsAISample/Resources/Raw/Images/Thumbnails/1023_thumb.jpg differ
diff --git a/samples/EssentialsAISample/Resources/Raw/landmarkData.json b/samples/EssentialsAISample/Resources/Raw/landmarkData.json
new file mode 100644
index 000000000..89db96e74
--- /dev/null
+++ b/samples/EssentialsAISample/Resources/Raw/landmarkData.json
@@ -0,0 +1,244 @@
+[
+ {
+ "name": "Sahara Desert",
+ "continent": "Africa",
+ "id": 1001,
+ "placeID": "IC6C65CA81B4B2772",
+ "longitude": 10.33569,
+ "latitude": 23.90013,
+ "span": 40.0,
+ "description": "The sprawling Sahara Desert spans more than 3.5 million square miles and is the largest hot desert in the world. Covering much of northern Africa, it reaches three major bodies of water: the Atlantic Ocean in the west, the Red Sea in the east, and the Mediterranean Sea to the north. To the south is the Sahei region. The Sahara’s harsh environment is characterized by vast sand dunes, arid plains, and rocky plateaus. The tallest sand dune is located in the Erg Chebbi region of southeastern Morocco and reaches a height of roughly 330 feet. The desert plays an important role in shaping climate patterns and ecological systems.\n\nFormed over the course of millions of years and dating back to the Precambrian era, the Sahara was once a lush, verdant landscape with lakes and rivers. Over many years, wind erosion has sculpted towering cliffs, rock arches, deep canyons and many striking and picturesque landforms. Beneath a surface composed of gravel plains and sand seas lies vast underground aquifers that store ancient water, hidden remnants of a time when the Sahara was a much more hospitable place.\n\nWhile the Sahara experiences extreme temperatures and has scarce rainfall, it supports a variety of plant and animal life that have adapted to the harsh conditions. The sparse vegetation includes drought-tolerant varieties such as desert grasses such as Lovegrass that can store water in their roots and help prevent soil erosion. Other vegetation includes Acacia trees, date palms, and olive trees. Animal life has also adapted to be able to endure the extreme heat and extended periods of time with little or no water. Fennec foxes, camels, addax, and scorpions are some examples of the species found in the Sahara. Many animals have made nocturnal adaptations in order to remain hidden during the high daytime temperatures. Many migratory birds pass through the region and take advantage of seasonal water sources and oases.",
+ "shortDescription": "Covering much of northern Africa, it reaches three major bodies of water: the Atlantic Ocean in the west, the Red Sea in the east, and the Mediterranean Sea to the north."
+ },
+ {
+ "name": "Serengeti",
+ "continent": "Africa",
+ "id": 1002,
+ "placeID": "IB3A0184A4D301279",
+ "longitude": 34.88159,
+ "latitude": -2.45469,
+ "span": 10.0,
+ "description": "Located in northern Tanzania and southwestern Kenya, the Serengeti is a mix of riparian forests, acacia woodlands, and grasslands that covers nearly 12,000 square miles. With open plains that stretch seemingly forever, it creates a breathtaking backdrop for one of the most spectacular wildlife events on Earth: the awe-inspiring Great Migration.\n\nVolcano activity from the nearby Ngorongoro Highlands shaped much of the region, depositing nutrient-rich soil as a result of past eruptions. The Serengeti sits atop Precambrian rock formations and supports vast herds of herbivores with abundant grasses. The Mara and Grumeti rivers carve their way through he plains, providing crucial water supplies to sustain wildlife year-round.\n\nThe Serengeti is home to one of Africa’s highest concentrations of large mammal species, including elephants, giraffes, hyenas, lions, and zebras. Every year, more than a million wildebeest make a circular migration across the Serengeti Plains, following seasonal rains. Their grazing and trampling of grass allow new grasses to grow, while their wast helps fertilize the soil.",
+ "shortDescription": "Located in northern Tanzania and southwestern Kenya, the Serengeti is a mix of riparian forests, acacia woodlands, and grasslands that covers nearly 12,000 square miles."
+ },
+ {
+ "name": "Deadvlei",
+ "continent": "Africa",
+ "id": 1003,
+ "placeID": "IBD2966F32E73D261",
+ "longitude": 15.29429,
+ "latitude": -24.7629,
+ "span": 10.0,
+ "description": "An otherworldly landscape of contrasting bleached white claypan ground, blackened camel thorn trees, and fiery red-orange dunes, Deadvlei is located in Namibia’s Namib-Naukluft National Park. Over 900 years ago, Deadvlei was a thriving marshland, but dried up as shifting sand dunes cut off its water supply. Despite it’s remote location, Deadvlei has become a renown tourist attraction, especially for photographers, enticing visitors from around the world to witness it’s unique beauty.\n\nHome to some of highest dunes in the world — some reaching up to 1100 feet — are sculpted into graceful ever-changing shapes. The vibrant hue of the dunes is a result of the iron oxide content in the sand and shift with the sunlight.\n\nDue to extreme arid conditions, the dead camel trees don’t decompose, leaving behind ghostly reminders of a vibrant ecosystem dating back a millennia. Even with the harsh environment, some plant species such as nara melons and salsola have adapted and survive off the morning mist and rare rainfall.",
+ "shortDescription": "An otherworldly landscape of contrasting bleached white claypan ground, blackened camel thorn trees, and fiery red-orange dunes, Deadvlei is located in Namibia’s Namib-Naukluft National Park."
+ },
+ {
+ "name": "Cape Town",
+ "continent": "Africa",
+ "id": 1022,
+ "placeID": "I3B8E2FA9C7D14A22",
+ "longitude": 18.4241,
+ "latitude": -33.9249,
+ "span": 5.0,
+ "description": "Cape Town is a port city on South Africa's southwest coast, set beneath the iconic Table Mountain. One of the most biodiverse cities in the world, it sits within the Cape Floristic Region, a UNESCO World Heritage Site home to thousands of plant species found nowhere else on Earth. The city's dramatic landscape features rugged coastlines, pristine beaches, and lush vineyards nestled in surrounding valleys.\n\nTable Mountain, a flat-topped landmark rising over 3,500 feet above sea level, dominates the city's skyline and is one of the oldest mountains in the world, dating back over 600 million years. The mountain is home to an extraordinary diversity of flora and fauna, including many endemic species. Visitors can reach the summit via a revolving cable car or a network of hiking trails offering panoramic views of the city, harbor, and surrounding ocean.\n\nThe Cape of Good Hope, located at the southern tip of the Cape Peninsula, marks where the warm Agulhas Current from the Indian Ocean meets the cold Benguela Current from the Atlantic. This convergence creates a unique marine environment supporting an abundance of wildlife, including African penguins at Boulders Beach, Cape fur seals, and southern right whales during migration season. Robben Island, visible from the waterfront, served as a political prison during apartheid and is now a museum and UNESCO World Heritage Site.",
+ "shortDescription": "A port city on South Africa's southwest coast, set beneath the iconic Table Mountain, one of the most biodiverse cities in the world."
+ },
+ {
+ "name": "Grand Canyon",
+ "continent": "North America",
+ "id": 1004,
+ "placeID": "I55488B3D1D9B2D4B",
+ "longitude": -113.16096,
+ "latitude": 36.21904,
+ "span": 10.0,
+ "description": "When you look down from the rim of the Grand Canyon, you are looking at a visual story of Earth’s ancient past. Carved over millions of years by the Colorado River, the canyon stretches 277 miles in length, spans widths up to 18 miles, and reaches depths of over a mile (6,093 feet). The vibrant house of the canyon, ranging from deep reds and oranges to subtle shades of purple, it is an iconic natural wonder.\n\nThe geological story that the canyon tells spans nearly two billion years. Vishnu Schist at the bottom of the Inner Gorge is estimated to be 1.7 billion years old. The much younger Kaibab Limestone formation on the rim is the canyon’s top most rock layer, dating back a mere 270 million years. Between these two extremes, wind and water erosion have sculpted stunning cliffs, mesas, and buttes to create an intricate landscape of canyons within canyons. Every year, the seasonal variations in the Colorado River’s flow continue to carve the canyons deeper and deeper.\n\nJust as the geology story shifts with the altitude change, the plant and animal diversity changes dramatically. Flora ranges from desert species such as cacti and junipers to high-elevation forests of spruce fir or ponderosa pine, groundsels, yarrow, and lupine. Bighorn sheep, mule deer, and the elusive mountain lion are just some of the wildlife species that make their home in this ecological treasure.",
+ "shortDescription": "Carved over millions of years by the Colorado River, the canyon stretches 277 miles in length, spans widths up to 18 miles, and reaches depths of over a mile (6,093 feet)."
+ },
+ {
+ "name": "Niagara Falls",
+ "continent": "North America",
+ "id": 1005,
+ "placeID": "I433E22BD30C61C40",
+ "longitude": -79.07401,
+ "latitude": 43.07792,
+ "span": 4.0,
+ "description": "Niagara Falls is comprised of three separate falls, Horseshoe Falls, American Falls, and Bridal Veil Falls. It lies at the border between Canada and the United States. The millions of gallons of water that plunge over its edge originates from Lake Erie in the Great Lakes. The flow of water produces a roaring cascade, fills the air with mist, and creates vibrant rainbows. It is one of the most famous and powerful waterfalls in the world.\n\nThe Falls began to form at the end of the last Ice Age, taking more than 12,000 years to fully develop. The process continues today as the flow of water continues to erode sedimentary layers of rock to shape and reshape the landscape. Preservation work has been done to preserve the Falls, and the volume of water has reduced due to diversion for hydroelectric power, which generates nearly 4.9 million kilowatts of power.\n\nA dynamic ecosystem exists around the Falls. Fish life thrives in the Niagara River, including species such as bass and sturgeon. Gulls, bald eagles, and peregrine falcons are some of the avian wildlife that can be seen flying above the Falls, while lush vegetation grows along the riverbanks.",
+ "shortDescription": "Niagara Falls is comprised of three separate falls, Horseshoe Falls, American Falls, and Bridal Veil Falls. It lies at the border between Canada and the United States. The millions of gallons of water that plunge over its edge originates from Lake Erie in the Great Lakes. The flow of water produces a roaring cascade, fills the air with mist, and creates vibrant rainbows."
+ },
+ {
+ "name": "Joshua Tree",
+ "continent": "North America",
+ "id": 1006,
+ "placeID": "I34674B3D3B032AA2",
+ "longitude": -115.80826,
+ "latitude": 33.88752,
+ "span": 10.0,
+ "description": "Spanning more than 1,200 square miles, Joshua Tree National Park is located in Southern California not far from Palm Springs. The park spans both the Mojave and Colorado deserts and is most known for the rugged rock formations and the spiky, twisted Joshua trees. The two deserts have distinct characteristics. On the western side of the park, the higher and cooler Mojave is a high desert ecosystem while the eastern side’s Colorado is a low desert climate.\n\nAncient volcanic activity, erosion, and tectonic fault movement shaped the park’s dramatic landscape. Surreal formations of massive granite boulders, rock hills (known as inselbergs), hidden canyons, and the unique Joshua trees create an otherworldly beauty.\n\nDespite the harsh desert climates, a variety of resilient wildlife and plant life can be found. Larger mammals such as coyote, desert bighorn sheep, mountain lion often burrow or stay in caves during the hot day time hours, becoming more active at night. Ancient bristlecone pines, creosote bush, and ephemeral spring wildflowers are some of the more than 1,000 species of plant found Joshua Tree.",
+ "shortDescription": "Spanning more than 1,200 square miles, Joshua Tree National Park is located in Southern California, not far from Palm Springs."
+ },
+ {
+ "name": "Rocky Mountains",
+ "continent": "North America",
+ "id": 1007,
+ "placeID": "IBD757C9B53C92D9E",
+ "longitude": -112.99872,
+ "latitude": 47.62596,
+ "span": 16.0,
+ "description": "Stretching 3,000 miles from northwest Canada to southwest United States, the Rocky Mountains are the setting for some of North America’s most stunning scenery. With soaring peaks, jagged summits, pastoral alpine meadows, dense forests, and crystal clear lakes, the Rockies are home to a wide range of flora and fauna. The mountain habitats support a wide range wildlife including wolves, elk, moose, bighorn sheep, grizzly bears, and wolverines. The variety of plants found in the Rocky Mountains is similarly diverse including over 900 species of wildflowers and conifers such as pine, spruce, and fir. Deciduous trees, known for their brilliant colorful autumn leaves contribute to some of the most biologically diverse habitats in the Rocky Mountain National Park. All of these ecological elements and waterways provide an important habitat for North America migratory birds.\n\nThe geological history of the Rocky Mountains dates back approximately 60 to 70 million years when several tectonic plates began shifting under the North American plate. The result was a long, broad belt of mountains running along western North America. The dramatic peaks and valleys we see today were further formed by tectonic activity and erosion by glaciers. The majority of the highest peaks are found in Colorado. Numerous public parks protect much of the mountain range, providing tourists plenty of year-round activities.",
+ "shortDescription": "Stretching 3,000 miles from northwest Canada to southwest United States, the Rocky Mountains are the setting for some of North America’s most stunning scenery."
+ },
+ {
+ "name": "Monument Valley",
+ "continent": "North America",
+ "id": 1008,
+ "placeID": "IAB1F0D2360FAAD29",
+ "longitude": -110.348,
+ "latitude": 36.874,
+ "span": 10.0,
+ "description": "Presenting a spectacular display of towering sandstone buttes, vibrant red rock formations, and expansive open plains, Monument Valley is an iconic landscape of the Colorado Plateau, located near the Arizona-Utah border. The stratified buttes rise dramatically from the valley floor reaching heights up to 1,000 feet. Formed by rivers, wind, and ice, the valley is comprised largely of siltstone and sand deposits. Softer material eroded away, leaving the massive sandstone buttes that remain today.\n\nVegetation in Monument Valley is sparse but beautiful. Contributing to an interesting palette, plants like purple sage complement the red rock formations with splashes of purple flowers and white or gray leaves. Rabbitbrush brings in yellow flowers and green leaves. Mojave yucca plants have fine hairs and a wax coating to trap moisture and reflect sunlight to help it survive.\n\nAnimal life is diverse, with large mammals like the mountain lions, coyotes, and jackrabbits. Reptiles include lizards such as the long-nose leopard lizard as well as iguanas and various snakes. With watchful eyes soaring above all of this are red-tailed hawks, tree sparrows, and more.",
+ "shortDescription": "Presenting a spectacular display of towering sandstone buttes, vibrant red rock formations, and expansive open plains, Monument Valley is an iconic landscape of the Colorado Plateau, located near the Arizona-Utah border."
+ },
+ {
+ "name": "Muir Woods",
+ "continent": "North America",
+ "id": 1009,
+ "placeID": "I907589547EB05261",
+ "longitude": -122.57482,
+ "latitude": 37.8922,
+ "span": 2.0,
+ "description": "Frequently shrouded in coastal marine layer fog from the Pacific Ocean, Muir Woods National Monument is an old-growth redwood forest. Located 12 miles north of San Francisco, covering 558 acres, and containing 6 miles of gorgeous hiking trails, Muir Woods is part of the Golden Gate National Recreation Area.\n\nThe moist environment promotes a rich community of interesting plants, organized into three layers. The lowest layer is the herbaceous layer and is full of shade-loving life. The next layer is the understory, where shrubs and tress such as the California bay and tan oak grow. Providing shelter and platforms for various tree-dwelling species is the topmost layer, or canopy.\n\nWithin the multilayered, dense habitat, it’s easy for wildlife to remain unseen, making the forest sometimes appear empty. Looks, however, are deceiving. Muir Wood hosts over 50 species of birds including spotted owls and pileated woodpeckers. Mammals range in size from the small American shrew mole to the black-tailed mule deer. Most mammals are nocturnal or burrowing animals, contributing to the sense of emptiness in the forest.",
+ "shortDescription": "Located 12 miles north of San Francisco, covering 558 acres, and containing 6 miles of gorgeous hiking trails, Muir Woods is part of the Golden Gate National Recreation Area."
+ },
+ {
+ "name": "Amazon Rainforest",
+ "continent": "South America",
+ "id": 1010,
+ "placeID": "I76A1045FB9294971",
+ "longitude": -62.80802,
+ "latitude": -3.50879,
+ "span": 30.0,
+ "description": "As a member of an elite club of natural landmarks that cover more than one percent of the planet’s surface, the Amazon rainforest covers approximately 2.3 million square miles. The majority of the rainforest is in Brazil, but it spills over into other neighboring countries including Peru, Bolivia, and Columbia. While it’s common to think of a rainforest as being sparsely populated, an estimated 30 million people live in the Amazon.\n\nWith the highest diversity of plant life on Earth, the Amazon may contain as many as 80,000 plant species. An astounding 75 percent of those species are endemic to the area, not being found anywhere else, including 16,000 trees species. Other unique species include giant Amazon water lily, rubber trees, and cacao trees.\n\nHundreds of animal species are also found in the rainforest. Notably, the Amazon is one of Earth’s last refuges for jaguars, harpy eagles, and pink river dolphins. Many other large animals live in the Amazon including cougars, the black caiman, and even the Caquetá titi monkey which purrs like a cat.",
+ "shortDescription": "As a member of an elite club of natural landmarks that cover more than one percent of the planet’s surface, the Amazon rainforest covers approximately 2.3 million square miles."
+ },
+ {
+ "name": "Lençóis Maranhenses",
+ "continent": "South America",
+ "id": 1011,
+ "placeID": "I292A37DAC754D6A0",
+ "longitude": -43.03345,
+ "latitude": -2.57812,
+ "span": 10.0,
+ "description": "Lençóis Maranhenses National Park covers approximately 380,000 acres on the northeastern coast of Brazil, including 43 miles of coastline along the Atlantic Ocean. The interior of the park is composed of rolling sand dunes that reach as high as 130 feet.\n\nDespite looking like a desert environment, the area receives about 47 inches of rain per year. During the rainy seasons, the spaces between the dune peaks fill with freshwater lagoons.\n\nWith desert-like but wet locale, a unique and diverse ecosystem has evolved. Vegetation adapted to coastal and freshwater environments such as Restinga and mangrove are found here. Four endangered species of animals reside in the park: the scarlet ibis, neotropical otter, oncilla, and West Indian manatee. The wolf fish is a unique species that burrows into wet mud during the dry season.",
+ "shortDescription": "Lençóis Maranhenses National Park covers approximately 380,000 acres on the northeastern coast of Brazil, including 43 miles of coastline along the Atlantic Ocean."
+ },
+ {
+ "name": "Uyuni Salt Flat",
+ "continent": "South America",
+ "id": 1012,
+ "placeID": "ID903C9A78EB0CAAD",
+ "longitude": -67.48914,
+ "latitude": -20.13378,
+ "span": 10.0,
+ "description": "At an elevation of nearly 12,000 feet above sea level near the crest of the Andes mountain range in southwestern Bolivia, the Salar de Uyuni is the world’s largest salt flat. Extraordinarily flat, with elevation variation no more than one meter over the nearly 4,000 square mile area, the Salar was formed by several prehistoric lakes evaporating over the last 40,000 years. The resulting salt crust is several meters thick and rich in lithium.\n\nDespite its prehistoric origin, modern technology has found an important use for the Uyuni. Because salt flats are large, stable surfaces, they are ideal for satellite calibration. Uyuni is especially well suited for this task due to the lack of industry, long low rain periods, and very clear dry air. During the rainy season, the flat turns into a shallow lake with a glass-like surface and becomes the world’s largest natural mirror.\n\nThe salt flat has few forms of plant life, which includes the giant cacti, Echinopsis pasacana and Echinopsis tarijensis, which tower up to 40 feet over the Uyuni flats. Other plants found in Uyuni include pitaya (or dragon fruit), quinoa plants, and queñua bushes.",
+ "shortDescription": "At an elevation of nearly 12,000 feet above sea level near the crest of the Andes mountain range in southwestern Bolivia, the Salar de Uyuni is the world’s largest salt flat."
+ },
+ {
+ "name": "White Cliffs of Dover",
+ "continent": "Europe",
+ "id": 1014,
+ "placeID": "I77B160572D5A2EB1",
+ "longitude": 1.36351,
+ "latitude": 51.13641,
+ "span": 4.0,
+ "description": "Standing guard over the narrowest part of the English Channel, the White Cliffs of Dover present a striking façade of chalk streaked with accents of black flint. Over millions of years, skeletons of tiny algae and other sea creatures settled into the white mud under the sea. After these deposits compacted to form chalk, a major mountain building event forced the undersea masses above sea level to form the cliffs.\n\nAbove the cliffs, a chalk grassland supports many species of wildflowers, butterflies, and birds. Orchids, rock samphire, and the unusual oxtongue broomrape are found here. In spring and autumn, the rare Adonis blue butterfly can be seen in the grasslands, as can the similar looking chalk hill blue. Many migratory birds use the cliffs as their first landing point after crossing the English Channel. Peregrine falcons and the skylark are some of the birds that make their homes along the cliffs.",
+ "shortDescription": "Standing guard over the narrowest part of the English Channel, the White Cliffs of Dover present a striking façade of chalk streaked with accents of black flint."
+ },
+ {
+ "name": "Alps",
+ "continent": "Europe",
+ "id": 1015,
+ "placeID": "IE380E71D265F97C0",
+ "longitude": 10.54773,
+ "latitude": 46.77367,
+ "span": 6.0,
+ "description": "Extending nearly 750 miles from Nice, France in the west to Trieste, Italy in the east, the Alps stretch across eight different countries. The mountains formed over tens of millions of years as tectonic plates collided, forcing sedimentary rock to rise into mountain peaks. Mont Blanc is the tallest mountain in Europe, soaring over 15,700 feet. The high altitude and sheer size of the mountains have an effect on the climate in Europe.\n\nDiverse and unique flora has developed in the Alps by adapting to a high-altitude environment. The iconic Edelweiss is an alpine flower that thrives in rocky limestone. Mountain cranberry and bluets are rare and fragile plants found above treelike. Dwarf willow is a resilient plant that does well in places where snow lingers into spring.\n\nLarge mammals like the red deer, ibex, Eurasian lynx, and chamois are all found in low and high altitude regions. Many rodents such as voles and the Alpine marmot live underground and burrow in the Alps. Some reptiles including adders and vipers live near the snow line, but because they cannot tolerate the cold temperatures they hibernate underground and soak up warmth on rocky ledges.",
+ "shortDescription": "Extending nearly 750 miles from Nice, France in the west to Trieste, Italy in the east, the Alps stretch across eight different countries."
+ },
+ {
+ "name": "Mount Fuji",
+ "continent": "Asia",
+ "id": 1016,
+ "placeID": "I2CC1DF519EDD7ACD",
+ "longitude": 138.72744,
+ "latitude": 35.36072,
+ "span": 10.0,
+ "description": "When seen at a distance, Mount Fuji presents a beautiful, nearly symmetric, often snow-capped profile and is Japan’s tallest and most iconic mountain. The volcanic cone rises gracefully up to slightly more than 12,000 feet. On clear days, the mountain is visible as far away as Tokyo. Despite its seemingly peaceful distant existence, Mount Fuji is an active volcano. Its last eruption was in 1707.\n\nSimilar to other exceptionally tall mountains, Fuji-san is home to many ecological zones from its base to its summit. In the lower elevations, deciduous and coniferous trees such as the Japanese oak and cedars are common. As you climb in elevation, the climate becomes harsher and plant life transitions to alpine plants and shrubs that have adapted to colder temperatures. At the highest altitudes, a volcanic desert environment exists.\n\nMany mammals and birds are found in the forests on Mount Fuji. Black bears live there, although squirrels and fox are more likely to be seen. The Japanese serow is a rare and protected species of goat-antelope that roams secretively through dense forests. High altitude birds such as the Iwahibari and Hoshigarasu are found above 8,200 feet, while several species of warblers, flycatchers, and Ural and scops owls live in lower altitudes.",
+ "shortDescription": "When seen at a distance, Mount Fuji presents a beautiful, nearly symmetric, often snow-capped profile and is Japan’s tallest and most iconic mountain."
+ },
+ {
+ "name": "Wulingyuan",
+ "continent": "Asia",
+ "id": 1017,
+ "placeID": "I818C4BA5FE11BDD6",
+ "longitude": 110.45242,
+ "latitude": 29.35106,
+ "span": 10.0,
+ "description": "Featuring more than 3,000 sandstone pillars and peaks, Wulingyuan is a scenic and historic site in China’s Hunan Province. Often shrouded in mist, the surreal landscape of pillars surrounded by forests spans over 100 square miles. Among the picturesque lakes, rivers, and waterfalls, the site also contains 40 caves and one of the world’s highest natural bridges, named Tianqiashengkong.\n\nWith plentiful rainfall and dense forests, Wulingyuan has created a good environment for varied animal and plant life. Unique species like the clouded leopard, Chinese giant salamander, Asiatic wild dog, and Asiatic black bear live among the forests. Other animals include various monkeys — including rhesus monkeys — as well as deer, birds, and reptiles. Notable plant species include the dove tree and ginkgo.",
+ "shortDescription": "Featuring more than 3,000 sandstone pillars and peaks, Wulingyuan is a scenic and historic site in China’s Hunan Province."
+ },
+ {
+ "name": "Mount Everest",
+ "continent": "Asia",
+ "id": 1018,
+ "placeID": "IE16B9C217B9B0DC1",
+ "longitude": 86.9251,
+ "latitude": 27.98816,
+ "span": 10.0,
+ "description": "In addition to perhaps being the world’s most well-known mountain, Mount Everest is the world’s tallest above sea level. With an altitude just over 29,031 feet, the mountain attracts climbers and experienced mountaineers from all over the world. Everest’s icy peaks pierce the sky, surrounded by swirling clouds and intensely strong winds.\n\nGeologically, Mount Everest is part of the Himalayan mountain range which is formed by the Eurasian and Indian tectonic plates. Movement of these plates began around 50 million years ago and continues to push Everest even higher. Layers of metamorphic and sedimentary rock are topped by marine limestone that was once at the bottom of the ocean remind us of the Earth’s dynamic history.\n\nDespite the extreme conditions found at the high altitudes on Everest, the mountain is home to a unique high-altitude ecosystem. Mosses and lichens can survive the extreme climate along with high altitude plants such as the Himalayan juniper, dwarf rhododendrons, and the snow lotus. Animals found in the lower elevations include the Himalayan tahr, snow leopard, Himalayan black bear, and the red panda.",
+ "shortDescription": "With an altitude just over 29,031 feet, the mountain attracts climbers and experienced mountaineers from all over the world."
+ },
+ {
+ "name": "Great Barrier Reef",
+ "continent": "Australia/Oceana",
+ "id": 1019,
+ "placeID": "IF436B51611F3F9D1",
+ "longitude": 145.97842,
+ "latitude": -16.7599,
+ "span": 16.0,
+ "description": "Comprised of over 2,900 individual reefs, 900 islands, and spanning a monumental 133,000 square miles, the Great Barrier Reef is the world’s largest coral reef system. Situated in the Coral Sea just off the coast of Queensland, Australia, the Great Barrier Reef is the world’s largest single structure made by living organisms. It’s large enough to be seen from space.\n\nThe reef system supports a dizzying range of diverse life, including many species that are vulnerable or endangered, and some are endemic to the area. Dozens of cetaceans including dwarf minke whale, Indo-Pacific humpback dolphin, and the humpback whale live here. Clownfish, snapper, and coral trout are just some of the 1,500 fish species found in the waters surrounding the reef.\n\nSometimes overshadowed by the magnificent aquatic animal life, the Great Barrier Reef is home to over 2,000 species of native plants. Seagrass meadows are one of the most fundamental parts of the flora found in the reef system. Eelgrass or Turtle grass meadows thrive in the shallow coastal waters and help to maintain the biodiversity, stability, and productivity of the reef.",
+ "shortDescription": "Comprised of over 2,900 individual reefs, 900 islands, and spanning a monumental 133,000 square miles, the Great Barrier Reef is the world’s largest coral reef system."
+ },
+ {
+ "name": "Maui",
+ "continent": "Australia/Oceana",
+ "id": 1020,
+ "placeID": "I8F3C2D4A1E5B6789",
+ "longitude": -156.3317,
+ "latitude": 20.79838,
+ "span": 8.0,
+ "description": "The second-largest island in Hawaii, Maui offers a stunning tapestry of volcanic landscapes, lush rainforests, pristine beaches, and dramatic coastal cliffs. Known as the \"Valley Isle,\" Maui is dominated by two massive volcanoes: the dormant Haleakalā in the east and the older, eroded West Maui Mountains. Haleakalā National Park features a massive volcanic crater that reaches over 10,000 feet in elevation, offering breathtaking sunrise views and unique high-altitude ecosystems.\n\nThe island's diverse geography creates distinct climate zones, from arid leeward coasts to verdant windward rainforests receiving over 400 inches of annual rainfall. The famous Road to Hana winds through tropical paradise, passing countless waterfalls, bamboo forests, and dramatic ocean vistas. Maui's volcanic soil supports rich agriculture, including sugarcane, pineapple, coffee, and exotic tropical fruits.\n\nMarine life thrives in Maui's warm Pacific waters. Humpback whales migrate to the shallow channels between the Hawaiian islands from December to May, making Maui one of the world's premier whale-watching destinations. Hawaiian green sea turtles, spinner dolphins, and vibrant coral reefs attract snorkelers and divers year-round. The island's beaches range from golden sand to unique red and black volcanic shores. Native Hawaiian plants such as the silversword, which grows only on Haleakalā's slopes, and endemic bird species like the nēnē (Hawaiian goose) highlight the island's ecological significance and ongoing conservation efforts.",
+ "shortDescription": "The second-largest island in Hawaii, Maui offers a stunning tapestry of volcanic landscapes, lush rainforests, pristine beaches, and dramatic coastal cliffs."
+ },
+ {
+ "name": "South Shetland Islands",
+ "continent": "Antarctica",
+ "id": 1021,
+ "placeID": "I1AAF5FE1DF954A59",
+ "longitude": -58.70703,
+ "latitude": -61.79436,
+ "span": 20.0,
+ "description": "The South Shetland Islands consist of 11 major islands and several minor ones, making up more than 1,400 square miles of land area. The Antarctic island chain is located in the Drake Passage. Almost all of the land area is permanently covered by glaciers. Active geothermal vents and hot springs provide balance the two contrasting extremes of fire and ice.\n\nVarious plants have adapted to the harsh conditions, including two flowering plants — the Antarctic hair grass and Antarctic pearlwort. Other examples of adapted plants include mosses, liverworts, lichens, and fungi. Notable penguin species include Adélie, Chinstrap, and Gentoo. Crabeater, Leopard, Weddell, and fur seals are some of the island’s other inhabitants.",
+ "shortDescription": "The South Shetland Islands consist of 11 major islands and several minor ones, making up more than 1,400 square miles of land area."
+ },
+ {
+ "name": "Bunaken Marine Park",
+ "placeID": "ChIJP0dJ7GKZQDIR9EqKMHxe3Ws",
+ "span": 5.0,
+ "id": 1023,
+ "longitude": 124.75,
+ "latitude": 1.6167,
+ "description": "Bunaken Marine Park, located off the coast of Manado in North Sulawesi, Indonesia, is one of the world's premier marine biodiversity hotspots. Established in 1991, the park covers an area of approximately 890 square kilometers and encompasses five islands: Bunaken, Manado Tua, Siladen, Mantehage, and Nain. The park's crystal-clear waters and dramatic underwater walls make it a paradise for divers and snorkelers from around the globe.\n\nThe marine park is home to an extraordinary diversity of coral reef ecosystems, with over 390 species of coral documented within its boundaries. These vibrant reefs support more than 3,000 species of fish, including spectacular displays of clownfish, butterflyfish, Napoleon wrasse, and sea turtles. The underwater topography features steep coral walls that plunge to depths of over 1,000 meters, creating dramatic drop-offs that are among the most breathtaking dive sites in Southeast Asia.\n\nManado itself serves as the gateway to this underwater wonderland, offering a blend of Indonesian culture, spicy Minahasan cuisine, and warm hospitality. The city's proximity to the park means visitors can enjoy world-class diving just a short boat ride from the mainland. Conservation efforts have been central to the park's management, with local communities actively participating in protecting the delicate marine ecosystems that make Bunaken one of the most biodiverse marine environments on Earth.",
+ "continent": "Asia",
+ "shortDescription": "One of the world's premier marine biodiversity hotspots off the coast of Manado, Indonesia, featuring spectacular coral walls and over 3,000 species of fish."
+ }
+]
\ No newline at end of file
diff --git a/samples/EssentialsAISample/Resources/Raw/pointsOfInterestData.json b/samples/EssentialsAISample/Resources/Raw/pointsOfInterestData.json
new file mode 100644
index 000000000..c75a6aad3
--- /dev/null
+++ b/samples/EssentialsAISample/Resources/Raw/pointsOfInterestData.json
@@ -0,0 +1,122 @@
+[
+ {
+ "name": "Cafe 1",
+ "category": "Cafe",
+ "description": "A nice cafe."
+ },
+ {
+ "name": "Cafe 2",
+ "category": "Cafe",
+ "description": "Another nice cafe."
+ },
+ {
+ "name": "Cafe 3",
+ "category": "Cafe",
+ "description": "Yet another nice cafe."
+ },
+ {
+ "name": "Campground 1",
+ "category": "Campground",
+ "description": "A nice campground."
+ },
+ {
+ "name": "Campground 2",
+ "category": "Campground",
+ "description": "Another nice campground."
+ },
+ {
+ "name": "Campground 3",
+ "category": "Campground",
+ "description": "Yet another nice campground."
+ },
+ {
+ "name": "Hotel 1",
+ "category": "Hotel",
+ "description": "A nice hotel."
+ },
+ {
+ "name": "Hotel 2",
+ "category": "Hotel",
+ "description": "Another nice hotel."
+ },
+ {
+ "name": "Hotel 3",
+ "category": "Hotel",
+ "description": "Yet another nice hotel."
+ },
+ {
+ "name": "Marina 1",
+ "category": "Marina",
+ "description": "A nice marina."
+ },
+ {
+ "name": "Marina 2",
+ "category": "Marina",
+ "description": "Another nice marina."
+ },
+ {
+ "name": "Marina 3",
+ "category": "Marina",
+ "description": "Yet another nice marina."
+ },
+ {
+ "name": "Museum 1",
+ "category": "Museum",
+ "description": "A nice museum."
+ },
+ {
+ "name": "Museum 2",
+ "category": "Museum",
+ "description": "Another nice museum."
+ },
+ {
+ "name": "Museum 3",
+ "category": "Museum",
+ "description": "Yet another nice museum."
+ },
+ {
+ "name": "The National Rock 1",
+ "category": "NationalMonument",
+ "description": "A nice national monument."
+ },
+ {
+ "name": "The National Rock 2",
+ "category": "NationalMonument",
+ "description": "Another nice national monument."
+ },
+ {
+ "name": "The National Rock 3",
+ "category": "NationalMonument",
+ "description": "Yet another nice national monument."
+ },
+ {
+ "name": "Restaurant 1",
+ "category": "Restaurant",
+ "description": "A nice restaurant."
+ },
+ {
+ "name": "Restaurant 2",
+ "category": "Restaurant",
+ "description": "Another nice restaurant."
+ },
+ {
+ "name": "Restaurant 3",
+ "category": "Restaurant",
+ "description": "Yet another nice restaurant."
+ },
+ {
+ "name": "Fujisan Hongu Sengen Taisha",
+ "category": "Museum",
+ "description": "Refers to the Shinto shrine located at the base."
+ },
+ {
+ "name": "Highland Resort Hotel & Spa",
+ "category": "Hotel",
+ "description": "Hotel with views of Mount Fuji."
+ },
+ {
+ "name": "Hoto Fudo",
+ "category": "Restaurant",
+ "description": "Famous noodle restaurant near Fuji."
+ }
+]
\ No newline at end of file
diff --git a/samples/EssentialsAISample/Resources/Splash/splash.svg b/samples/EssentialsAISample/Resources/Splash/splash.svg
new file mode 100644
index 000000000..21dfb25f1
--- /dev/null
+++ b/samples/EssentialsAISample/Resources/Splash/splash.svg
@@ -0,0 +1,8 @@
+
+
+
\ No newline at end of file
diff --git a/samples/EssentialsAISample/Resources/Styles/Colors.xaml b/samples/EssentialsAISample/Resources/Styles/Colors.xaml
new file mode 100644
index 000000000..02028916f
--- /dev/null
+++ b/samples/EssentialsAISample/Resources/Styles/Colors.xaml
@@ -0,0 +1,50 @@
+
+
+
+
+
+ #512BD4
+ #ac99ea
+ #242424
+ #DFD8F7
+ #9880e5
+ #2B0B98
+
+ White
+ Black
+ #D600AA
+ #190649
+ #1f1f1f
+
+ #E1E1E1
+ #C8C8C8
+ #ACACAC
+ #919191
+ #6E6E6E
+ #404040
+ #363636
+ #2D2D2D
+ #212121
+ #141414
+
+ #FFF3CD
+ #856404
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/samples/EssentialsAISample/Resources/Styles/Styles.xaml b/samples/EssentialsAISample/Resources/Styles/Styles.xaml
new file mode 100644
index 000000000..8e4e65d66
--- /dev/null
+++ b/samples/EssentialsAISample/Resources/Styles/Styles.xaml
@@ -0,0 +1,431 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/samples/EssentialsAISample/Services/BufferedChatClient.cs b/samples/EssentialsAISample/Services/BufferedChatClient.cs
new file mode 100644
index 000000000..2931e612e
--- /dev/null
+++ b/samples/EssentialsAISample/Services/BufferedChatClient.cs
@@ -0,0 +1,130 @@
+using System.Runtime.CompilerServices;
+using System.Text;
+using Microsoft.Extensions.AI;
+
+namespace EssentialsAISample.Services;
+
+///
+/// A delegating chat client that buffers streaming text content to reduce the frequency of UI updates.
+///
+///
+///
+/// This client wraps an existing and throttles streaming responses by
+/// accumulating text content until a minimum buffer size and time delay have been met. This helps
+/// maintain smooth UI rendering and scrolling when displaying streaming AI responses.
+///
+///
+/// Non-text content such as function calls are passed through immediately without buffering, and
+/// any buffered text is flushed before such content is yielded.
+///
+///
+public class BufferedChatClient(IChatClient innerClient, int minBufferSize = 100, TimeSpan? bufferDelay = null)
+ : DelegatingChatClient(innerClient)
+{
+ private readonly int _minBufferSize = minBufferSize;
+ private readonly TimeSpan _bufferDelay = bufferDelay ?? TimeSpan.FromMilliseconds(250);
+
+ ///
+ /// Gets streaming chat response updates with buffering applied to text content.
+ ///
+ /// The chat messages to send to the model.
+ /// Optional chat options to configure the request.
+ /// A cancellation token to cancel the operation.
+ ///
+ /// An asynchronous enumerable of instances where text content
+ /// is buffered and yielded only when both the minimum buffer size and time delay conditions are met.
+ /// Non-text content is passed through immediately.
+ ///
+ ///
+ ///
+ /// The buffering behavior follows these rules:
+ ///
+ ///
+ /// - Text content is accumulated until at least the configured minimum buffer size
+ /// has been buffered AND the configured buffer delay has elapsed.
+ /// - When non-text content (such as function calls) is encountered, any buffered text is
+ /// flushed immediately, then the non-text content is yielded.
+ /// - At the end of the stream, any remaining buffered text is flushed.
+ ///
+ ///
+ public override async IAsyncEnumerable GetStreamingResponseAsync(
+ IEnumerable messages,
+ ChatOptions? options = null,
+ [EnumeratorCancellation] CancellationToken cancellationToken = default)
+ {
+ var textBuffer = new StringBuilder();
+ var lastYieldTicks = Environment.TickCount64;
+ ChatResponseUpdate? lastUpdate = null;
+
+ await foreach (var update in InnerClient.GetStreamingResponseAsync(messages, options, cancellationToken))
+ {
+ var currentYieldTicks = Environment.TickCount64;
+ var hasNonTextContent = false;
+
+ // Check if this update has non-text content (function calls, etc.)
+ foreach (var item in update.Contents)
+ {
+ if (item is not TextContent)
+ {
+ hasNonTextContent = true;
+ break;
+ }
+ }
+
+ // If we have non-text content, flush buffer and yield immediately
+ if (hasNonTextContent)
+ {
+ if (textBuffer.Length > 0 && lastUpdate is not null)
+ {
+ yield return CreateBufferedUpdate(lastUpdate, textBuffer.ToString());
+ textBuffer.Clear();
+ lastYieldTicks = currentYieldTicks;
+ }
+
+ yield return update;
+ lastUpdate = null;
+ continue;
+ }
+
+ // Buffer text content
+ foreach (var item in update.Contents)
+ {
+ if (item is TextContent textContent)
+ {
+ textBuffer.Append(textContent.Text);
+ }
+ }
+
+ lastUpdate = update;
+
+ var shouldFlush =
+ textBuffer.Length >= _minBufferSize &&
+ TimeSpan.FromMilliseconds(currentYieldTicks - lastYieldTicks) >= _bufferDelay;
+
+ if (shouldFlush)
+ {
+ yield return CreateBufferedUpdate(update, textBuffer.ToString());
+ textBuffer.Clear();
+ lastYieldTicks = currentYieldTicks;
+ lastUpdate = null;
+ }
+ }
+
+ // Flush any remaining buffered text
+ if (textBuffer.Length > 0 && lastUpdate is not null)
+ {
+ yield return CreateBufferedUpdate(lastUpdate, textBuffer.ToString());
+ }
+ }
+
+ private static ChatResponseUpdate CreateBufferedUpdate(ChatResponseUpdate original, string newText) =>
+ new()
+ {
+ CreatedAt = original.CreatedAt,
+ FinishReason = original.FinishReason,
+ Role = original.Role,
+ Contents = [new TextContent(newText)],
+ RawRepresentation = original.RawRepresentation,
+ AdditionalProperties = original.AdditionalProperties
+ };
+}
diff --git a/samples/EssentialsAISample/Services/ChatService.cs b/samples/EssentialsAISample/Services/ChatService.cs
new file mode 100644
index 000000000..57792ea0a
--- /dev/null
+++ b/samples/EssentialsAISample/Services/ChatService.cs
@@ -0,0 +1,210 @@
+using System.ComponentModel;
+using System.Text;
+using System.Text.Json;
+using EssentialsAISample.Models;
+using Microsoft.Extensions.AI;
+
+namespace EssentialsAISample.Services;
+
+public class ChatService
+{
+ static string SystemPrompt => $"""
+ You are a helpful travel assistant for the .NET MAUI Trip Planner app. You have access to 21 world landmarks across 7 continents and can help users:
+ - Search and discover destinations
+ - Find nearby hotels, restaurants, cafes, and museums
+ - Check weather forecasts
+ - Generate social media hashtags for trips
+ - Start planning a trip by navigating to the trip planner
+
+ Today's date is {DateTime.Now:yyyy-MM-dd} ({DateTime.Now:dddd}).
+
+ When users ask about destinations, search first to provide relevant results. When they want to plan a trip, use plan_trip to navigate them to the planning page.
+ For weather requests with relative dates like "tomorrow" or "next week", calculate the actual date from today before calling get_weather.
+ Be concise and helpful. Use the tools available to provide accurate information.
+ """;
+
+ readonly IChatClient _toolClient;
+ readonly DataService _dataService;
+ readonly WeatherService _weatherService;
+ readonly TaggingService _taggingService;
+ readonly IDispatcher _dispatcher;
+ readonly IList _tools;
+
+ public event Action? NavigateToTripRequested;
+
+ public ChatService(
+ IChatClient chatClient,
+ DataService dataService,
+ WeatherService weatherService,
+ TaggingService taggingService,
+ IDispatcher dispatcher)
+ {
+ _dataService = dataService;
+ _weatherService = weatherService;
+ _taggingService = taggingService;
+ _dispatcher = dispatcher;
+
+ _tools =
+ [
+ AIFunctionFactory.Create(SearchLandmarksAsync),
+ AIFunctionFactory.Create(ListLandmarksByContinentAsync),
+ AIFunctionFactory.Create(GetLandmarkDetailsAsync),
+ AIFunctionFactory.Create(SearchPointsOfInterestAsync),
+ AIFunctionFactory.Create(GetWeatherAsync),
+ AIFunctionFactory.Create(GenerateTagsAsync),
+ AIFunctionFactory.Create(PlanTripAsync),
+ ];
+
+ _toolClient = chatClient;
+ }
+
+ public IAsyncEnumerable GetStreamingResponseAsync(
+ IList messages, CancellationToken cancellationToken = default)
+ {
+ // Prepend system prompt without mutating the caller's list
+ IEnumerable effectiveMessages = (messages.Count == 0 || messages[0].Role != ChatRole.System)
+ ? messages.Prepend(new ChatMessage(ChatRole.System, SystemPrompt))
+ : messages;
+
+ var options = new ChatOptions { Tools = _tools };
+
+ return _toolClient.GetStreamingResponseAsync(effectiveMessages, options, cancellationToken);
+ }
+
+ [Description("Search for travel destinations by a natural language query. Uses semantic search to find the most relevant landmarks.")]
+ async Task SearchLandmarksAsync(
+ [Description("A natural language search query, e.g. 'beaches in Asia' or 'ancient ruins'")] string query,
+ [Description("Maximum number of results to return (1-10)")] int maxResults = 5)
+ {
+ var results = await _dataService.SearchLandmarksAsync(query, Math.Clamp(maxResults, 1, 10));
+
+ if (results.Count == 0)
+ return "No landmarks found matching your query.";
+
+ var sb = new StringBuilder();
+ foreach (var landmark in results)
+ {
+ sb.AppendLine($"• **{landmark.Name}** ({landmark.Continent})");
+ sb.AppendLine($" {landmark.ShortDescription}");
+ }
+ return sb.ToString();
+ }
+
+ [Description("List all available landmarks in a specific continent.")]
+ async Task ListLandmarksByContinentAsync(
+ [Description("The continent name, e.g. 'Europe', 'Asia', 'South America', 'Africa', 'North America', 'Australia/Oceania', 'Antarctica'")] string continent)
+ {
+ var groups = await _dataService.GetLandmarksByContinentAsync();
+
+ var match = groups.Keys.FirstOrDefault(k =>
+ k.Contains(continent, StringComparison.OrdinalIgnoreCase));
+
+ if (match is null || !groups.TryGetValue(match, out var landmarks))
+ return $"No landmarks found for continent '{continent}'. Available: {string.Join(", ", groups.Keys)}";
+
+ var sb = new StringBuilder();
+ sb.AppendLine($"Landmarks in {match}:");
+ foreach (var landmark in landmarks)
+ {
+ sb.AppendLine($"• **{landmark.Name}** — {landmark.ShortDescription}");
+ }
+ return sb.ToString();
+ }
+
+ [Description("Get detailed information about a specific landmark including its full description and location coordinates.")]
+ async Task GetLandmarkDetailsAsync(
+ [Description("The name of the landmark to look up")] string landmarkName)
+ {
+ var landmark = await FindLandmarkByNameAsync(landmarkName);
+
+ if (landmark is null)
+ return $"Landmark '{landmarkName}' not found. Try searching with search_landmarks first.";
+
+ return $"""
+ **{landmark.Name}**
+ Continent: {landmark.Continent}
+ Coordinates: {landmark.Latitude:F4}, {landmark.Longitude:F4}
+
+ {landmark.Description}
+ """;
+ }
+
+ [Description("Find points of interest near a destination. Categories: Hotel, Restaurant, Cafe, Museum, Campground, Marina, NationalMonument.")]
+ async Task SearchPointsOfInterestAsync(
+ [Description("The category of place to find")] PointOfInterestCategory category,
+ [Description("A natural language query to refine the search, e.g. 'family friendly' or 'luxury'")] string query)
+ {
+ var results = await _dataService.SearchPointsOfInterestAsync(category, query, 5);
+
+ if (results.Count == 0)
+ return $"No {category} found matching your query.";
+
+ var sb = new StringBuilder();
+ sb.AppendLine($"Found {results.Count} {category} options:");
+ foreach (var poi in results)
+ {
+ sb.AppendLine($"• **{poi.Name}** — {poi.Description}");
+ }
+ return sb.ToString();
+ }
+
+ [Description("Get the weather forecast for a landmark. Supports today and up to 7 days ahead.")]
+ async Task GetWeatherAsync(
+ [Description("The name of the landmark to check weather for")] string landmarkName,
+ [Description("The date to check weather for. Use today's date from the system prompt to calculate dates for 'tomorrow', 'next week', etc.")] DateTimeOffset date)
+ {
+ var landmark = await FindLandmarkByNameAsync(landmarkName);
+
+ if (landmark is null)
+ return $"Landmark '{landmarkName}' not found in the app database. Available landmarks can be found with search_landmarks or list_landmarks_by_continent.";
+
+ var dateOnly = DateOnly.FromDateTime(date.DateTime);
+ var today = DateOnly.FromDateTime(DateTime.Now);
+
+ if (dateOnly < today)
+ return $"Cannot get weather for past date {dateOnly:yyyy-MM-dd}. The forecast supports today ({today:yyyy-MM-dd}) through {today.AddDays(7):yyyy-MM-dd}.";
+
+ if (dateOnly > today.AddDays(7))
+ return $"Cannot get weather for {dateOnly:yyyy-MM-dd} — too far ahead. The forecast supports today ({today:yyyy-MM-dd}) through {today.AddDays(7):yyyy-MM-dd}.";
+
+ var (_, weatherText) = await _weatherService.GetWeatherForecastAsync(
+ landmark.Latitude, landmark.Longitude, dateOnly);
+
+ return $"Weather at {landmark.Name} on {dateOnly:yyyy-MM-dd} ({dateOnly:dddd}): {weatherText}";
+ }
+
+ [Description("Generate social media hashtags for a trip description or destination.")]
+ async Task GenerateTagsAsync(
+ [Description("The text to generate hashtags for, e.g. a trip description or destination name")] string text)
+ {
+ try
+ {
+ var tags = await _taggingService.GenerateTagsAsync(text);
+ return $"Suggested hashtags: {string.Join(" ", tags.Select(t => $"#{t}"))}";
+ }
+ catch
+ {
+ return "Unable to generate tags at this time.";
+ }
+ }
+
+ [Description("Navigate the user to the trip planning page to generate a detailed multi-day itinerary for a landmark. Use this when the user wants to plan or start a trip.")]
+ async Task PlanTripAsync(
+ [Description("The name of the landmark to plan a trip to")] string landmarkName)
+ {
+ var landmark = await FindLandmarkByNameAsync(landmarkName);
+
+ if (landmark is null)
+ return $"Landmark '{landmarkName}' not found. Try searching with search_landmarks first.";
+
+ _dispatcher.Dispatch(() => NavigateToTripRequested?.Invoke(landmark));
+ return $"Navigating to trip planner for {landmark.Name}! A multi-day itinerary will be generated for you.";
+ }
+
+ async Task FindLandmarkByNameAsync(string name)
+ {
+ var landmarks = await _dataService.GetLandmarksAsync();
+ return landmarks.FirstOrDefault(l =>
+ l.Name.Contains(name, StringComparison.OrdinalIgnoreCase));
+ }
+}
diff --git a/samples/EssentialsAISample/Services/DataService.cs b/samples/EssentialsAISample/Services/DataService.cs
new file mode 100644
index 000000000..3a8f8572b
--- /dev/null
+++ b/samples/EssentialsAISample/Services/DataService.cs
@@ -0,0 +1,186 @@
+using System.Text.Json;
+using System.Text.Json.Serialization;
+using EssentialsAISample.Models;
+using Microsoft.Extensions.Logging;
+
+namespace EssentialsAISample.Services;
+
+public partial class DataService
+{
+ private static readonly JsonSerializerOptions _jsonSerializerOptions = new()
+ {
+ PropertyNameCaseInsensitive = true,
+ PropertyNamingPolicy = JsonNamingPolicy.CamelCase,
+ Converters = { new JsonStringEnumConverter() },
+ };
+
+ private readonly ISemanticSearchService _searchService;
+ private readonly ILogger _logger;
+ private readonly Task _readyTask;
+ private readonly TaskCompletionSource _dataLoaded = new();
+
+ private List? _landmarks;
+ private List? _pointsOfInterest;
+
+ private Dictionary>? _landmarksByContinent;
+ private Dictionary? _landmarksById;
+ private Dictionary? _poisByName;
+ private Landmark? _featuredLandmark;
+
+ ///
+ /// Raised on each item indexed. Args: (current, total).
+ ///
+ public event Action? EmbeddingProgressChanged;
+
+ public DataService(ILogger logger, ISemanticSearchService searchService)
+ {
+ _searchService = searchService;
+ _logger = logger;
+ _readyTask = Task.Run(InitializeAsync);
+
+ async Task InitializeAsync()
+ {
+ await LoadLandmarksAsync();
+ _dataLoaded.TrySetResult();
+ await IndexContentAsync();
+ }
+ }
+
+ ///
+ /// Gets all loaded landmarks.
+ ///
+ public IReadOnlyList Landmarks => _landmarks ?? [];
+
+ ///
+ /// Gets the names of all available destinations.
+ ///
+ public IEnumerable GetDestinationNames() => _landmarks?.Select(l => l.Name) ?? [];
+
+ public async Task> GetLandmarksAsync()
+ {
+ await _dataLoaded.Task;
+ return _landmarks ?? [];
+ }
+
+ public async Task>> GetLandmarksByContinentAsync()
+ {
+ await _dataLoaded.Task;
+ return _landmarksByContinent ?? [];
+ }
+
+ public async Task GetFeaturedLandmarkAsync()
+ {
+ await _dataLoaded.Task;
+ return _featuredLandmark;
+ }
+
+ ///
+ /// Waits for both data loading and content indexing to complete.
+ /// Subscribe to before calling to receive progress updates.
+ ///
+ public async Task WaitUntilReadyAsync()
+ {
+ await _readyTask;
+ }
+
+ public async Task> SearchLandmarksAsync(string query, int maxResults = 5)
+ {
+ await _readyTask;
+
+ var results = await _searchService.SearchAsync("landmarks", query, maxResults);
+
+ return results
+ .Select(r => int.TryParse(r.Id, out var id) ? _landmarksById?.GetValueOrDefault(id) : null)
+ .Where(l => l is not null)
+ .Cast()
+ .ToList();
+ }
+
+ public async Task> SearchPointsOfInterestAsync(PointOfInterestCategory category, string query, int maxResults = 3)
+ {
+ await _readyTask;
+
+ var searchQuery = category == PointOfInterestCategory.None ? query : $"{category}: {query}";
+ var results = await _searchService.SearchAsync("pois", searchQuery, maxResults * 2);
+
+ return results
+ .Select(r => _poisByName?.GetValueOrDefault(r.Id))
+ .Where(p => p is not null && (category == PointOfInterestCategory.None || p.Category == category))
+ .Cast()
+ .Take(maxResults)
+ .ToList();
+ }
+
+ private async Task LoadLandmarksAsync()
+ {
+ try
+ {
+ _landmarks = await LoadDataAsync("landmarkData.json");
+
+ _landmarksByContinent = _landmarks
+ .GroupBy(l => l.Continent)
+ .ToDictionary(g => g.Key, g => g.ToList());
+
+ _landmarksById = _landmarks.ToDictionary(l => l.Id);
+
+ _featuredLandmark = _landmarksById.GetValueOrDefault(1020);
+
+ _pointsOfInterest = await LoadDataAsync("pointsOfInterestData.json");
+ _poisByName = _pointsOfInterest.ToDictionary(p => p.Name);
+
+ _logger.LogInformation("Successfully loaded {LandmarkCount} landmarks and {POICount} points of interest.", _landmarks.Count, _pointsOfInterest.Count);
+ }
+ catch (Exception ex)
+ {
+ _logger.LogError(ex, "Error loading landmarks: {Error}", ex.Message);
+
+ _landmarks = [];
+ _pointsOfInterest = [];
+ _landmarksByContinent = new Dictionary>();
+ _landmarksById = new Dictionary();
+ }
+ }
+
+ private async Task IndexContentAsync()
+ {
+ try
+ {
+ if (_landmarks is not { } landmarks || _pointsOfInterest is not { } pois)
+ return;
+
+ var totalItems = landmarks.Count + pois.Count;
+ var completed = 0;
+
+ foreach (var landmark in landmarks)
+ {
+ var text = $"{landmark.Name}. {landmark.ShortDescription}. {landmark.Description}";
+ await _searchService.IndexAsync("landmarks", landmark.Id.ToString(), text);
+ EmbeddingProgressChanged?.Invoke(++completed, totalItems);
+ }
+
+ foreach (var poi in pois)
+ {
+ var text = $"{poi.Name}. {poi.Description}";
+ await _searchService.IndexAsync("pois", poi.Name, text);
+ EmbeddingProgressChanged?.Invoke(++completed, totalItems);
+ }
+
+ await _searchService.WaitUntilReadyAsync();
+
+ _logger.LogInformation("Successfully indexed {LandmarkCount} landmarks and {POICount} points of interest.",
+ landmarks.Count, pois.Count);
+ }
+ catch (Exception ex)
+ {
+ _logger.LogError(ex, "Error indexing content: {Error}", ex.Message);
+ }
+ }
+
+ private static async Task> LoadDataAsync(string filename)
+ {
+ using var stream = await FileSystem.OpenAppPackageFileAsync(filename);
+ using var reader = new StreamReader(stream);
+ var json = await reader.ReadToEndAsync();
+ return JsonSerializer.Deserialize>(json, _jsonSerializerOptions) ?? [];
+ }
+}
diff --git a/samples/EssentialsAISample/Services/EmbeddingSearchService.cs b/samples/EssentialsAISample/Services/EmbeddingSearchService.cs
new file mode 100644
index 000000000..f41f5de08
--- /dev/null
+++ b/samples/EssentialsAISample/Services/EmbeddingSearchService.cs
@@ -0,0 +1,80 @@
+using System.Collections.Concurrent;
+using System.Numerics.Tensors;
+using System.Text.RegularExpressions;
+using Microsoft.Extensions.AI;
+
+namespace EssentialsAISample.Services;
+
+///
+/// Semantic search using an with
+/// a simple in-memory store, cosine similarity, and hybrid keyword boost.
+/// Splits text into sentence-level chunks for multi-granularity matching.
+///
+public sealed partial class EmbeddingSearchService(IEmbeddingGenerator> generator) : ISemanticSearchService
+{
+ readonly ConcurrentDictionary> _collections = new();
+
+ record IndexedItem(string Text, ReadOnlyMemory[] Vectors);
+
+ public async Task IndexAsync(string collection, string id, string text, CancellationToken cancellationToken = default)
+ {
+ var lowerText = text.ToLowerInvariant();
+ var chunks = new List { lowerText };
+ chunks.AddRange(SplitSentences(lowerText));
+
+ var embeddings = await generator.GenerateAsync(chunks, cancellationToken: cancellationToken);
+ var vectors = embeddings.Select(e => e.Vector).ToArray();
+
+ var items = _collections.GetOrAdd(collection, _ => new());
+ items[id] = new IndexedItem(lowerText, vectors);
+ }
+
+ public async Task> SearchAsync(string collection, string query, int maxResults, CancellationToken cancellationToken = default)
+ {
+ var queryLower = query.ToLowerInvariant();
+ var queryEmbedding = await generator.GenerateVectorAsync(queryLower, cancellationToken: cancellationToken);
+
+ if (!_collections.TryGetValue(collection, out var items) || items.IsEmpty)
+ return [];
+
+ return items
+ .Select(kvp =>
+ {
+ var bestScore = -1f;
+ foreach (var vector in kvp.Value.Vectors)
+ {
+ var similarity = TensorPrimitives.CosineSimilarity(queryEmbedding.Span, vector.Span);
+ if (similarity > bestScore)
+ bestScore = similarity;
+ }
+
+ // Hybrid keyword boost
+ if (kvp.Value.Text.Contains(queryLower, StringComparison.OrdinalIgnoreCase))
+ bestScore += 0.5f;
+
+ return new SemanticSearchResult(kvp.Key, bestScore);
+ })
+ .OrderByDescending(r => r.Score)
+ .Take(maxResults)
+ .ToList();
+ }
+
+ public Task WaitUntilReadyAsync(CancellationToken cancellationToken = default)
+ => Task.CompletedTask;
+
+ [GeneratedRegex(@"(?<=[.!?])\s+", RegexOptions.Compiled)]
+ private static partial Regex SentenceBoundaryRegex();
+
+ static IEnumerable SplitSentences(string text)
+ {
+ if (string.IsNullOrWhiteSpace(text))
+ yield break;
+
+ foreach (var sentence in SentenceBoundaryRegex().Split(text))
+ {
+ var trimmed = sentence.Trim();
+ if (trimmed.Length > 0)
+ yield return trimmed;
+ }
+ }
+}
diff --git a/samples/EssentialsAISample/Services/ISemanticSearchService.cs b/samples/EssentialsAISample/Services/ISemanticSearchService.cs
new file mode 100644
index 000000000..ba8216757
--- /dev/null
+++ b/samples/EssentialsAISample/Services/ISemanticSearchService.cs
@@ -0,0 +1,30 @@
+namespace EssentialsAISample.Services;
+
+///
+/// Abstracts semantic search over text content. Platform implementations may use
+/// embedding vectors (Apple NL, ONNX) or OS-level indexing (Windows AppContentIndexer).
+///
+public interface ISemanticSearchService
+{
+ ///
+ /// Index a single text item in the specified collection.
+ ///
+ Task IndexAsync(string collection, string id, string text, CancellationToken cancellationToken = default);
+
+ ///
+ /// Search a collection for content semantically similar to the query.
+ ///
+ Task> SearchAsync(string collection, string query, int maxResults, CancellationToken cancellationToken = default);
+
+ ///
+ /// Wait until all indexed content has been processed and is searchable.
+ ///
+ Task WaitUntilReadyAsync(CancellationToken cancellationToken = default);
+}
+
+///
+/// A single semantic search result.
+///
+/// The content identifier as provided during indexing.
+/// Relevance score (higher is more relevant).
+public record SemanticSearchResult(string Id, float Score);
diff --git a/samples/EssentialsAISample/Services/ItineraryService.cs b/samples/EssentialsAISample/Services/ItineraryService.cs
new file mode 100644
index 000000000..d7590853c
--- /dev/null
+++ b/samples/EssentialsAISample/Services/ItineraryService.cs
@@ -0,0 +1,102 @@
+using System.Runtime.CompilerServices;
+using System.Text.Json;
+using System.Text.Json.Serialization;
+using EssentialsAISample.AI;
+using EssentialsAISample.Models;
+using Microsoft.Agents.AI;
+
+namespace EssentialsAISample.Services;
+
+///
+/// Service that generates travel itineraries using the 4-agent AI workflow.
+/// Uses the workflow-as-agent pattern for a cleaner, more unified API.
+///
+public class ItineraryService(
+ [FromKeyedServices("itinerary-workflow-agent")] AIAgent workflowAgent)
+{
+ private static readonly JsonSerializerOptions s_jsonOptions = new()
+ {
+ PropertyNameCaseInsensitive = true,
+ PropertyNamingPolicy = JsonNamingPolicy.CamelCase,
+ Converters = { new JsonStringEnumConverter() },
+ };
+
+ ///
+ /// Streams an itinerary from a natural language request.
+ /// Example: "Give me a 5-day Maui itinerary in French"
+ ///
+ public async IAsyncEnumerable StreamItineraryAsync(
+ string input,
+ [EnumeratorCancellation] CancellationToken cancellationToken = default)
+ {
+ var deserializer = new StreamingJsonDeserializer(s_jsonOptions);
+ JsonMerger? merger = null;
+ var lastExecutorId = string.Empty;
+
+ // Stream responses from the workflow agent
+ await foreach (var update in workflowAgent.RunStreamingAsync(input, cancellationToken: cancellationToken))
+ {
+ // Check RawRepresentation for our custom workflow events
+ if (update.RawRepresentation is ExecutorStatusEvent statusEvent)
+ {
+ yield return new ItineraryStreamUpdate
+ {
+ StatusMessage = statusEvent.StatusMessage
+ };
+ }
+ else if (update.RawRepresentation is ItineraryTextChunkEvent textChunk)
+ {
+ // Initialize last executor ID
+ if (string.IsNullOrEmpty(lastExecutorId))
+ {
+ lastExecutorId = textChunk.ExecutorId;
+ }
+
+ // Detect executor switch (e.g., from ItineraryPlanner to Translator)
+ if (lastExecutorId != textChunk.ExecutorId)
+ {
+ // Save the complete reconstructed JSON from the previous executor as the base for merging
+ merger = new JsonMerger(deserializer.ReconstructedJsonUtf8.ToArray());
+ lastExecutorId = textChunk.ExecutorId;
+ deserializer.Reset();
+ }
+
+ var partialItinerary = deserializer.ProcessChunk(textChunk.TextChunk);
+ if (partialItinerary is not null)
+ {
+ // If we have a merger (translation phase), merge with base itinerary
+ if (merger is not null)
+ {
+ merger.MergeOverlayUtf8(deserializer.ReconstructedJsonMemory.Span);
+ var mergedItinerary = merger.Deserialize(s_jsonOptions);
+ if (mergedItinerary is not null)
+ {
+ partialItinerary = mergedItinerary;
+ }
+ }
+
+ yield return new ItineraryStreamUpdate
+ {
+ PartialItinerary = partialItinerary
+ };
+ }
+ }
+ }
+ }
+}
+
+///
+/// Update from the itinerary streaming process.
+///
+public record ItineraryStreamUpdate
+{
+ ///
+ /// Status message to display in the fading status trail.
+ ///
+ public string? StatusMessage { get; init; }
+
+ ///
+ /// The partial or complete itinerary.
+ ///
+ public Itinerary? PartialItinerary { get; init; }
+}
diff --git a/samples/EssentialsAISample/Services/JsonMerger.cs b/samples/EssentialsAISample/Services/JsonMerger.cs
new file mode 100644
index 000000000..6490520bf
--- /dev/null
+++ b/samples/EssentialsAISample/Services/JsonMerger.cs
@@ -0,0 +1,294 @@
+using System.Buffers;
+using System.Text;
+using System.Text.Json;
+
+namespace EssentialsAISample.Services;
+
+///
+/// Merges JSON overlay documents onto a base document.
+/// Useful for streaming translation scenarios where partial translations need to be merged
+/// with the original content progressively.
+///
+///
+/// The merger performs a deep merge:
+/// - For objects: properties from overlay replace matching properties in base
+/// - For arrays: elements are merged by index position
+/// - For primitives: overlay value replaces base value
+/// - Missing overlay values preserve the base value
+///
+/// Create with a base JSON, then call repeatedly
+/// with incoming partial JSON to get progressive merged results.
+///
+internal sealed class JsonMerger
+{
+ private readonly ArrayBufferWriter _outputBuffer = new(initialCapacity: 4096);
+ private readonly JsonDocument _baseDocument;
+
+ ///
+ /// Creates a new JsonMerger with the specified base JSON document.
+ ///
+ /// The base JSON document (e.g., original English content).
+ public JsonMerger(string baseJson)
+ {
+ ArgumentException.ThrowIfNullOrEmpty(baseJson);
+
+ _baseDocument = JsonDocument.Parse(baseJson);
+ }
+
+ ///
+ /// Creates a new JsonMerger with the specified base JSON document as UTF-8 bytes.
+ ///
+ /// The base JSON document as UTF-8 bytes.
+ public JsonMerger(ReadOnlyMemory baseJsonUtf8)
+ {
+ if (baseJsonUtf8.IsEmpty)
+ throw new ArgumentException("Base JSON cannot be empty.", nameof(baseJsonUtf8));
+
+ _baseDocument = JsonDocument.Parse(baseJsonUtf8);
+ }
+
+ ///
+ /// Gets the result of the last merge operation as UTF-8 bytes (zero-allocation view).
+ ///
+ public ReadOnlyMemory PartialJsonMemory => _outputBuffer.WrittenMemory;
+
+ ///
+ /// Gets the result of the last merge operation as UTF-8 bytes.
+ ///
+ public ReadOnlySpan ResultUtf8 => _outputBuffer.WrittenSpan;
+
+ ///
+ /// Gets the result of the last merge operation as a string.
+ ///
+ public string Result => Encoding.UTF8.GetString(_outputBuffer.WrittenSpan);
+
+ ///
+ /// Merges an overlay JSON string onto the base document.
+ /// Can be called repeatedly with progressive partial JSON.
+ ///
+ /// The overlay JSON document (e.g., partial translation).
+ /// The merged JSON as a string.
+ public string MergeOverlay(string overlayJson)
+ {
+ if (string.IsNullOrEmpty(overlayJson))
+ {
+ // No overlay - just serialize the base document
+ MergeOverlayUtf8(ReadOnlySpan.Empty);
+ return Result;
+ }
+
+ var overlayBytes = Encoding.UTF8.GetBytes(overlayJson);
+ MergeOverlayUtf8(overlayBytes);
+ return Result;
+ }
+
+ ///
+ /// Merges an overlay JSON document onto the base document (UTF-8 bytes).
+ ///
+ /// The overlay JSON document as UTF-8 bytes.
+ public void MergeOverlayUtf8(ReadOnlySpan overlayJson)
+ {
+ _outputBuffer.Clear();
+
+ if (overlayJson.IsEmpty)
+ {
+ // No overlay - just write the base document
+ using var writer = new Utf8JsonWriter(_outputBuffer, new JsonWriterOptions { Indented = false });
+ WriteElement(writer, _baseDocument.RootElement);
+ writer.Flush();
+ return;
+ }
+
+ // Parse overlay - allow trailing commas for partial JSON
+ using var overlayDoc = JsonDocument.Parse(overlayJson.ToArray(), new JsonDocumentOptions
+ {
+ AllowTrailingCommas = true
+ });
+
+ using var writer2 = new Utf8JsonWriter(_outputBuffer, new JsonWriterOptions
+ {
+ Indented = false
+ });
+
+ MergeElements(writer2, _baseDocument.RootElement, overlayDoc.RootElement);
+ writer2.Flush();
+ }
+
+ ///
+ /// Deserializes the merged result to a specified type.
+ ///
+ /// The type to deserialize to.
+ /// Optional JSON serializer options.
+ /// The deserialized object, or default if deserialization fails.
+ public T? Deserialize(JsonSerializerOptions? options = null)
+ {
+ if (_outputBuffer.WrittenCount == 0)
+ return default;
+
+ try
+ {
+ return JsonSerializer.Deserialize(_outputBuffer.WrittenSpan, options);
+ }
+ catch (JsonException)
+ {
+ return default;
+ }
+ }
+
+ ///
+ /// Recursively merges two JSON elements.
+ ///
+ private static void MergeElements(Utf8JsonWriter writer, JsonElement baseElement, JsonElement overlayElement)
+ {
+ // If types don't match, prefer the overlay
+ if (baseElement.ValueKind != overlayElement.ValueKind)
+ {
+ WriteElement(writer, overlayElement);
+ return;
+ }
+
+ switch (baseElement.ValueKind)
+ {
+ case JsonValueKind.Object:
+ MergeObjects(writer, baseElement, overlayElement);
+ break;
+
+ case JsonValueKind.Array:
+ MergeArrays(writer, baseElement, overlayElement);
+ break;
+
+ default:
+ // For primitives (string, number, bool, null), use overlay value
+ WriteElement(writer, overlayElement);
+ break;
+ }
+ }
+
+ ///
+ /// Merges two JSON objects, combining properties from both.
+ ///
+ private static void MergeObjects(Utf8JsonWriter writer, JsonElement baseObj, JsonElement overlayObj)
+ {
+ writer.WriteStartObject();
+
+ // Build a set of overlay property names for quick lookup
+ var overlayProperties = new Dictionary();
+ foreach (var prop in overlayObj.EnumerateObject())
+ {
+ overlayProperties[prop.Name] = prop.Value;
+ }
+
+ // Process all base properties
+ foreach (var baseProp in baseObj.EnumerateObject())
+ {
+ writer.WritePropertyName(baseProp.Name);
+
+ if (overlayProperties.TryGetValue(baseProp.Name, out var overlayValue))
+ {
+ // Property exists in both - merge recursively
+ MergeElements(writer, baseProp.Value, overlayValue);
+ overlayProperties.Remove(baseProp.Name);
+ }
+ else
+ {
+ // Property only in base - keep it
+ WriteElement(writer, baseProp.Value);
+ }
+ }
+
+ // Add any remaining overlay properties not in base
+ foreach (var (name, value) in overlayProperties)
+ {
+ writer.WritePropertyName(name);
+ WriteElement(writer, value);
+ }
+
+ writer.WriteEndObject();
+ }
+
+ ///
+ /// Merges two JSON arrays by index position.
+ ///
+ private static void MergeArrays(Utf8JsonWriter writer, JsonElement baseArray, JsonElement overlayArray)
+ {
+ writer.WriteStartArray();
+
+ var baseLength = baseArray.GetArrayLength();
+ var overlayLength = overlayArray.GetArrayLength();
+ var maxLength = Math.Max(baseLength, overlayLength);
+
+ for (int i = 0; i < maxLength; i++)
+ {
+ if (i < baseLength && i < overlayLength)
+ {
+ // Both have element at this index - merge
+ MergeElements(writer, baseArray[i], overlayArray[i]);
+ }
+ else if (i < overlayLength)
+ {
+ // Only overlay has element - use it
+ WriteElement(writer, overlayArray[i]);
+ }
+ else
+ {
+ // Only base has element - keep it
+ WriteElement(writer, baseArray[i]);
+ }
+ }
+
+ writer.WriteEndArray();
+ }
+
+ ///
+ /// Writes a JSON element to the writer.
+ ///
+ private static void WriteElement(Utf8JsonWriter writer, JsonElement element)
+ {
+ switch (element.ValueKind)
+ {
+ case JsonValueKind.Object:
+ writer.WriteStartObject();
+ foreach (var prop in element.EnumerateObject())
+ {
+ writer.WritePropertyName(prop.Name);
+ WriteElement(writer, prop.Value);
+ }
+ writer.WriteEndObject();
+ break;
+
+ case JsonValueKind.Array:
+ writer.WriteStartArray();
+ foreach (var item in element.EnumerateArray())
+ {
+ WriteElement(writer, item);
+ }
+ writer.WriteEndArray();
+ break;
+
+ case JsonValueKind.String:
+ writer.WriteStringValue(element.GetString());
+ break;
+
+ case JsonValueKind.Number:
+ if (element.TryGetInt64(out var longVal))
+ writer.WriteNumberValue(longVal);
+ else if (element.TryGetDouble(out var doubleVal))
+ writer.WriteNumberValue(doubleVal);
+ else
+ writer.WriteNumberValue(element.GetDecimal());
+ break;
+
+ case JsonValueKind.True:
+ writer.WriteBooleanValue(true);
+ break;
+
+ case JsonValueKind.False:
+ writer.WriteBooleanValue(false);
+ break;
+
+ case JsonValueKind.Null:
+ writer.WriteNullValue();
+ break;
+ }
+ }
+}
diff --git a/samples/EssentialsAISample/Services/PromptBasedSchemaClient.cs b/samples/EssentialsAISample/Services/PromptBasedSchemaClient.cs
new file mode 100644
index 000000000..d480011c0
--- /dev/null
+++ b/samples/EssentialsAISample/Services/PromptBasedSchemaClient.cs
@@ -0,0 +1,89 @@
+using Microsoft.Extensions.AI;
+
+namespace EssentialsAISample.Services;
+
+///
+/// A delegating chat client that converts native JSON schema response format requests
+/// into prompt-based instructions. Use this for models (like Phi Silica) that don't
+/// support structured output natively — the schema is injected into the prompt instead.
+/// Also strips markdown code fences from responses so JSON parsing succeeds.
+///
+public sealed class PromptBasedSchemaClient : DelegatingChatClient
+{
+ public PromptBasedSchemaClient(IChatClient inner) : base(inner) { }
+
+ public override async Task GetResponseAsync(
+ IEnumerable messages,
+ ChatOptions? options = null,
+ CancellationToken cancellationToken = default)
+ {
+ (messages, options) = RewriteIfNeeded(messages, options);
+ var response = await base.GetResponseAsync(messages, options, cancellationToken);
+ StripCodeFences(response);
+ return response;
+ }
+
+ public override IAsyncEnumerable GetStreamingResponseAsync(
+ IEnumerable messages,
+ ChatOptions? options = null,
+ CancellationToken cancellationToken = default)
+ {
+ (messages, options) = RewriteIfNeeded(messages, options);
+ return base.GetStreamingResponseAsync(messages, options, cancellationToken);
+ }
+
+ static (IEnumerable, ChatOptions?) RewriteIfNeeded(
+ IEnumerable messages, ChatOptions? options)
+ {
+ if (options?.ResponseFormat is ChatResponseFormatJson jsonFormat && jsonFormat.Schema is { } schema)
+ {
+ var schemaPrompt = new ChatMessage(ChatRole.System, $$"""
+ IMPORTANT: Your response must be a single valid JSON object with real values.
+ Do NOT wrap the response in markdown code fences or backticks.
+ Do NOT include "$schema", "type", "properties", "required", or "description" keys from the schema definition.
+ Do NOT echo the schema back. Only output the data.
+ For enum values, use EXACTLY the values listed in the schema (e.g. "Sightseeing" not "Sight seeing", "FoodAndDining" not "Food and Dining").
+
+ JSON schema for the expected response:
+ {{schema}}
+ """);
+
+ // Prepend as system message so it's authoritative
+ messages = [schemaPrompt, .. messages];
+
+ options = options.Clone();
+ options.ResponseFormat = null;
+ }
+
+ return (messages, options);
+ }
+
+ ///
+ /// Strips markdown code fences (```json ... ```) from the response text
+ /// so JSON deserialization succeeds.
+ ///
+ static void StripCodeFences(ChatResponse response)
+ {
+ foreach (var message in response.Messages)
+ {
+ foreach (var content in message.Contents)
+ {
+ if (content is TextContent tc && tc.Text is { } text)
+ {
+ var trimmed = text.Trim();
+ // Strip ```json ... ``` or ``` ... ```
+ if (trimmed.StartsWith("```", StringComparison.Ordinal))
+ {
+ var firstNewline = trimmed.IndexOf('\n', StringComparison.Ordinal);
+ if (firstNewline > 0)
+ trimmed = trimmed[(firstNewline + 1)..];
+ }
+ if (trimmed.EndsWith("```", StringComparison.Ordinal))
+ trimmed = trimmed[..^3];
+
+ tc.Text = trimmed.Trim();
+ }
+ }
+ }
+ }
+}
diff --git a/samples/EssentialsAISample/Services/StreamingJsonDeserializer.cs b/samples/EssentialsAISample/Services/StreamingJsonDeserializer.cs
new file mode 100644
index 000000000..0f0617d21
--- /dev/null
+++ b/samples/EssentialsAISample/Services/StreamingJsonDeserializer.cs
@@ -0,0 +1,656 @@
+using System.Buffers;
+using System.Diagnostics;
+using System.Text;
+using System.Text.Json;
+using System.Text.Json.Serialization;
+using System.Text.Json.Serialization.Metadata;
+
+namespace EssentialsAISample.Services;
+
+///
+/// Zero-allocation streaming JSON deserializer using Utf8JsonWriter with ReadOnlySpan<byte> overloads.
+/// Eliminates string allocations by using the writer's native UTF-8 span APIs.
+///
+internal sealed class StreamingJsonDeserializer
+ where T : class
+{
+ private readonly ArrayBufferWriter _byteBuffer = new(initialCapacity: 4096);
+ private readonly ArrayBufferWriter _reconstructionBuffer = new(initialCapacity: 4096);
+ private readonly Stack _bracketStack = new();
+
+ private readonly JsonSerializerOptions _options;
+ private readonly bool _skipDeserialization;
+ private T? _lastGoodModel;
+
+ ///
+ /// Initializes a new instance of the StreamingJsonDeserializer.
+ ///
+ /// Custom JSON serialization options, or null to use defaults.
+ /// If true, reconstructs JSON without deserializing to the target type (useful for validation).
+ public StreamingJsonDeserializer(JsonSerializerOptions? options = null, bool skipDeserialization = false)
+ {
+ _skipDeserialization = skipDeserialization;
+ options ??= new JsonSerializerOptions();
+ _options = new JsonSerializerOptions(options)
+ {
+ DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull,
+ AllowTrailingCommas = true,
+ ReadCommentHandling = JsonCommentHandling.Skip,
+
+ // Make all properties optional to handle incomplete streaming JSON
+ TypeInfoResolver = new DefaultJsonTypeInfoResolver
+ {
+ Modifiers =
+ {
+ static typeInfo =>
+ {
+ if (typeInfo.Kind != JsonTypeInfoKind.Object)
+ return;
+
+ foreach (var propertyInfo in typeInfo.Properties)
+ {
+ propertyInfo.IsRequired = false;
+ }
+ }
+ }
+ }
+ };
+ }
+
+ ///
+ /// Gets the current accumulated JSON as UTF-8 bytes (zero-allocation view).
+ ///
+ public ReadOnlySpan PartialJsonUtf8 => _byteBuffer.WrittenSpan;
+
+ ///
+ /// Gets the current accumulated JSON as UTF-8 bytes (zero-allocation view).
+ ///
+ public ReadOnlyMemory PartialJsonMemory => _byteBuffer.WrittenMemory;
+
+ ///
+ /// Gets the current accumulated JSON as a string (allocates for string conversion).
+ ///
+ public string PartialJson => Encoding.UTF8.GetString(_byteBuffer.WrittenSpan);
+
+ ///
+ /// Gets the last reconstructed valid JSON as UTF-8 bytes (zero-allocation view).
+ /// This is the completed/repaired JSON that was successfully parsed.
+ ///
+ public ReadOnlySpan ReconstructedJsonUtf8 => _reconstructionBuffer.WrittenSpan;
+
+ ///
+ /// Gets the last reconstructed valid JSON as UTF-8 bytes (zero-allocation view).
+ /// This is the completed/repaired JSON that was successfully parsed.
+ ///
+ public ReadOnlyMemory ReconstructedJsonMemory => _reconstructionBuffer.WrittenMemory;
+
+ ///
+ /// Gets the last reconstructed valid JSON as a string (allocates for string conversion).
+ /// This is the completed/repaired JSON that was successfully parsed.
+ ///
+ public string ReconstructedJson => Encoding.UTF8.GetString(_reconstructionBuffer.WrittenSpan);
+
+ ///
+ /// Gets the last successfully deserialized model, or null if none have succeeded yet.
+ ///
+ public T? LastGoodModel => _lastGoodModel;
+
+ ///
+ /// Processes a new chunk of JSON text from a streaming source.
+ /// Accumulates the chunk into the internal buffer and attempts to deserialize.
+ ///
+ /// The incoming JSON text fragment to process.
+ /// The most recently successfully deserialized model, or null if none have succeeded yet.
+ public T? ProcessChunk(string chunk)
+ {
+ if (string.IsNullOrEmpty(chunk))
+ return _lastGoodModel;
+
+ // Convert the incoming chunk to UTF-8 bytes and append to the buffer
+ var byteCount = Encoding.UTF8.GetByteCount(chunk);
+ var span = _byteBuffer.GetSpan(byteCount);
+ Encoding.UTF8.GetBytes(chunk, span);
+ _byteBuffer.Advance(byteCount);
+
+ // Attempt to deserialize the accumulated JSON so far
+ var parsed = TryDeserializeIncremental();
+ if (parsed != null)
+ {
+ _lastGoodModel = parsed;
+ }
+
+ return _lastGoodModel;
+ }
+
+ ///
+ /// Resets the deserializer state, clearing all accumulated data and cached models.
+ /// Call this to start processing a new stream from scratch.
+ ///
+ public void Reset()
+ {
+ _byteBuffer.Clear();
+ _reconstructionBuffer.Clear();
+ _bracketStack.Clear();
+ _lastGoodModel = default;
+ }
+
+ ///
+ /// Attempts to reconstruct and deserialize the accumulated JSON buffer.
+ /// Handles incomplete JSON by closing unclosed structures and extracting partial string values.
+ ///
+ /// A deserialized model instance if successful, otherwise null.
+ private T? TryDeserializeIncremental()
+ {
+ var bytes = _byteBuffer.WrittenSpan;
+ if (bytes.IsEmpty)
+ return null;
+
+ try
+ {
+ // Reconstruct valid JSON from potentially incomplete input
+ var reconstructedBytes = ReconstructValidJsonWithUtf8Writer(bytes);
+
+ if (reconstructedBytes.Length > 0)
+ {
+ if (_skipDeserialization)
+ return null;
+
+ try
+ {
+ return JsonSerializer.Deserialize(reconstructedBytes, _options);
+ }
+ catch (JsonException ex)
+ {
+ Debug.WriteLine($"Deserialization failed: {ex.Message}");
+
+ // Deserialization failed - JSON may still be too incomplete
+ return null;
+ }
+ }
+ }
+ catch (Exception ex)
+ {
+ Debug.WriteLine($"Reconstruction failed: {ex.Message}");
+
+ // Reconstruction failed
+ }
+
+ return null;
+ }
+
+ ///
+ /// Reconstructs valid, complete JSON from potentially incomplete streaming JSON input.
+ /// Uses Utf8JsonReader to parse tokens and Utf8JsonWriter to rebuild valid JSON structure.
+ /// Handles incomplete values by completing partial strings and closing unclosed brackets/braces.
+ ///
+ /// The potentially incomplete UTF-8 JSON bytes to reconstruct.
+ /// A span containing complete, valid UTF-8 JSON bytes.
+ private ReadOnlySpan ReconstructValidJsonWithUtf8Writer(ReadOnlySpan incompleteUtf8Json)
+ {
+ _reconstructionBuffer.Clear();
+ _bracketStack.Clear();
+
+ // Use non-final block mode to allow incomplete JSON
+ var reader = new Utf8JsonReader(incompleteUtf8Json, isFinalBlock: false, state: default);
+ var writer = new Utf8JsonWriter(_reconstructionBuffer);
+
+ // Track pending property name for key-value pairs
+ ReadOnlySpan pendingPropertyNameBytes = default;
+
+ try
+ {
+ while (reader.Read())
+ {
+ switch (reader.TokenType)
+ {
+ case JsonTokenType.StartObject:
+ WritePendingPropertyName(writer, ref pendingPropertyNameBytes);
+ writer.WriteStartObject();
+ // Track that this object needs closing
+ _bracketStack.Push((byte)'}');
+ break;
+
+ case JsonTokenType.EndObject:
+ // Only close if we have a matching open brace
+ if (_bracketStack.Count > 0 && _bracketStack.Peek() == (byte)'}')
+ {
+ _bracketStack.Pop();
+ writer.WriteEndObject();
+ }
+ break;
+
+ case JsonTokenType.StartArray:
+ WritePendingPropertyName(writer, ref pendingPropertyNameBytes);
+ writer.WriteStartArray();
+ // Track that this array needs closing
+ _bracketStack.Push((byte)']');
+ break;
+
+ case JsonTokenType.EndArray:
+ // Only close if we have a matching open bracket
+ if (_bracketStack.Count > 0 && _bracketStack.Peek() == (byte)']')
+ {
+ _bracketStack.Pop();
+ writer.WriteEndArray();
+ }
+ break;
+
+ case JsonTokenType.PropertyName:
+ // Store property name bytes to write later when we get the value
+ // Must copy to array since the span becomes invalid after reader advances
+ pendingPropertyNameBytes = reader.HasValueSequence
+ ? reader.ValueSequence.ToArray()
+ : reader.ValueSpan.ToArray();
+ break;
+
+ case JsonTokenType.String:
+ WriteStringValue(writer, ref reader, ref pendingPropertyNameBytes);
+ break;
+
+ case JsonTokenType.Number:
+ WriteNumberValue(writer, ref reader, ref pendingPropertyNameBytes);
+ break;
+
+ case JsonTokenType.True:
+ WriteBooleanValue(writer, true, ref pendingPropertyNameBytes);
+ break;
+
+ case JsonTokenType.False:
+ WriteBooleanValue(writer, false, ref pendingPropertyNameBytes);
+ break;
+
+ case JsonTokenType.Null:
+ WriteNullValue(writer, ref pendingPropertyNameBytes);
+ break;
+ }
+ }
+ }
+ catch
+ {
+ // Reader exhausted - expected for incomplete JSON
+ }
+
+ // If we have a property name without a value, try to extract the partial value
+ if (!pendingPropertyNameBytes.IsEmpty)
+ {
+ TryWritePartialValue(writer, incompleteUtf8Json, pendingPropertyNameBytes);
+ }
+
+ // Close any unclosed JSON structures (objects/arrays) to make the JSON valid
+ while (_bracketStack.Count > 0)
+ {
+ var bracket = _bracketStack.Pop();
+ if (bracket == (byte)'}')
+ writer.WriteEndObject();
+ else if (bracket == (byte)']')
+ writer.WriteEndArray();
+ }
+
+ writer.Flush();
+ return _reconstructionBuffer.WrittenSpan;
+ }
+
+ ///
+ /// Writes a pending property name to the JSON writer if one exists, then clears it.
+ /// Used before writing values or nested structures.
+ ///
+ private static void WritePendingPropertyName(Utf8JsonWriter writer, ref ReadOnlySpan pendingPropertyNameBytes)
+ {
+ if (!pendingPropertyNameBytes.IsEmpty)
+ {
+ // Use span-based overload for zero-allocation property name writing
+ writer.WritePropertyName(pendingPropertyNameBytes);
+ pendingPropertyNameBytes = default;
+ }
+ }
+
+ ///
+ /// Writes a string value from the reader to the writer.
+ /// Handles both property values (with pending property name) and array elements (without).
+ ///
+ private static void WriteStringValue(Utf8JsonWriter writer, ref Utf8JsonReader reader, ref ReadOnlySpan pendingPropertyNameBytes)
+ {
+ ReadOnlySpan stringBytes = GetStringBytes(ref reader);
+
+ if (!pendingPropertyNameBytes.IsEmpty)
+ {
+ // Write as property: "propertyName": "value"
+ writer.WriteString(pendingPropertyNameBytes, stringBytes);
+ pendingPropertyNameBytes = default;
+ }
+ else
+ {
+ // Write as standalone value (array element or root value)
+ writer.WriteStringValue(stringBytes);
+ }
+ }
+
+ ///
+ /// Extracts string bytes from the JSON reader, handling escape sequences if present.
+ ///
+ /// UTF-8 bytes representing the unescaped string value.
+ private static ReadOnlySpan GetStringBytes(ref Utf8JsonReader reader)
+ {
+ if (reader.ValueIsEscaped)
+ {
+ // String contains escape sequences - need to unescape them
+ var unescapedBuffer = new ArrayBufferWriter();
+ var span = unescapedBuffer.GetSpan(reader.HasValueSequence ? (int)reader.ValueSequence.Length : reader.ValueSpan.Length);
+ int written = reader.CopyString(span);
+ unescapedBuffer.Advance(written);
+ return unescapedBuffer.WrittenSpan;
+ }
+
+ // No escaping - return raw bytes (handle both contiguous and segmented buffers)
+ return reader.HasValueSequence ? reader.ValueSequence.ToArray() : reader.ValueSpan;
+ }
+
+ ///
+ /// Writes a numeric value from the reader to the writer.
+ /// Handles both property values and array elements, choosing the most appropriate numeric type (long, double, or decimal).
+ ///
+ private static void WriteNumberValue(Utf8JsonWriter writer, ref Utf8JsonReader reader, ref ReadOnlySpan pendingPropertyNameBytes)
+ {
+ if (!pendingPropertyNameBytes.IsEmpty)
+ {
+ // Write as property: "propertyName": 123
+ // Try integer first, then floating point, finally decimal for precision
+ if (reader.TryGetInt64(out var longValue))
+ writer.WriteNumber(pendingPropertyNameBytes, longValue);
+ else if (reader.TryGetDouble(out var doubleValue))
+ writer.WriteNumber(pendingPropertyNameBytes, doubleValue);
+ else
+ writer.WriteNumber(pendingPropertyNameBytes, reader.GetDecimal());
+
+ pendingPropertyNameBytes = default;
+ }
+ else
+ {
+ // Write as standalone value
+ if (reader.TryGetInt64(out var longValue))
+ writer.WriteNumberValue(longValue);
+ else if (reader.TryGetDouble(out var doubleValue))
+ writer.WriteNumberValue(doubleValue);
+ else
+ writer.WriteNumberValue(reader.GetDecimal());
+ }
+ }
+
+ ///
+ /// Writes a boolean value to the writer.
+ /// Handles both property values and array elements.
+ ///
+ private static void WriteBooleanValue(Utf8JsonWriter writer, bool value, ref ReadOnlySpan pendingPropertyNameBytes)
+ {
+ if (!pendingPropertyNameBytes.IsEmpty)
+ {
+ // Write as property: "propertyName": true/false
+ writer.WriteBoolean(pendingPropertyNameBytes, value);
+ pendingPropertyNameBytes = default;
+ }
+ else
+ {
+ // Write as standalone value
+ writer.WriteBooleanValue(value);
+ }
+ }
+
+ ///
+ /// Writes a null value to the writer.
+ /// Handles both property values and array elements.
+ ///
+ private static void WriteNullValue(Utf8JsonWriter writer, ref ReadOnlySpan pendingPropertyNameBytes)
+ {
+ if (!pendingPropertyNameBytes.IsEmpty)
+ {
+ // Write as property: "propertyName": null
+ writer.WriteNull(pendingPropertyNameBytes);
+ pendingPropertyNameBytes = default;
+ }
+ else
+ {
+ // Write as standalone value
+ writer.WriteNullValue();
+ }
+ }
+
+ ///
+ /// Attempts to extract and write a partially received value for a pending property.
+ /// This handles cases where streaming JSON cuts off mid-value (strings, numbers, booleans, or null).
+ ///
+ /// The JSON writer to write the completed property to.
+ /// The complete accumulated JSON buffer.
+ /// The UTF-8 bytes of the property name.
+ private static void TryWritePartialValue(Utf8JsonWriter writer, ReadOnlySpan utf8Json, ReadOnlySpan propertyNameBytes)
+ {
+ // Build search pattern for property name: "propertyName":
+ Span pattern = stackalloc byte[propertyNameBytes.Length + 3];
+ pattern[0] = (byte)'"';
+ propertyNameBytes.CopyTo(pattern[1..^2]);
+ pattern[^2] = (byte)'"';
+ pattern[^1] = (byte)':';
+
+ // Find the last occurrence of the property:value pattern
+ var index = utf8Json.LastIndexOf(pattern);
+ if (index < 0)
+ return;
+
+ // Get the value portion after the colon
+ var valueStartIndex = index + pattern.Length;
+ if (valueStartIndex >= utf8Json.Length)
+ return;
+
+ var partialValueBytes = utf8Json[valueStartIndex..];
+
+ // Skip any whitespace after the colon
+ int i = 0;
+ while (i < partialValueBytes.Length && (partialValueBytes[i] == (byte)' ' || partialValueBytes[i] == (byte)'\t' || partialValueBytes[i] == (byte)'\n' || partialValueBytes[i] == (byte)'\r'))
+ i++;
+
+ if (i >= partialValueBytes.Length)
+ return;
+
+ partialValueBytes = partialValueBytes[i..];
+
+ // Determine the value type by the first character
+ var firstChar = partialValueBytes[0];
+
+ if (firstChar == (byte)'"')
+ {
+ // String value - extract everything after the opening quote
+ var stringValueBytes = partialValueBytes[1..];
+ var unescapedBytes = UnescapeJsonStringBytes(stringValueBytes);
+ writer.WriteString(propertyNameBytes, unescapedBytes.WrittenSpan);
+ }
+ else if (firstChar == (byte)'-' || (firstChar >= (byte)'0' && firstChar <= (byte)'9'))
+ {
+ // Number value - extract digits, decimal point, exponent
+ var numberEnd = 0;
+ while (numberEnd < partialValueBytes.Length && IsNumberChar(partialValueBytes[numberEnd]))
+ numberEnd++;
+
+ if (numberEnd > 0)
+ {
+ var numberBytes = partialValueBytes[..numberEnd];
+ // Try to parse as a number using a temporary reader
+ try
+ {
+ var numberReader = new Utf8JsonReader(numberBytes, isFinalBlock: true, state: default);
+ if (numberReader.Read() && numberReader.TokenType == JsonTokenType.Number)
+ {
+ if (numberReader.TryGetInt64(out var longValue))
+ writer.WriteNumber(propertyNameBytes, longValue);
+ else if (numberReader.TryGetDouble(out var doubleValue))
+ writer.WriteNumber(propertyNameBytes, doubleValue);
+ else
+ writer.WriteNumber(propertyNameBytes, numberReader.GetDecimal());
+ }
+ }
+ catch
+ {
+ // Invalid number format - skip
+ }
+ }
+ }
+ else if (partialValueBytes.Length >= 4 && partialValueBytes[..4].SequenceEqual("true"u8))
+ {
+ writer.WriteBoolean(propertyNameBytes, true);
+ }
+ else if (partialValueBytes.Length >= 5 && partialValueBytes[..5].SequenceEqual("false"u8))
+ {
+ writer.WriteBoolean(propertyNameBytes, false);
+ }
+ else if (partialValueBytes.Length >= 4 && partialValueBytes[..4].SequenceEqual("null"u8))
+ {
+ writer.WriteNull(propertyNameBytes);
+ }
+ // else: incomplete literal (e.g., "tru", "fal", "nul") - skip for now
+ }
+
+ ///
+ /// Checks if a byte is a valid character in a JSON number (digit, decimal point, sign, or exponent).
+ ///
+ private static bool IsNumberChar(byte b)
+ {
+ return b >= (byte)'0' && b <= (byte)'9'
+ || b == (byte)'.'
+ || b == (byte)'-'
+ || b == (byte)'+'
+ || b == (byte)'e'
+ || b == (byte)'E';
+ }
+
+ ///
+ /// Unescapes JSON string escape sequences (like \n, \t, \uXXXX) in UTF-8 bytes.
+ /// Handles standard escape sequences and Unicode escape sequences.
+ ///
+ /// The UTF-8 bytes containing escape sequences.
+ /// A buffer containing the unescaped UTF-8 bytes.
+ private static ArrayBufferWriter UnescapeJsonStringBytes(ReadOnlySpan escapedBytes)
+ {
+ // Handle empty input
+ if (escapedBytes.IsEmpty)
+ return new ArrayBufferWriter();
+
+ // Remove trailing backslash if present (incomplete escape sequence)
+ if (escapedBytes[^1] == (byte)'\\')
+ escapedBytes = escapedBytes[..^1];
+
+ // Handle case where only a backslash was present
+ if (escapedBytes.IsEmpty)
+ return new ArrayBufferWriter();
+
+ var buffer = new ArrayBufferWriter(escapedBytes.Length);
+
+ for (int i = 0; i < escapedBytes.Length; i++)
+ {
+ if (escapedBytes[i] == (byte)'\\' && i + 1 < escapedBytes.Length)
+ {
+ // Process escape sequences
+ switch (escapedBytes[i + 1])
+ {
+ case (byte)'"':
+ case (byte)'\\':
+ case (byte)'/':
+ // Simple character escapes - write the escaped character directly
+ buffer.GetSpan(1)[0] = escapedBytes[i + 1];
+ buffer.Advance(1);
+ i++; // Skip the escape sequence
+ break;
+ case (byte)'b':
+ buffer.GetSpan(1)[0] = (byte)'\b';
+ buffer.Advance(1);
+ i++;
+ break;
+ case (byte)'f':
+ buffer.GetSpan(1)[0] = (byte)'\f';
+ buffer.Advance(1);
+ i++;
+ break;
+ case (byte)'n':
+ buffer.GetSpan(1)[0] = (byte)'\n';
+ buffer.Advance(1);
+ i++;
+ break;
+ case (byte)'r':
+ buffer.GetSpan(1)[0] = (byte)'\r';
+ buffer.Advance(1);
+ i++;
+ break;
+ case (byte)'t':
+ buffer.GetSpan(1)[0] = (byte)'\t';
+ buffer.Advance(1);
+ i++;
+ break;
+ case (byte)'u' when i + 5 < escapedBytes.Length:
+ // Unicode escape sequence: \uXXXX (4 hex digits)
+ if (TryParseHexToChar(escapedBytes.Slice(i + 2, 4), out char unicodeChar))
+ {
+ // Convert the Unicode character to UTF-8 bytes directly into the buffer
+ var unichars = new ReadOnlySpan(in unicodeChar);
+ var bufferBytes = buffer.GetSpan(4);
+ var bytesWritten = Encoding.UTF8.GetBytes(unichars, bufferBytes);
+ buffer.Advance(bytesWritten);
+ i += 5; // Skip \uXXXX
+ }
+ else
+ {
+ // Invalid hex - write the backslash as-is
+ buffer.GetSpan(1)[0] = escapedBytes[i];
+ buffer.Advance(1);
+ }
+ break;
+ default:
+ // Unknown escape - write the backslash as-is
+ buffer.GetSpan(1)[0] = escapedBytes[i];
+ buffer.Advance(1);
+ break;
+ }
+ }
+ else
+ {
+ // Regular character - copy as-is
+ buffer.GetSpan(1)[0] = escapedBytes[i];
+ buffer.Advance(1);
+ }
+ }
+
+ return buffer;
+ }
+
+ ///
+ /// Parses a 4-character hexadecimal sequence (like "00A9" for ©) into a Unicode character.
+ /// Used for handling \uXXXX escape sequences in JSON strings.
+ ///
+ /// UTF-8 bytes representing 4 hexadecimal digits.
+ /// The resulting Unicode character if parsing succeeded.
+ /// True if parsing succeeded, false if the hex sequence is invalid.
+ private static bool TryParseHexToChar(ReadOnlySpan hexBytes, out char result)
+ {
+ result = '\0';
+ if (hexBytes.Length != 4)
+ return false;
+
+ int value = 0;
+ foreach (byte b in hexBytes)
+ {
+ // Convert ASCII hex digit to numeric value (0-15)
+ int hexDigit = b switch
+ {
+ >= (byte)'0' and <= (byte)'9' => b - '0',
+ >= (byte)'A' and <= (byte)'F' => b - 'A' + 10,
+ >= (byte)'a' and <= (byte)'f' => b - 'a' + 10,
+ _ => -1
+ };
+
+ if (hexDigit < 0)
+ return false;
+
+ // Shift previous value left by 4 bits (one hex digit) and OR in the new digit
+ value = (value << 4) | hexDigit;
+ }
+
+ result = (char)value;
+ return true;
+ }
+}
diff --git a/samples/EssentialsAISample/Services/TaggingService.cs b/samples/EssentialsAISample/Services/TaggingService.cs
new file mode 100644
index 000000000..0c8d636d5
--- /dev/null
+++ b/samples/EssentialsAISample/Services/TaggingService.cs
@@ -0,0 +1,45 @@
+using Microsoft.Extensions.AI;
+
+namespace EssentialsAISample.Services;
+
+public class TaggingService(IChatClient chatClient)
+{
+ public async Task> GenerateTagsAsync(string text, CancellationToken cancellationToken = default)
+ {
+ var systemPrompt =
+ """
+ You are a social media assistant that creates engaging travel hashtags.
+
+ Given text about a travel destination, generate 5 hashtags that are fun
+ and playful but still relevant to the destination.
+ Keep them recognizable and useful — mix the destination name with travel
+ vibes (e.g. #ParisVibes, #ExploreRome, #BeachDayBali, #TokyoNights, #HikingPatagonia).
+
+ Return ONLY a comma-separated list of 5 hashtags. No explanations.
+ """;
+
+ var userPrompt =
+ $"""
+ Create 5 fun, catchy hashtags for this destination:
+
+ {text}
+ """;
+
+ var messages = new List
+ {
+ new(ChatRole.System, systemPrompt),
+ new(ChatRole.User, userPrompt)
+ };
+
+ var response = await chatClient.GetResponseAsync(messages, cancellationToken: cancellationToken);
+ var responseText = response.Text ?? string.Empty;
+
+ return responseText
+ .Split([',', '\n', '\r'], StringSplitOptions.RemoveEmptyEntries | StringSplitOptions.TrimEntries)
+ .Select(tag => tag.TrimStart('#', '-', '•', '*').Trim())
+ .Where(tag => tag.Length > 1 && !tag.Any(char.IsWhiteSpace))
+ .Distinct()
+ .Take(5)
+ .ToList();
+ }
+}
diff --git a/samples/EssentialsAISample/Services/WeatherService.cs b/samples/EssentialsAISample/Services/WeatherService.cs
new file mode 100644
index 000000000..667d4ecea
--- /dev/null
+++ b/samples/EssentialsAISample/Services/WeatherService.cs
@@ -0,0 +1,62 @@
+using System.Text.Json;
+using EssentialsAISample.Models;
+
+namespace EssentialsAISample.Services;
+
+public class WeatherService(HttpClient httpClient)
+{
+ public async Task<(string Icon, string Text)> GetWeatherForecastAsync(double latitude, double longitude, DateOnly date)
+ {
+ try
+ {
+ var url = $"https://api.open-meteo.com/v1/forecast?latitude={latitude.ToString("F4", System.Globalization.CultureInfo.InvariantCulture)}&longitude={longitude.ToString("F4", System.Globalization.CultureInfo.InvariantCulture)}&daily=temperature_2m_mean,weather_code&timezone=auto";
+
+ var response = await httpClient.GetStringAsync(url);
+ var forecast = JsonSerializer.Deserialize(response);
+
+ if (forecast?.Daily == null || forecast.Daily.Time.Count == 0)
+ {
+ return (FluentUI.weather_cloudy_24_regular, "Weather unavailable");
+ }
+
+ // Find the index for the requested date
+ var dateString = date.ToString("yyyy-MM-dd");
+ var index = forecast.Daily.Time.IndexOf(dateString);
+
+ if (index < 0 || index >= forecast.Daily.TemperatureMean.Count)
+ {
+ return (FluentUI.weather_cloudy_24_regular, "Weather unavailable");
+ }
+
+ var temp = forecast.Daily.TemperatureMean[index];
+ var weatherCode = forecast.Daily.WeatherCode[index];
+ var icon = GetWeatherIcon(weatherCode);
+
+ return (icon, $"{temp:F0}°C");
+ }
+ catch
+ {
+ return (FluentUI.weather_cloudy_24_regular, "Weather unavailable");
+ }
+ }
+
+ static string GetWeatherIcon(int code)
+ {
+ return code switch
+ {
+ 0 => FluentUI.weather_sunny_28_regular,
+ 1 or 2 => FluentUI.weather_partly_cloudy_day_24_regular,
+ 3 => FluentUI.weather_cloudy_24_regular,
+ 45 or 48 => FluentUI.weather_fog_24_regular,
+ 51 or 53 or 55 or 56 or 57 => FluentUI.weather_drizzle_24_regular,
+ 61 or 63 or 65 => FluentUI.weather_rain_24_regular,
+ 66 or 67 => FluentUI.weather_rain_24_regular,
+ 71 or 73 or 75 or 77 => FluentUI.weather_snowflake_24_regular,
+ 80 or 81 or 82 => FluentUI.weather_rain_showers_day_24_regular,
+ 85 or 86 => FluentUI.weather_snowflake_24_regular,
+ 95 => FluentUI.weather_thunderstorm_24_regular,
+ 96 or 99 => FluentUI.weather_thunderstorm_24_regular,
+ _ => FluentUI.weather_cloudy_24_regular
+ };
+ }
+}
diff --git a/samples/EssentialsAISample/ViewModels/ChatBubbleViewModel.cs b/samples/EssentialsAISample/ViewModels/ChatBubbleViewModel.cs
new file mode 100644
index 000000000..89c9ac2bd
--- /dev/null
+++ b/samples/EssentialsAISample/ViewModels/ChatBubbleViewModel.cs
@@ -0,0 +1,33 @@
+using CommunityToolkit.Mvvm.ComponentModel;
+using CommunityToolkit.Mvvm.Input;
+
+namespace EssentialsAISample.ViewModels;
+
+public enum ChatBubbleType
+{
+ User,
+ Assistant,
+ ToolCall,
+ ToolResult
+}
+
+public partial class ChatBubbleViewModel : ObservableObject
+{
+ public ChatBubbleType BubbleType { get; init; }
+
+ [ObservableProperty]
+ public partial string Text { get; set; } = string.Empty;
+
+ [ObservableProperty]
+ public partial bool IsStreaming { get; set; }
+
+ [ObservableProperty]
+ public partial bool IsExpanded { get; set; }
+
+ public string? ToolName { get; init; }
+
+ public string? DetailText { get; init; }
+
+ [RelayCommand]
+ void ToggleExpanded() => IsExpanded = !IsExpanded;
+}
diff --git a/samples/EssentialsAISample/ViewModels/ChatViewModel.cs b/samples/EssentialsAISample/ViewModels/ChatViewModel.cs
new file mode 100644
index 000000000..bff5a6545
--- /dev/null
+++ b/samples/EssentialsAISample/ViewModels/ChatViewModel.cs
@@ -0,0 +1,236 @@
+using System.Collections.ObjectModel;
+using System.Text.Json;
+using CommunityToolkit.Mvvm.ComponentModel;
+using EssentialsAISample.Services;
+using Microsoft.Extensions.AI;
+
+namespace EssentialsAISample.ViewModels;
+
+public partial class ChatViewModel : ObservableObject
+{
+ readonly ChatService _chatService;
+ readonly List _conversationHistory = [];
+ CancellationTokenSource? _cts;
+
+ public ChatViewModel(ChatService chatService)
+ {
+ _chatService = chatService;
+ }
+
+ public ChatService ChatService => _chatService;
+
+ public ObservableCollection Messages { get; } = [];
+
+ [ObservableProperty]
+ public partial string MessageText { get; set; } = string.Empty;
+
+ [ObservableProperty]
+ public partial bool IsOverlayVisible { get; set; }
+
+ [ObservableProperty]
+ public partial bool IsSending { get; set; }
+
+ public Command SendMessageCommand => field ??= new Command(
+ async () => await SendMessageAsync(),
+ () => !string.IsNullOrWhiteSpace(MessageText) && !IsSending);
+
+ public Command ToggleOverlayCommand => field ??= new Command(
+ () => IsOverlayVisible = !IsOverlayVisible);
+
+ public Command NewChatCommand => field ??= new Command(NewChat);
+
+ void NewChat()
+ {
+ _cts?.Cancel();
+ _cts?.Dispose();
+ _cts = null;
+ Messages.Clear();
+ _conversationHistory.Clear();
+ MessageText = string.Empty;
+ IsSending = false;
+ }
+
+ partial void OnMessageTextChanged(string value)
+ {
+ SendMessageCommand.ChangeCanExecute();
+ }
+
+ partial void OnIsSendingChanged(bool value)
+ {
+ SendMessageCommand.ChangeCanExecute();
+ }
+
+ async Task SendMessageAsync()
+ {
+ var userText = MessageText.Trim();
+ if (string.IsNullOrEmpty(userText))
+ return;
+
+ IsSending = true;
+ MessageText = string.Empty;
+
+ // Add user bubble
+ Messages.Add(new ChatBubbleViewModel
+ {
+ BubbleType = ChatBubbleType.User,
+ Text = userText
+ });
+
+ // Add to conversation history
+ _conversationHistory.Add(new ChatMessage(ChatRole.User, userText));
+
+ // Prepare streaming
+ _cts = new CancellationTokenSource();
+ ChatBubbleViewModel? assistantBubble = null;
+ ChatMessage? textMessage = null; // Accumulates text deltas into one assistant message
+ var seenCallIds = new HashSet();
+ var callIdToToolName = new Dictionary(); // Cache tool names for result bubbles
+
+ // Show "Thinking..." placeholder immediately
+ var thinkingBubble = new ChatBubbleViewModel
+ {
+ BubbleType = ChatBubbleType.Assistant,
+ Text = "Thinking...",
+ IsStreaming = true
+ };
+ Messages.Add(thinkingBubble);
+
+ try
+ {
+ await foreach (var update in _chatService.GetStreamingResponseAsync(
+ _conversationHistory, _cts.Token))
+ {
+ foreach (var content in update.Contents)
+ {
+ switch (content)
+ {
+ case TextContent textContent when !string.IsNullOrEmpty(textContent.Text):
+ // Add to history: accumulate all text deltas into one assistant message
+ if (textMessage is null)
+ {
+ textMessage = new ChatMessage(ChatRole.Assistant, [textContent]);
+ _conversationHistory.Add(textMessage);
+ }
+ else
+ {
+ textMessage.Contents.Add(textContent);
+ }
+
+ // Update UI (already on UI thread via await foreach)
+ if (assistantBubble is null)
+ {
+ if (Messages.Contains(thinkingBubble))
+ {
+ thinkingBubble.Text = textContent.Text;
+ assistantBubble = thinkingBubble;
+ }
+ else
+ {
+ assistantBubble = new ChatBubbleViewModel
+ {
+ BubbleType = ChatBubbleType.Assistant,
+ Text = textContent.Text,
+ IsStreaming = true
+ };
+ Messages.Add(assistantBubble);
+ }
+ }
+ else
+ {
+ assistantBubble.Text += textContent.Text;
+ }
+ break;
+
+ case FunctionCallContent functionCall:
+ if (!seenCallIds.Add($"call:{functionCall.CallId}"))
+ break;
+
+ // Cache tool name for the result bubble
+ if (functionCall.CallId is not null)
+ callIdToToolName[functionCall.CallId] = functionCall.Name;
+
+ // Add to history immediately, preserving stream order
+ _conversationHistory.Add(new ChatMessage(ChatRole.Assistant, [functionCall]));
+ textMessage = null; // Next text starts a new message
+
+ // Update UI: always remove pre-tool bubble (thinking or partial text)
+ if (assistantBubble is not null)
+ {
+ Messages.Remove(assistantBubble);
+ assistantBubble = null;
+ }
+ else
+ {
+ Messages.Remove(thinkingBubble);
+ }
+
+ var argsJson = functionCall.Arguments is not null
+ ? JsonSerializer.Serialize(functionCall.Arguments, new JsonSerializerOptions { WriteIndented = true })
+ : "{}";
+
+ Messages.Add(new ChatBubbleViewModel
+ {
+ BubbleType = ChatBubbleType.ToolCall,
+ Text = $"🔧 Called {functionCall.Name}",
+ ToolName = functionCall.Name,
+ DetailText = argsJson
+ });
+ break;
+
+ case FunctionResultContent functionResult:
+ if (!seenCallIds.Add($"result:{functionResult.CallId}"))
+ break;
+
+ // Add to history immediately, preserving stream order
+ _conversationHistory.Add(new ChatMessage(ChatRole.Tool, [functionResult]));
+
+ // Update UI — use cached tool name instead of raw CallId
+ var resultText = functionResult.Result?.ToString() ?? "(no result)";
+ var toolName = (functionResult.CallId is not null &&
+ callIdToToolName.TryGetValue(functionResult.CallId, out var cachedName))
+ ? cachedName
+ : "tool";
+
+ Messages.Add(new ChatBubbleViewModel
+ {
+ BubbleType = ChatBubbleType.ToolResult,
+ Text = $"📋 {toolName} responded",
+ ToolName = toolName,
+ DetailText = resultText
+ });
+ break;
+ }
+ }
+ }
+
+ if (assistantBubble is { IsStreaming: true })
+ assistantBubble.IsStreaming = false;
+ }
+ catch (OperationCanceledException)
+ {
+ // User cancelled
+ }
+ catch (Exception ex)
+ {
+ Messages.Add(new ChatBubbleViewModel
+ {
+ BubbleType = ChatBubbleType.Assistant,
+ Text = $"⚠️ Error: {ex.Message}"
+ });
+ }
+ finally
+ {
+ // Clean up thinking bubble if it was never replaced
+ if (assistantBubble is null && Messages.Contains(thinkingBubble))
+ Messages.Remove(thinkingBubble);
+
+ // Stop streaming indicator on any remaining bubble
+ if (assistantBubble is { IsStreaming: true })
+ assistantBubble.IsStreaming = false;
+
+ IsSending = false;
+ _cts?.Dispose();
+ _cts = null;
+ }
+ }
+}
diff --git a/samples/EssentialsAISample/ViewModels/DayPlanViewModel.cs b/samples/EssentialsAISample/ViewModels/DayPlanViewModel.cs
new file mode 100644
index 000000000..5326f94ba
--- /dev/null
+++ b/samples/EssentialsAISample/ViewModels/DayPlanViewModel.cs
@@ -0,0 +1,25 @@
+using CommunityToolkit.Mvvm.ComponentModel;
+using EssentialsAISample.Models;
+
+namespace EssentialsAISample.ViewModels;
+
+public partial class DayPlanViewModel(DayPlan dayPlan, Landmark landmark, DateOnly date) : ObservableObject
+{
+ public string Title => dayPlan.Title;
+
+ public string Subtitle => dayPlan.Subtitle;
+
+ public string Destination => dayPlan.Destination;
+
+ public List Activities => dayPlan.Activities;
+
+ public Landmark Landmark { get; } = landmark;
+
+ public DateOnly Date { get; } = date;
+
+ [ObservableProperty]
+ public partial string WeatherForecast { get; set; } = "Weather unavailable";
+
+ [ObservableProperty]
+ public partial string WeatherIcon { get; set; } = FluentUI.weather_cloudy_24_regular;
+}
diff --git a/samples/EssentialsAISample/ViewModels/ItineraryViewModel.cs b/samples/EssentialsAISample/ViewModels/ItineraryViewModel.cs
new file mode 100644
index 000000000..53a2daeff
--- /dev/null
+++ b/samples/EssentialsAISample/ViewModels/ItineraryViewModel.cs
@@ -0,0 +1,30 @@
+using System.Collections.ObjectModel;
+using CommunityToolkit.Mvvm.ComponentModel;
+using EssentialsAISample.Models;
+
+namespace EssentialsAISample.ViewModels;
+
+public partial class ItineraryViewModel(Itinerary itinerary, Landmark landmark) : ObservableObject
+{
+ public string Title => itinerary.Title;
+
+ public string Description => itinerary.Description;
+
+ public string Rationale => itinerary.Rationale;
+
+ public ObservableCollection Days =>
+ field ??= CreateDays();
+
+ private ObservableCollection CreateDays()
+ {
+ var startDate = DateOnly.FromDateTime(DateTime.Today);
+
+ var list = new ObservableCollection();
+ for (int i = 0; i < itinerary.Days.Count; i++)
+ {
+ list.Add(new DayPlanViewModel(itinerary.Days[i], landmark, startDate.AddDays(i)));
+ }
+
+ return list;
+ }
+}
diff --git a/samples/EssentialsAISample/ViewModels/LandmarkDetailViewModel.cs b/samples/EssentialsAISample/ViewModels/LandmarkDetailViewModel.cs
new file mode 100644
index 000000000..f121f0c0e
--- /dev/null
+++ b/samples/EssentialsAISample/ViewModels/LandmarkDetailViewModel.cs
@@ -0,0 +1,162 @@
+using System.Collections.ObjectModel;
+using System.Diagnostics;
+using CommunityToolkit.Mvvm.ComponentModel;
+using EssentialsAISample.Models;
+using EssentialsAISample.Services;
+using Microsoft.Extensions.AI;
+
+namespace EssentialsAISample.ViewModels;
+
+[QueryProperty(nameof(Landmark), "Landmark")]
+[QueryProperty(nameof(RecentSearches), "RecentSearches")]
+public partial class LandmarkDetailViewModel(
+ DataService dataService,
+ TaggingService taggingService,
+ WeatherService weatherService,
+ IChatClient chatClient) : ObservableObject
+{
+ CancellationTokenSource _cts = new();
+ bool _initialized;
+
+ [ObservableProperty]
+ public partial Landmark Landmark { get; set; }
+
+ [ObservableProperty]
+ public partial List? RecentSearches { get; set; }
+
+ [ObservableProperty]
+ public partial string? AiTravelTip { get; set; }
+
+ [ObservableProperty]
+ public partial bool IsLoadingTip { get; set; }
+
+ [ObservableProperty]
+ public partial string? CurrentWeather { get; set; }
+
+ [ObservableProperty]
+ public partial string? WeatherIcon { get; set; }
+
+ [ObservableProperty]
+ public partial string SelectedLanguage { get; set; } = "English";
+
+ public string[] AvailableLanguages => [
+ "English", "Chinese", "French", "German",
+ "Indonesian", "Italian", "Japanese", "Korean",
+ "Portuguese", "Spanish"
+ ];
+
+ public ObservableCollection SimilarDestinations => field ??= [];
+
+ public ObservableCollection Tags => field ??= [];
+
+ public async Task InitializeAsync()
+ {
+ if (Landmark is null || _initialized)
+ return;
+
+ _initialized = true;
+ _cts = new CancellationTokenSource();
+ var ct = _cts.Token;
+
+ await Task.WhenAll(
+ LoadSimilarDestinationsAsync(ct),
+ GenerateTagsAsync(ct),
+ GenerateAiTravelTipAsync(ct),
+ LoadWeatherAsync(ct));
+ }
+
+ public void Cancel() => _cts.Cancel();
+
+ async Task LoadWeatherAsync(CancellationToken ct)
+ {
+ try
+ {
+ var (icon, text) = await weatherService.GetWeatherForecastAsync(
+ Landmark.Latitude, Landmark.Longitude, DateOnly.FromDateTime(DateTime.Now));
+ WeatherIcon = icon;
+ CurrentWeather = text;
+ }
+ catch
+ {
+ WeatherIcon = FluentUI.weather_cloudy_24_regular;
+ CurrentWeather = "Weather unavailable";
+ }
+ }
+
+ async Task LoadSimilarDestinationsAsync(CancellationToken ct)
+ {
+ try
+ {
+ var results = await dataService.SearchLandmarksAsync(
+ $"{Landmark.Name} {Landmark.ShortDescription}", 8);
+
+ if (ct.IsCancellationRequested) return;
+
+ SimilarDestinations.Clear();
+ foreach (var landmark in results.Where(l => l.Id != Landmark.Id).DistinctBy(l => l.Id).Take(3))
+ SimilarDestinations.Add(landmark);
+ }
+ catch (Exception ex)
+ {
+ Debug.WriteLine($"Similar destinations failed: {ex.Message}");
+ }
+ }
+
+ async Task GenerateTagsAsync(CancellationToken ct)
+ {
+ try
+ {
+ var tags = await taggingService.GenerateTagsAsync(Landmark.Description, ct);
+ if (ct.IsCancellationRequested) return;
+
+ Tags.Clear();
+ foreach (var tag in tags)
+ {
+ if (ct.IsCancellationRequested) break;
+ Tags.Add(tag);
+ await Task.Delay(80, ct);
+ }
+ }
+ catch (OperationCanceledException) { }
+ catch (Exception ex)
+ {
+ Debug.WriteLine($"Tag generation failed: {ex.Message}");
+ }
+ }
+
+ async Task GenerateAiTravelTipAsync(CancellationToken ct)
+ {
+ IsLoadingTip = true;
+ try
+ {
+ var searchContext = RecentSearches is { Count: > 0 }
+ ? $"The traveler recently searched for: {string.Join(", ", RecentSearches)}. "
+ : "";
+
+ var prompt = $"""
+ {searchContext}Write a brief, engaging 2-3 sentence travel tip for someone visiting {Landmark.Name} ({Landmark.Continent}).
+ Mention the best time to visit and one must-do activity. Be warm and inviting.
+ """;
+
+ var messages = new List
+ {
+ new(ChatRole.System, "You are a friendly travel guide who gives concise, helpful tips."),
+ new(ChatRole.User, prompt)
+ };
+
+ var response = await chatClient.GetResponseAsync(messages, new ChatOptions { Temperature = 0.75f }, ct);
+ if (!ct.IsCancellationRequested)
+ AiTravelTip = response.Text;
+ }
+ catch (OperationCanceledException) { }
+ catch (Exception ex)
+ {
+ Debug.WriteLine($"AI travel tip failed: {ex.Message}");
+ AiTravelTip = null;
+ }
+ finally
+ {
+ IsLoadingTip = false;
+ }
+ }
+}
diff --git a/samples/EssentialsAISample/ViewModels/LandmarksViewModel.cs b/samples/EssentialsAISample/ViewModels/LandmarksViewModel.cs
new file mode 100644
index 000000000..d47726e10
--- /dev/null
+++ b/samples/EssentialsAISample/ViewModels/LandmarksViewModel.cs
@@ -0,0 +1,157 @@
+using System.Collections.ObjectModel;
+using CommunityToolkit.Mvvm.ComponentModel;
+using EssentialsAISample.Models;
+using EssentialsAISample.Services;
+
+namespace EssentialsAISample.ViewModels;
+
+public record ContinentGroup(string Name, List Landmarks);
+
+public partial class LandmarksViewModel(
+ DataService dataService,
+ IDispatcher dispatcher) : ObservableObject
+{
+ CancellationTokenSource? _searchCts;
+ Timer? _debounceTimer;
+
+ [ObservableProperty]
+ public partial Landmark? FeaturedLandmark { get; private set; }
+
+ [ObservableProperty]
+ public partial bool IsLoading { get; set; }
+
+ [ObservableProperty]
+ public partial bool IsGeneratingEmbeddings { get; set; }
+
+ [ObservableProperty]
+ public partial double EmbeddingProgress { get; set; }
+
+ [ObservableProperty]
+ public partial string? EmbeddingStatusText { get; set; }
+
+ [ObservableProperty]
+ public partial string? SearchQuery { get; set; }
+
+ public bool IsSearching => !string.IsNullOrWhiteSpace(SearchQuery);
+
+ /// Recent search queries for contextual AI descriptions.
+ public List RecentSearches { get; } = [];
+
+ /// All continent groups (unfiltered).
+ List _allGroups = [];
+
+ public void CancelPendingSearch()
+ {
+ _debounceTimer?.Dispose();
+ _debounceTimer = null;
+ _searchCts?.Cancel();
+ }
+
+ public ObservableCollection ContinentGroups => field ??= [];
+
+ partial void OnSearchQueryChanged(string? value)
+ {
+ OnPropertyChanged(nameof(IsSearching));
+ _debounceTimer?.Dispose();
+ _debounceTimer = new Timer(_ => dispatcher.Dispatch(() => _ = FilterLandmarksAsync(value)), null, 300, Timeout.Infinite);
+ }
+
+ public async Task InitializeAsync()
+ {
+ if (IsLoading || _allGroups.Count > 0)
+ return;
+
+ await LoadLandmarksAsync();
+ await WaitForEmbeddingsAsync();
+ }
+
+ async Task FilterLandmarksAsync(string? query)
+ {
+ _searchCts?.Cancel();
+ _searchCts = new CancellationTokenSource();
+ var ct = _searchCts.Token;
+
+ if (string.IsNullOrWhiteSpace(query))
+ {
+ ContinentGroups.Clear();
+ foreach (var group in _allGroups)
+ ContinentGroups.Add(group);
+ return;
+ }
+
+ try
+ {
+ var results = await dataService.SearchLandmarksAsync(query, 15);
+ if (ct.IsCancellationRequested) return;
+
+ var matchedIds = results.DistinctBy(l => l.Id).Select(l => l.Id).ToHashSet();
+
+ if (query.Length > 2 && !RecentSearches.Contains(query))
+ {
+ RecentSearches.Add(query);
+ if (RecentSearches.Count > 5)
+ RecentSearches.RemoveAt(0);
+ }
+
+ ContinentGroups.Clear();
+ foreach (var group in _allGroups)
+ {
+ var filtered = group.Landmarks.Where(l => matchedIds.Contains(l.Id)).ToList();
+ if (filtered.Count > 0)
+ ContinentGroups.Add(new ContinentGroup(group.Name, filtered));
+ }
+ }
+ catch (OperationCanceledException) { }
+ }
+
+ private async Task LoadLandmarksAsync()
+ {
+ IsLoading = true;
+ try
+ {
+ FeaturedLandmark = await dataService.GetFeaturedLandmarkAsync();
+
+ _allGroups.Clear();
+ ContinentGroups.Clear();
+
+ var landmarksByContinent = await dataService.GetLandmarksByContinentAsync();
+ foreach (var (continent, landmarks) in landmarksByContinent.OrderBy(kvp => kvp.Key))
+ {
+ var group = new ContinentGroup(continent, [.. landmarks.OrderBy(l => l.Name)]);
+ _allGroups.Add(group);
+ ContinentGroups.Add(group);
+ }
+ }
+ finally
+ {
+ IsLoading = false;
+ }
+ }
+
+ private async Task WaitForEmbeddingsAsync()
+ {
+ IsGeneratingEmbeddings = true;
+ EmbeddingStatusText = "Generating search embeddings…";
+ EmbeddingProgress = 0;
+
+ dataService.EmbeddingProgressChanged += OnEmbeddingProgress;
+ try
+ {
+ await dataService.WaitUntilReadyAsync();
+ }
+ finally
+ {
+ dataService.EmbeddingProgressChanged -= OnEmbeddingProgress;
+ IsGeneratingEmbeddings = false;
+ }
+ }
+
+ private void OnEmbeddingProgress(int current, int total)
+ {
+ dispatcher.Dispatch(() =>
+ {
+ EmbeddingProgress = (double)current / total;
+ EmbeddingStatusText = $"Generating search embeddings… {current}/{total}";
+ });
+ }
+}
diff --git a/samples/EssentialsAISample/ViewModels/TripPlanningViewModel.cs b/samples/EssentialsAISample/ViewModels/TripPlanningViewModel.cs
new file mode 100644
index 000000000..82d7448b7
--- /dev/null
+++ b/samples/EssentialsAISample/ViewModels/TripPlanningViewModel.cs
@@ -0,0 +1,151 @@
+using CommunityToolkit.Mvvm.ComponentModel;
+using EssentialsAISample.Models;
+using EssentialsAISample.Services;
+
+namespace EssentialsAISample.ViewModels;
+
+[QueryProperty(nameof(Landmark), "Landmark")]
+[QueryProperty(nameof(Language), "Language")]
+public partial class TripPlanningViewModel(
+ ItineraryService itineraryService,
+ WeatherService weatherService,
+ IDispatcher dispatcher)
+ : ObservableObject
+{
+ public enum TripPlanningState
+ {
+ Generating,
+ Complete,
+ Error
+ }
+
+ private CancellationTokenSource _cancellationTokenSource = new();
+
+ [ObservableProperty]
+ public partial Landmark Landmark { get; set; }
+
+ [ObservableProperty]
+ public partial string Language { get; set; } = "English";
+
+ [ObservableProperty]
+ [NotifyPropertyChangedFor(nameof(IsGeneratingState))]
+ [NotifyPropertyChangedFor(nameof(HasItinerary))]
+ public partial ItineraryViewModel? Itinerary { get; set; }
+
+ [ObservableProperty]
+ [NotifyPropertyChangedFor(nameof(IsGeneratingState))]
+ [NotifyPropertyChangedFor(nameof(HasItinerary))]
+ [NotifyPropertyChangedFor(nameof(IsErrorState))]
+ [NotifyPropertyChangedFor(nameof(IsNotErrorState))]
+ public partial TripPlanningState CurrentState { get; set; } = TripPlanningState.Generating;
+
+ [ObservableProperty]
+ public partial string? ErrorMessage { get; set; }
+
+ /// Oldest status message (most faded, opacity 0.3).
+ [ObservableProperty]
+ public partial string? Status1 { get; set; }
+
+ /// Middle status message (opacity 0.6).
+ [ObservableProperty]
+ public partial string? Status2 { get; set; }
+
+ /// Newest status message (solid, opacity 1.0).
+ [ObservableProperty]
+ public partial string? Status3 { get; set; }
+
+ public bool IsGeneratingState => CurrentState == TripPlanningState.Generating && Itinerary is null;
+ public bool HasItinerary => CurrentState == TripPlanningState.Complete || Itinerary is not null;
+ public bool IsErrorState => CurrentState == TripPlanningState.Error;
+ public bool IsNotErrorState => CurrentState != TripPlanningState.Error;
+
+ public async Task InitializeAsync()
+ {
+ if (Landmark is null)
+ return;
+
+ await RequestItineraryAsync();
+ }
+
+ public void Cancel()
+ {
+ _cancellationTokenSource.Cancel();
+ }
+
+ private async Task RequestItineraryAsync()
+ {
+ _cancellationTokenSource.Cancel();
+ _cancellationTokenSource = new CancellationTokenSource();
+ var cancellationToken = _cancellationTokenSource.Token;
+
+ CurrentState = TripPlanningState.Generating;
+ ErrorMessage = string.Empty;
+ Itinerary = null;
+ Status1 = null;
+ Status2 = null;
+ Status3 = null;
+
+ try
+ {
+ await Task.Run(() => BuildItineraryAsync(cancellationToken), cancellationToken);
+
+ if (Itinerary is not null && !cancellationToken.IsCancellationRequested)
+ {
+ foreach (var dayVm in Itinerary.Days)
+ {
+ if (cancellationToken.IsCancellationRequested)
+ break;
+
+ var (icon, text) = await weatherService.GetWeatherForecastAsync(
+ Landmark.Latitude,
+ Landmark.Longitude,
+ dayVm.Date);
+ dayVm.WeatherIcon = icon;
+ dayVm.WeatherForecast = text;
+ }
+ }
+
+ if (!cancellationToken.IsCancellationRequested)
+ CurrentState = TripPlanningState.Complete;
+ }
+ catch (OperationCanceledException) { }
+ catch (Exception ex)
+ {
+ CurrentState = TripPlanningState.Error;
+ ErrorMessage = ex.Message;
+ }
+ }
+
+ private async Task BuildItineraryAsync(CancellationToken cancellationToken)
+ {
+ var userRequest = Language.Equals("English", StringComparison.OrdinalIgnoreCase)
+ ? $"Create a {3}-day itinerary for {Landmark.Name}"
+ : $"Create a {3}-day itinerary for {Landmark.Name} in {Language}";
+
+ await foreach (var update in itineraryService.StreamItineraryAsync(userRequest, cancellationToken))
+ {
+ if (cancellationToken.IsCancellationRequested)
+ break;
+
+ if (update.StatusMessage is not null)
+ {
+ dispatcher.Dispatch(() =>
+ {
+ if (cancellationToken.IsCancellationRequested) return;
+ Status1 = Status2;
+ Status2 = Status3;
+ Status3 = update.StatusMessage;
+ });
+ }
+
+ if (update.PartialItinerary is not null)
+ {
+ dispatcher.Dispatch(() =>
+ {
+ if (cancellationToken.IsCancellationRequested) return;
+ Itinerary = new ItineraryViewModel(update.PartialItinerary, Landmark);
+ });
+ }
+ }
+ }
+}
diff --git a/samples/EssentialsAISample/Views/ChatBubbleTemplateSelector.cs b/samples/EssentialsAISample/Views/ChatBubbleTemplateSelector.cs
new file mode 100644
index 000000000..92d24983e
--- /dev/null
+++ b/samples/EssentialsAISample/Views/ChatBubbleTemplateSelector.cs
@@ -0,0 +1,27 @@
+using EssentialsAISample.ViewModels;
+
+namespace EssentialsAISample.Views;
+
+public class ChatBubbleTemplateSelector : DataTemplateSelector
+{
+ public DataTemplate? UserTemplate { get; set; }
+ public DataTemplate? AssistantTemplate { get; set; }
+ public DataTemplate? ToolCallTemplate { get; set; }
+ public DataTemplate? ToolResultTemplate { get; set; }
+
+ protected override DataTemplate? OnSelectTemplate(object item, BindableObject container)
+ {
+ if (item is ChatBubbleViewModel bubble)
+ {
+ return bubble.BubbleType switch
+ {
+ ChatBubbleType.User => UserTemplate,
+ ChatBubbleType.Assistant => AssistantTemplate,
+ ChatBubbleType.ToolCall => ToolCallTemplate,
+ ChatBubbleType.ToolResult => ToolResultTemplate,
+ _ => AssistantTemplate
+ };
+ }
+ return AssistantTemplate;
+ }
+}
diff --git a/samples/EssentialsAISample/Views/ChatOverlayView.xaml b/samples/EssentialsAISample/Views/ChatOverlayView.xaml
new file mode 100644
index 000000000..633bcf1bf
--- /dev/null
+++ b/samples/EssentialsAISample/Views/ChatOverlayView.xaml
@@ -0,0 +1,268 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/samples/EssentialsAISample/Views/ChatOverlayView.xaml.cs b/samples/EssentialsAISample/Views/ChatOverlayView.xaml.cs
new file mode 100644
index 000000000..433e8a432
--- /dev/null
+++ b/samples/EssentialsAISample/Views/ChatOverlayView.xaml.cs
@@ -0,0 +1,86 @@
+using System.Collections.Specialized;
+using EssentialsAISample.ViewModels;
+
+namespace EssentialsAISample.Views;
+
+public partial class ChatOverlayView : ContentView
+{
+ ChatViewModel? _viewModel;
+
+ public ChatOverlayView()
+ {
+ InitializeComponent();
+ SizeChanged += (s, e) =>
+ {
+ if (Width > 0)
+ ChatPanel.WidthRequest = Math.Min(Width - 16, 500);
+ if (Height > 0)
+ ChatPanel.HeightRequest = Math.Min(Height - 16, 800);
+ };
+ }
+
+ public void Initialize(ChatViewModel viewModel)
+ {
+ // Unsubscribe from previous VM to avoid leaking this view via the singleton VM's event
+ if (_viewModel is not null)
+ _viewModel.Messages.CollectionChanged -= OnMessagesChanged;
+
+ _viewModel = viewModel;
+ BindingContext = viewModel;
+ viewModel.Messages.CollectionChanged += OnMessagesChanged;
+ }
+
+ void OnMessagesChanged(object? sender, NotifyCollectionChangedEventArgs e)
+ {
+ if (e.Action == NotifyCollectionChangedAction.Add && _viewModel is not null && _viewModel.Messages.Count > 0)
+ {
+ // Small delay to let CollectionView lay out the new item before scrolling
+ Dispatcher.DispatchDelayed(TimeSpan.FromMilliseconds(50), () =>
+ {
+ if (_viewModel?.Messages.Count > 0)
+ MessagesView.ScrollTo(_viewModel.Messages.Count - 1, position: ScrollToPosition.MakeVisible, animate: false);
+ });
+ }
+ }
+
+ async void OnBackdropTapped(object? sender, TappedEventArgs e) => await Hide();
+
+ async void OnCloseTapped(object? sender, EventArgs e) => await Hide();
+
+ public event EventHandler? Closed;
+
+ public async Task Show()
+ {
+ // Re-subscribe in case Hide() previously unsubscribed
+ if (_viewModel is not null)
+ {
+ _viewModel.Messages.CollectionChanged -= OnMessagesChanged;
+ _viewModel.Messages.CollectionChanged += OnMessagesChanged;
+ }
+
+ // Ensure panel starts offscreen at its actual height
+ ChatPanel.TranslationY = ChatPanel.Height > 0 ? ChatPanel.Height : 1000;
+
+ var backdropFade = Backdrop.FadeToAsync(0.4, 250, Easing.CubicOut);
+ var panelSlide = ChatPanel.TranslateToAsync(0, 0, 300, Easing.CubicOut);
+ await Task.WhenAll(backdropFade, panelSlide);
+
+ MessageEntry.Focus();
+ }
+
+ public async Task Hide()
+ {
+ // Unsubscribe to prevent leaking this view via the singleton VM's event
+ if (_viewModel is not null)
+ _viewModel.Messages.CollectionChanged -= OnMessagesChanged;
+
+ MessageEntry.Unfocus();
+
+ var targetY = ChatPanel.Height > 0 ? ChatPanel.Height : 700;
+ var backdropFade = Backdrop.FadeToAsync(0, 200, Easing.CubicIn);
+ var panelSlide = ChatPanel.TranslateToAsync(0, targetY, 250, Easing.CubicIn);
+ await Task.WhenAll(backdropFade, panelSlide);
+
+ Closed?.Invoke(this, EventArgs.Empty);
+ }
+}
diff --git a/samples/EssentialsAISample/Views/Itinerary/ActivityListView.xaml b/samples/EssentialsAISample/Views/Itinerary/ActivityListView.xaml
new file mode 100644
index 000000000..80c7bc088
--- /dev/null
+++ b/samples/EssentialsAISample/Views/Itinerary/ActivityListView.xaml
@@ -0,0 +1,35 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/samples/EssentialsAISample/Views/Itinerary/ActivityListView.xaml.cs b/samples/EssentialsAISample/Views/Itinerary/ActivityListView.xaml.cs
new file mode 100644
index 000000000..979532cbe
--- /dev/null
+++ b/samples/EssentialsAISample/Views/Itinerary/ActivityListView.xaml.cs
@@ -0,0 +1,9 @@
+namespace EssentialsAISample.Views.Itinerary;
+
+public partial class ActivityListView : ContentView
+{
+ public ActivityListView()
+ {
+ InitializeComponent();
+ }
+}
diff --git a/samples/EssentialsAISample/Views/Itinerary/DayView.xaml b/samples/EssentialsAISample/Views/Itinerary/DayView.xaml
new file mode 100644
index 000000000..001edc863
--- /dev/null
+++ b/samples/EssentialsAISample/Views/Itinerary/DayView.xaml
@@ -0,0 +1,66 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/samples/EssentialsAISample/Views/Itinerary/DayView.xaml.cs b/samples/EssentialsAISample/Views/Itinerary/DayView.xaml.cs
new file mode 100644
index 000000000..ffdf41dd8
--- /dev/null
+++ b/samples/EssentialsAISample/Views/Itinerary/DayView.xaml.cs
@@ -0,0 +1,9 @@
+namespace EssentialsAISample.Views.Itinerary;
+
+public partial class DayView : ContentView
+{
+ public DayView()
+ {
+ InitializeComponent();
+ }
+}
diff --git a/samples/EssentialsAISample/Views/Itinerary/ItineraryPlanningView.xaml b/samples/EssentialsAISample/Views/Itinerary/ItineraryPlanningView.xaml
new file mode 100644
index 000000000..c0f51450e
--- /dev/null
+++ b/samples/EssentialsAISample/Views/Itinerary/ItineraryPlanningView.xaml
@@ -0,0 +1,44 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/samples/EssentialsAISample/Views/Itinerary/ItineraryPlanningView.xaml.cs b/samples/EssentialsAISample/Views/Itinerary/ItineraryPlanningView.xaml.cs
new file mode 100644
index 000000000..726cb427b
--- /dev/null
+++ b/samples/EssentialsAISample/Views/Itinerary/ItineraryPlanningView.xaml.cs
@@ -0,0 +1,9 @@
+namespace EssentialsAISample.Views.Itinerary;
+
+public partial class ItineraryPlanningView : ContentView
+{
+ public ItineraryPlanningView()
+ {
+ InitializeComponent();
+ }
+}
diff --git a/samples/EssentialsAISample/Views/Itinerary/ItineraryView.xaml b/samples/EssentialsAISample/Views/Itinerary/ItineraryView.xaml
new file mode 100644
index 000000000..0dfbd0b77
--- /dev/null
+++ b/samples/EssentialsAISample/Views/Itinerary/ItineraryView.xaml
@@ -0,0 +1,38 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/samples/EssentialsAISample/Views/Itinerary/ItineraryView.xaml.cs b/samples/EssentialsAISample/Views/Itinerary/ItineraryView.xaml.cs
new file mode 100644
index 000000000..8621db035
--- /dev/null
+++ b/samples/EssentialsAISample/Views/Itinerary/ItineraryView.xaml.cs
@@ -0,0 +1,9 @@
+namespace EssentialsAISample.Views.Itinerary;
+
+public partial class ItineraryView : ContentView
+{
+ public ItineraryView()
+ {
+ InitializeComponent();
+ }
+}
diff --git a/samples/EssentialsAISample/Views/Itinerary/LandmarkDetailMapView.xaml b/samples/EssentialsAISample/Views/Itinerary/LandmarkDetailMapView.xaml
new file mode 100644
index 000000000..30d5f32f7
--- /dev/null
+++ b/samples/EssentialsAISample/Views/Itinerary/LandmarkDetailMapView.xaml
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/samples/EssentialsAISample/Views/Itinerary/LandmarkDetailMapView.xaml.cs b/samples/EssentialsAISample/Views/Itinerary/LandmarkDetailMapView.xaml.cs
new file mode 100644
index 000000000..032e56fe4
--- /dev/null
+++ b/samples/EssentialsAISample/Views/Itinerary/LandmarkDetailMapView.xaml.cs
@@ -0,0 +1,30 @@
+using EssentialsAISample.Models;
+using Microsoft.Maui.Controls.Maps;
+using Microsoft.Maui.Maps;
+
+namespace EssentialsAISample.Views.Itinerary;
+
+public partial class LandmarkDetailMapView : ContentView
+{
+ public LandmarkDetailMapView()
+ {
+ InitializeComponent();
+ }
+
+ protected override void OnBindingContextChanged()
+ {
+ base.OnBindingContextChanged();
+
+ if (BindingContext is Landmark landmark)
+ {
+ // Set ItemsSource to a single-item collection for the pin
+ map.ItemsSource = new[] { landmark };
+
+ // Move map to show the landmark
+ var center = new Location(landmark.Latitude, landmark.Longitude);
+ var span = new MapSpan(center, landmark.Span, landmark.Span);
+
+ map.MoveToRegion(span);
+ }
+ }
+}
diff --git a/samples/EssentialsAISample/Views/Itinerary/MessageView.xaml b/samples/EssentialsAISample/Views/Itinerary/MessageView.xaml
new file mode 100644
index 000000000..120a83645
--- /dev/null
+++ b/samples/EssentialsAISample/Views/Itinerary/MessageView.xaml
@@ -0,0 +1,45 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/samples/EssentialsAISample/Views/Itinerary/MessageView.xaml.cs b/samples/EssentialsAISample/Views/Itinerary/MessageView.xaml.cs
new file mode 100644
index 000000000..6f79a67d7
--- /dev/null
+++ b/samples/EssentialsAISample/Views/Itinerary/MessageView.xaml.cs
@@ -0,0 +1,9 @@
+namespace EssentialsAISample.Views.Itinerary;
+
+public partial class MessageView : ContentView
+{
+ public MessageView()
+ {
+ InitializeComponent();
+ }
+}
diff --git a/samples/EssentialsAISample/Views/Landmarks/LandmarkFeaturedItemView.xaml b/samples/EssentialsAISample/Views/Landmarks/LandmarkFeaturedItemView.xaml
new file mode 100644
index 000000000..5c57ba706
--- /dev/null
+++ b/samples/EssentialsAISample/Views/Landmarks/LandmarkFeaturedItemView.xaml
@@ -0,0 +1,36 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/samples/EssentialsAISample/Views/Landmarks/LandmarkFeaturedItemView.xaml.cs b/samples/EssentialsAISample/Views/Landmarks/LandmarkFeaturedItemView.xaml.cs
new file mode 100644
index 000000000..35ca7925c
--- /dev/null
+++ b/samples/EssentialsAISample/Views/Landmarks/LandmarkFeaturedItemView.xaml.cs
@@ -0,0 +1,30 @@
+using EssentialsAISample.Models;
+
+namespace EssentialsAISample.Views.Landmarks;
+
+public partial class LandmarkFeaturedItemView : ContentView
+{
+ public static readonly BindableProperty LandmarkProperty =
+ BindableProperty.Create(nameof(Landmark), typeof(Landmark), typeof(LandmarkFeaturedItemView), null);
+
+ public Landmark? Landmark
+ {
+ get => (Landmark?)GetValue(LandmarkProperty);
+ set => SetValue(LandmarkProperty, value);
+ }
+
+ public event EventHandler? LandmarkTapped;
+
+ public LandmarkFeaturedItemView()
+ {
+ InitializeComponent();
+ }
+
+ private void OnFeaturedLandmarkTapped(object? sender, TappedEventArgs e)
+ {
+ if (Landmark is not null)
+ {
+ LandmarkTapped?.Invoke(this, Landmark);
+ }
+ }
+}
diff --git a/samples/EssentialsAISample/Views/Landmarks/LandmarkHorizontalListView.xaml b/samples/EssentialsAISample/Views/Landmarks/LandmarkHorizontalListView.xaml
new file mode 100644
index 000000000..853adad06
--- /dev/null
+++ b/samples/EssentialsAISample/Views/Landmarks/LandmarkHorizontalListView.xaml
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/samples/EssentialsAISample/Views/Landmarks/LandmarkHorizontalListView.xaml.cs b/samples/EssentialsAISample/Views/Landmarks/LandmarkHorizontalListView.xaml.cs
new file mode 100644
index 000000000..fef5a97f5
--- /dev/null
+++ b/samples/EssentialsAISample/Views/Landmarks/LandmarkHorizontalListView.xaml.cs
@@ -0,0 +1,28 @@
+using System.Collections;
+using EssentialsAISample.Models;
+
+namespace EssentialsAISample.Views.Landmarks;
+
+public partial class LandmarkHorizontalListView : ContentView
+{
+ public static readonly BindableProperty LandmarksProperty =
+ BindableProperty.Create(nameof(Landmarks), typeof(IEnumerable), typeof(LandmarkHorizontalListView), null);
+
+ public IEnumerable? Landmarks
+ {
+ get => (IEnumerable?)GetValue(LandmarksProperty);
+ set => SetValue(LandmarksProperty, value);
+ }
+
+ public event EventHandler? LandmarkTapped;
+
+ public LandmarkHorizontalListView()
+ {
+ InitializeComponent();
+ }
+
+ private void OnLandmarkItemTapped(object? sender, Landmark landmark)
+ {
+ LandmarkTapped?.Invoke(this, landmark);
+ }
+}
diff --git a/samples/EssentialsAISample/Views/Landmarks/LandmarkListItemView.xaml b/samples/EssentialsAISample/Views/Landmarks/LandmarkListItemView.xaml
new file mode 100644
index 000000000..c0a8badd1
--- /dev/null
+++ b/samples/EssentialsAISample/Views/Landmarks/LandmarkListItemView.xaml
@@ -0,0 +1,41 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/samples/EssentialsAISample/Views/Landmarks/LandmarkListItemView.xaml.cs b/samples/EssentialsAISample/Views/Landmarks/LandmarkListItemView.xaml.cs
new file mode 100644
index 000000000..7cd5100ee
--- /dev/null
+++ b/samples/EssentialsAISample/Views/Landmarks/LandmarkListItemView.xaml.cs
@@ -0,0 +1,30 @@
+using EssentialsAISample.Models;
+
+namespace EssentialsAISample.Views.Landmarks;
+
+public partial class LandmarkListItemView : ContentView
+{
+ public static readonly BindableProperty LandmarkProperty =
+ BindableProperty.Create(nameof(Landmark), typeof(Landmark), typeof(LandmarkListItemView), null);
+
+ public Landmark? Landmark
+ {
+ get => (Landmark?)GetValue(LandmarkProperty);
+ set => SetValue(LandmarkProperty, value);
+ }
+
+ public event EventHandler? LandmarkTapped;
+
+ public LandmarkListItemView()
+ {
+ InitializeComponent();
+ }
+
+ private void OnLandmarkTapped(object? sender, TappedEventArgs e)
+ {
+ if (Landmark is not null)
+ {
+ LandmarkTapped?.Invoke(this, Landmark);
+ }
+ }
+}
diff --git a/samples/EssentialsAISample/Views/MarkdownConverter.cs b/samples/EssentialsAISample/Views/MarkdownConverter.cs
new file mode 100644
index 000000000..10b33578d
--- /dev/null
+++ b/samples/EssentialsAISample/Views/MarkdownConverter.cs
@@ -0,0 +1,162 @@
+using System.Globalization;
+using Markdig;
+using Markdig.Syntax;
+using Markdig.Syntax.Inlines;
+
+namespace EssentialsAISample.Views;
+
+///
+/// Converts a markdown string to a FormattedString using Markdig's AST.
+/// Supports bold, italic, code, and renders everything else as plain text.
+///
+public class MarkdownConverter : IValueConverter
+{
+ static readonly MarkdownPipeline s_pipeline = new MarkdownPipelineBuilder()
+ .UseEmphasisExtras()
+ .Build();
+
+ public object? Convert(object? value, Type targetType, object? parameter, CultureInfo culture)
+ {
+ if (value is not string text || string.IsNullOrEmpty(text))
+ return new FormattedString();
+
+ var isDark = Application.Current?.RequestedTheme == AppTheme.Dark;
+ var textColor = isDark ? Color.FromArgb("#E1E1E1") : Color.FromArgb("#1F1F1F");
+ var codeBackground = isDark ? Color.FromArgb("#3D3D3D") : Color.FromArgb("#E8E8E8");
+
+ var formatted = new FormattedString();
+ var doc = Markdown.Parse(text, s_pipeline);
+
+ foreach (var block in doc)
+ {
+ if (formatted.Spans.Count > 0)
+ formatted.Spans.Add(new Span { Text = "\n", TextColor = textColor, FontSize = 14 });
+
+ if (block is ParagraphBlock paragraph && paragraph.Inline is not null)
+ {
+ WalkInlines(paragraph.Inline, formatted, textColor, codeBackground, FontAttributes.None);
+ }
+ else if (block is HeadingBlock heading && heading.Inline is not null)
+ {
+ WalkInlines(heading.Inline, formatted, textColor, codeBackground, FontAttributes.Bold);
+ }
+ else if (block is ListBlock list)
+ {
+ int index = 1;
+ foreach (var item in list)
+ {
+ if (formatted.Spans.Count > 0)
+ formatted.Spans.Add(new Span { Text = "\n", TextColor = textColor, FontSize = 14 });
+
+ var bullet = list.IsOrdered ? $"{index++}. " : "• ";
+ formatted.Spans.Add(new Span { Text = bullet, TextColor = textColor, FontSize = 14 });
+
+ if (item is ListItemBlock listItem)
+ {
+ foreach (var subBlock in listItem)
+ {
+ if (subBlock is ParagraphBlock p && p.Inline is not null)
+ WalkInlines(p.Inline, formatted, textColor, codeBackground, FontAttributes.None);
+ }
+ }
+ }
+ }
+ else
+ {
+ // Fallback: render block as plain text
+ var start = Math.Min(block.Span.Start, text.Length);
+ var length = Math.Min(block.Span.Length, text.Length - start);
+ var plainText = block.GetType().Name == "FencedCodeBlock" || block.GetType().Name == "CodeBlock"
+ ? GetCodeBlockText(block)
+ : text.Substring(start, length);
+ formatted.Spans.Add(new Span
+ {
+ Text = plainText,
+ TextColor = textColor,
+ FontFamily = "Courier New",
+ BackgroundColor = codeBackground,
+ FontSize = 13,
+ });
+ }
+ }
+
+ if (formatted.Spans.Count == 0)
+ formatted.Spans.Add(new Span { Text = text, TextColor = textColor, FontSize = 14 });
+
+ return formatted;
+ }
+
+ public object? ConvertBack(object? value, Type targetType, object? parameter, CultureInfo culture)
+ => throw new NotSupportedException();
+
+ static void WalkInlines(ContainerInline container, FormattedString fs, Color textColor, Color codeBackground, FontAttributes inherited)
+ {
+ foreach (var inline in container)
+ {
+ switch (inline)
+ {
+ case EmphasisInline emphasis:
+ var attrs = inherited;
+ if (emphasis.DelimiterCount == 2 || (emphasis.DelimiterChar == '*' && emphasis.DelimiterCount >= 2))
+ attrs |= FontAttributes.Bold;
+ else
+ attrs |= FontAttributes.Italic;
+ WalkInlines(emphasis, fs, textColor, codeBackground, attrs);
+ break;
+
+ case CodeInline code:
+ fs.Spans.Add(new Span
+ {
+ Text = code.Content,
+ TextColor = textColor,
+ FontFamily = "Courier New",
+ BackgroundColor = codeBackground,
+ FontSize = 13,
+ });
+ break;
+
+ case LinkInline link:
+ // Render link text with underline
+ var linkText = link.FirstChild is LiteralInline lit ? lit.Content.ToString() : link.Url ?? "";
+ fs.Spans.Add(new Span
+ {
+ Text = linkText,
+ TextColor = Color.FromArgb("#512BD4"),
+ TextDecorations = TextDecorations.Underline,
+ FontAttributes = inherited,
+ FontSize = 14,
+ });
+ break;
+
+ case LineBreakInline:
+ fs.Spans.Add(new Span { Text = "\n", TextColor = textColor, FontSize = 14 });
+ break;
+
+ case LiteralInline literal:
+ fs.Spans.Add(new Span
+ {
+ Text = literal.Content.ToString(),
+ TextColor = textColor,
+ FontAttributes = inherited,
+ FontSize = 14,
+ });
+ break;
+
+ default:
+ // Any other inline — render as plain text
+ if (inline is ContainerInline ci)
+ WalkInlines(ci, fs, textColor, codeBackground, inherited);
+ break;
+ }
+ }
+ }
+
+ static string GetCodeBlockText(Block block)
+ {
+ if (block is FencedCodeBlock fenced)
+ return string.Join("\n", fenced.Lines);
+ if (block is CodeBlock code)
+ return string.Join("\n", code.Lines);
+ return block.Span.ToString() ?? "";
+ }
+}
diff --git a/src/AI/AndroidNative/.gitignore b/src/AI/AndroidNative/.gitignore
new file mode 100644
index 000000000..e7c95fca0
--- /dev/null
+++ b/src/AI/AndroidNative/.gitignore
@@ -0,0 +1,10 @@
+# Gradle build output and caches
+.gradle/
+build/
+
+# IntelliJ / Android Studio project files
+.idea/
+*.iml
+
+# Android SDK local configuration (machine-specific, never commit)
+local.properties
diff --git a/src/AI/AppleBindings.targets b/src/AI/AppleBindings.targets
new file mode 100644
index 000000000..38273f538
--- /dev/null
+++ b/src/AI/AppleBindings.targets
@@ -0,0 +1,77 @@
+
+
+
+
+
+
+ <_UsePrebuiltAppleArtifacts Condition="'$(_UsePrebuiltAppleArtifacts)' == '' and (('$(CI)' == 'true' or '$(TF_BUILD)' == 'true') and '$([MSBuild]::IsOSPlatform(OSX))' != 'true')">true
+ <_UsePrebuiltAppleArtifacts Condition="'$(_UsePrebuiltAppleArtifacts)' == ''">false
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <_AppleBindingFilesForIntellisense
+ Include="$(RepoRoot)artifacts\obj\$(ProjectName)\$(Configuration)\$(TargetFramework)\iOS\**\*.cs"
+ Link="Platform\iOS\generated\%(RecursiveDir)%(Filename)%(Extension)"
+ Condition="Exists('$(RepoRoot)artifacts\obj\$(ProjectName)\$(Configuration)\$(TargetFramework)\iOS\ObjCRuntime\Messaging.g.cs')" />
+
+
+
+ <_AppleBindingFilesForIntellisense
+ Include="$(RepoRoot)artifacts\obj\$(ProjectName)\$(Configuration)\$(TargetFramework)\MacCatalyst\**\*.cs"
+ Link="Platform\MacCatalyst\generated\%(RecursiveDir)%(Filename)%(Extension)"
+ Condition="Exists('$(RepoRoot)artifacts\obj\$(ProjectName)\$(Configuration)\$(TargetFramework)\MacCatalyst\ObjCRuntime\Messaging.g.cs')" />
+
+
+
+ <_AppleBindingFilesForIntellisense
+ Include="$(RepoRoot)artifacts\obj\$(ProjectName)\$(Configuration)\$(TargetFramework)\macOS\**\*.cs"
+ Link="Platform\Mac\generated\%(RecursiveDir)%(Filename)%(Extension)"
+ Condition="Exists('$(RepoRoot)artifacts\obj\$(ProjectName)\$(Configuration)\$(TargetFramework)\macOS\ObjCRuntime\Messaging.g.cs')" />
+
+
+
+ <_AppleBindingFilesForIntellisense Include="@(ObjcBindingCoreSource)" />
+
+
+
+
+
+
+
+
+
+
diff --git a/src/AI/AppleNative/ApiDefinitions.cs b/src/AI/AppleNative/ApiDefinitions.cs
new file mode 100644
index 000000000..af2e2c16f
--- /dev/null
+++ b/src/AI/AppleNative/ApiDefinitions.cs
@@ -0,0 +1,291 @@
+#nullable enable
+
+using System;
+using System.Threading.Tasks;
+using Foundation;
+using ObjCRuntime;
+
+namespace Microsoft.Maui.Essentials.AI;
+
+// // typedef void (^AppleIntelligenceLogAction)(NSString * _Nonnull);
+// [Internal] delegate void AppleIntelligenceLogAction(string message);
+//
+// // @interface AppleIntelligenceLogger : NSObject
+// [Introduced(PlatformName.iOS, 26, 0)]
+// [Introduced(PlatformName.MacCatalyst, 26, 0)]
+// [Introduced(PlatformName.MacOSX, 26, 0)]
+// [BaseType(typeof(NSObject))]
+// [Internal]
+// interface AppleIntelligenceLogger
+// {
+// // @property (class, nonatomic, copy) void (^ _Nullable)(NSString * _Nonnull) log;
+// [Static]
+// [NullAllowed, Export("log", ArgumentSemantic.Copy)]
+// AppleIntelligenceLogAction Log { get; set; }
+// }
+
+// @interface AIContentNative : NSObject
+[Introduced(PlatformName.iOS, 26, 0)]
+[Introduced(PlatformName.MacCatalyst, 26, 0)]
+[Introduced(PlatformName.MacOSX, 26, 0)]
+// [Introduced (PlatformName.VisionOS, 26, 0)]
+[BaseType(typeof(NSObject))]
+[Internal]
+interface AIContentNative
+{
+}
+
+[Internal] delegate void AIToolCompletionHandler([NullAllowed] NSString result, [NullAllowed] NSError error);
+
+// This is essential to keep as we need to reference IAIToolNative in this file
+interface IAIToolNative { }
+
+// @protocol AIToolNative
+[Introduced(PlatformName.iOS, 26, 0)]
+[Introduced(PlatformName.MacCatalyst, 26, 0)]
+[Introduced(PlatformName.MacOSX, 26, 0)]
+// [Introduced (PlatformName.VisionOS, 26, 0)]
+[Protocol, Model]
+[BaseType(typeof(NSObject))]
+[Internal]
+interface AIToolNative
+{
+ // @property (nonatomic, readonly, copy) NSString * _Nonnull name;
+ [Abstract]
+ [Export("name")]
+ string Name { get; }
+
+ // @property (nonatomic, readonly, copy) NSString * _Nonnull desc;
+ [Abstract]
+ [Export("desc")]
+ string Desc { get; }
+
+ // @property (nonatomic, readonly, copy) NSString * _Nonnull argumentsSchema;
+ [Abstract]
+ [Export("argumentsSchema")]
+ string ArgumentsSchema { get; }
+
+ // @property (nonatomic, readonly, copy) NSString * _Nonnull outputSchema;
+ [Abstract]
+ [Export("outputSchema")]
+ string OutputSchema { get; }
+
+ // - (void)callWithArguments:(NSString * _Nonnull)arguments completionHandler:(void (^ _Nonnull)(NSString * _Nullable, NSError * _Nullable))completionHandler;
+ [Abstract]
+ [Export("callWithArguments:completionHandler:")]
+ void CallWithArguments(NSString arguments, AIToolCompletionHandler completionHandler);
+}
+
+// @interface CancellationTokenNative : NSObject
+[Introduced(PlatformName.iOS, 26, 0)]
+[Introduced(PlatformName.MacCatalyst, 26, 0)]
+[Introduced(PlatformName.MacOSX, 26, 0)]
+// [Introduced (PlatformName.VisionOS, 26, 0)]
+[BaseType(typeof(NSObject))]
+[DisableDefaultCtor]
+[Internal]
+interface CancellationTokenNative
+{
+ // - (void)cancel;
+ [Export("cancel")]
+ void Cancel();
+
+ // @property (nonatomic, readonly) BOOL isCancelled;
+ [Export("isCancelled")]
+ bool IsCancelled { get; }
+}
+
+[Internal] delegate void OnResponseUpdate(ResponseUpdateNative update);
+
+[Internal] delegate void OnResponseComplete([NullAllowed] ChatResponseNative response, [NullAllowed] NSError error);
+
+// @interface ChatClientNative : NSObject
+[Introduced(PlatformName.iOS, 26, 0)]
+[Introduced(PlatformName.MacCatalyst, 26, 0)]
+[Introduced(PlatformName.MacOSX, 26, 0)]
+// [Introduced (PlatformName.VisionOS, 26, 0)]
+[BaseType(typeof(NSObject))]
+[Internal]
+interface ChatClientNative
+{
+ // - (CancellationTokenNative * _Nullable)streamResponseWithMessages:(NSArray * _Nonnull)messages options:(ChatOptionsNative * _Nullable)options onUpdate:(void (^ _Nonnull)(ResponseUpdateNative * _Nonnull))onUpdate onComplete:(void (^ _Nonnull)(ChatResponseNative * _Nullable, NSError * _Nullable))onComplete SWIFT_WARN_UNUSED_RESULT;
+ [Export("streamResponseWithMessages:options:onUpdate:onComplete:")]
+ [return: NullAllowed]
+ unsafe CancellationTokenNative StreamResponse(ChatMessageNative[] messages, [NullAllowed] ChatOptionsNative options, OnResponseUpdate onUpdate, OnResponseComplete onComplete);
+
+ // - (CancellationTokenNative * _Nullable)getResponseWithMessages:(NSArray * _Nonnull)messages options:(ChatOptionsNative * _Nullable)options onUpdate:(void (^ _Nonnull)(ResponseUpdateNative * _Nonnull))onUpdate onComplete:(void (^ _Nonnull)(ChatResponseNative * _Nullable, NSError * _Nullable))onComplete SWIFT_WARN_UNUSED_RESULT;
+ [Export("getResponseWithMessages:options:onUpdate:onComplete:")]
+ [return: NullAllowed]
+ unsafe CancellationTokenNative GetResponse(ChatMessageNative[] messages, [NullAllowed] ChatOptionsNative options, OnResponseUpdate onUpdate, OnResponseComplete onComplete);
+}
+
+// @interface ChatMessageNative : NSObject
+[Introduced(PlatformName.iOS, 26, 0)]
+[Introduced(PlatformName.MacCatalyst, 26, 0)]
+[Introduced(PlatformName.MacOSX, 26, 0)]
+// [Introduced (PlatformName.VisionOS, 26, 0)]
+[BaseType(typeof(NSObject))]
+[Internal]
+interface ChatMessageNative
+{
+ // @property (nonatomic) enum ChatRoleNative role;
+ [Export("role", ArgumentSemantic.Assign)]
+ ChatRoleNative Role { get; set; }
+
+ // @property (nonatomic, copy) NSArray * _Nonnull contents;
+ [Export("contents", ArgumentSemantic.Copy)]
+ AIContentNative[] Contents { get; set; }
+}
+
+// @interface ChatOptionsNative : NSObject
+[Introduced(PlatformName.iOS, 26, 0)]
+[Introduced(PlatformName.MacCatalyst, 26, 0)]
+[Introduced(PlatformName.MacOSX, 26, 0)]
+// [Introduced (PlatformName.VisionOS, 26, 0)]
+[BaseType(typeof(NSObject))]
+[Internal]
+interface ChatOptionsNative
+{
+ // @property (nonatomic, strong) NSNumber * _Nullable topK;
+ [NullAllowed, Export("topK", ArgumentSemantic.Strong)]
+ NSNumber TopK { get; set; }
+
+ // @property (nonatomic, strong) NSNumber * _Nullable seed;
+ [NullAllowed, Export("seed", ArgumentSemantic.Strong)]
+ NSNumber Seed { get; set; }
+
+ // @property (nonatomic, strong) NSNumber * _Nullable temperature;
+ [NullAllowed, Export("temperature", ArgumentSemantic.Strong)]
+ NSNumber Temperature { get; set; }
+
+ // @property (nonatomic, strong) NSNumber * _Nullable maxOutputTokens;
+ [NullAllowed, Export("maxOutputTokens", ArgumentSemantic.Strong)]
+ NSNumber MaxOutputTokens { get; set; }
+
+ // @property (nonatomic, strong) NSString * _Nullable responseJsonSchema;
+ [NullAllowed, Export("responseJsonSchema", ArgumentSemantic.Strong)]
+ NSString ResponseJsonSchema { get; set; }
+
+ // @property (nonatomic, copy) NSArray> * _Nullable tools;
+ [NullAllowed, Export("tools", ArgumentSemantic.Copy)]
+ IAIToolNative[] Tools { get; set; }
+}
+
+// @interface ChatResponseNative : NSObject
+[Introduced(PlatformName.iOS, 26, 0)]
+[Introduced(PlatformName.MacCatalyst, 26, 0)]
+[Introduced(PlatformName.MacOSX, 26, 0)]
+// [Introduced (PlatformName.VisionOS, 26, 0)]
+[BaseType(typeof(NSObject))]
+[DisableDefaultCtor]
+[Internal]
+interface ChatResponseNative
+{
+ // @property (nonatomic, copy) NSArray * _Nonnull messages;
+ [Export("messages", ArgumentSemantic.Copy)]
+ ChatMessageNative[] Messages { get; set; }
+
+ // - (nonnull instancetype)initWithMessages:(NSArray * _Nonnull)messages OBJC_DESIGNATED_INITIALIZER;
+ [Export("initWithMessages:")]
+ [DesignatedInitializer]
+ NativeHandle Constructor(ChatMessageNative[] messages);
+}
+
+// @interface FunctionCallContentNative : AIContentNative
+[BaseType(typeof(AIContentNative))]
+[DisableDefaultCtor]
+[Internal]
+interface FunctionCallContentNative
+{
+ // @property (nonatomic, copy) NSString * _Nonnull callId;
+ [Export("callId", ArgumentSemantic.Copy)]
+ string CallId { get; set; }
+
+ // @property (nonatomic, copy) NSString * _Nonnull name;
+ [Export("name", ArgumentSemantic.Copy)]
+ string Name { get; set; }
+
+ // @property (nonatomic, copy) NSString * _Nonnull arguments;
+ [Export("arguments", ArgumentSemantic.Copy)]
+ string Arguments { get; set; }
+
+ // - (nonnull instancetype)initWithCallId:(NSString * _Nonnull)callId name:(NSString * _Nonnull)name arguments:(NSString * _Nonnull)arguments OBJC_DESIGNATED_INITIALIZER;
+ [Export("initWithCallId:name:arguments:")]
+ [DesignatedInitializer]
+ NativeHandle Constructor(string callId, string name, string arguments);
+}
+
+// @interface FunctionResultContentNative : AIContentNative
+[BaseType(typeof(AIContentNative))]
+[DisableDefaultCtor]
+[Internal]
+interface FunctionResultContentNative
+{
+ // @property (nonatomic, copy) NSString * _Nonnull callId;
+ [Export("callId", ArgumentSemantic.Copy)]
+ string CallId { get; set; }
+
+ // @property (nonatomic, copy) NSString * _Nonnull name;
+ [Export("name", ArgumentSemantic.Copy)]
+ string Name { get; set; }
+
+ // @property (nonatomic, copy) NSString * _Nonnull result;
+ [Export("result", ArgumentSemantic.Copy)]
+ string Result { get; set; }
+
+ // - (nonnull instancetype)initWithCallId:(NSString * _Nonnull)callId name:(NSString * _Nonnull)name result:(NSString * _Nonnull)result OBJC_DESIGNATED_INITIALIZER;
+ [Export("initWithCallId:name:result:")]
+ [DesignatedInitializer]
+ NativeHandle Constructor(string callId, string name, string result);
+}
+
+// @interface TextContentNative : AIContentNative
+[BaseType(typeof(AIContentNative))]
+[DisableDefaultCtor]
+[Internal]
+interface TextContentNative
+{
+ // - (nonnull instancetype)initWithText:(NSString * _Nonnull)text OBJC_DESIGNATED_INITIALIZER;
+ [Export("initWithText:")]
+ [DesignatedInitializer]
+ NativeHandle Constructor(string text);
+
+ // @property (nonatomic, copy) NSString * _Nonnull text;
+ [Export("text")]
+ string Text { get; set; }
+}
+
+// @interface ResponseUpdateNative : NSObject
+[Introduced(PlatformName.iOS, 26, 0)]
+[Introduced(PlatformName.MacCatalyst, 26, 0)]
+[Introduced(PlatformName.MacOSX, 26, 0)]
+// [Introduced (PlatformName.VisionOS, 26, 0)]
+[BaseType(typeof(NSObject))]
+[DisableDefaultCtor]
+[Internal]
+interface ResponseUpdateNative
+{
+ // @property (nonatomic, readonly) enum ResponseUpdateTypeNative updateType;
+ [Export("updateType")]
+ ResponseUpdateTypeNative UpdateType { get; }
+
+ // @property (nonatomic, readonly, copy) NSString * _Nullable text;
+ [NullAllowed, Export("text")]
+ string Text { get; }
+
+ // @property (nonatomic, readonly, copy) NSString * _Nullable toolCallId;
+ [NullAllowed, Export("toolCallId")]
+ string ToolCallId { get; }
+
+ // @property (nonatomic, readonly, copy) NSString * _Nullable toolCallName;
+ [NullAllowed, Export("toolCallName")]
+ string ToolCallName { get; }
+
+ // @property (nonatomic, readonly, copy) NSString * _Nullable toolCallArguments;
+ [NullAllowed, Export("toolCallArguments")]
+ string ToolCallArguments { get; }
+
+ // @property (nonatomic, readonly, copy) NSString * _Nullable toolCallResult;
+ [NullAllowed, Export("toolCallResult")]
+ string ToolCallResult { get; }
+}
diff --git a/src/AI/AppleNative/EssentialsAI/.editorconfig b/src/AI/AppleNative/EssentialsAI/.editorconfig
new file mode 100644
index 000000000..ba23728ab
--- /dev/null
+++ b/src/AI/AppleNative/EssentialsAI/.editorconfig
@@ -0,0 +1,34 @@
+# EditorConfig for Swift/Apple Native code
+# https://editorconfig.org
+
+root = true
+
+[*.swift]
+charset = utf-8
+indent_style = space
+indent_size = 4
+tab_width = 4
+end_of_line = lf
+insert_final_newline = true
+max_line_length = 160
+trim_trailing_whitespace = true
+
+# Xcode project files
+[*.pbxproj]
+indent_style = tab
+end_of_line = lf
+insert_final_newline = true
+
+# Xcode scheme files
+[*.xcscheme]
+indent_style = space
+indent_size = 2
+end_of_line = lf
+insert_final_newline = true
+
+# Plist files
+[*.plist]
+indent_style = space
+indent_size = 2
+end_of_line = lf
+insert_final_newline = true
diff --git a/src/AI/AppleNative/EssentialsAI/.gitignore b/src/AI/AppleNative/EssentialsAI/.gitignore
new file mode 100644
index 000000000..fda4de3a8
--- /dev/null
+++ b/src/AI/AppleNative/EssentialsAI/.gitignore
@@ -0,0 +1,62 @@
+# Xcode
+#
+# gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore
+
+## User settings
+xcuserdata/
+
+## Obj-C/Swift specific
+*.hmap
+
+## App packaging
+*.ipa
+*.dSYM.zip
+*.dSYM
+
+## Playgrounds
+timeline.xctimeline
+playground.xcworkspace
+
+# Swift Package Manager
+#
+# Add this line if you want to avoid checking in source code from Swift Package Manager dependencies.
+# Packages/
+# Package.pins
+# Package.resolved
+# *.xcodeproj
+#
+# Xcode automatically generates this directory with a .xcworkspacedata file and xcuserdata
+# hence it is not needed unless you have added a package configuration file to your project
+# .swiftpm
+
+.build/
+
+# CocoaPods
+#
+# We recommend against adding the Pods directory to your .gitignore. However
+# you should judge for yourself, the pros and cons are mentioned at:
+# https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control
+#
+# Pods/
+#
+# Add this line if you want to avoid checking in source code from the Xcode workspace
+# *.xcworkspace
+
+# Carthage
+#
+# Add this line if you want to avoid checking in source code from Carthage dependencies.
+# Carthage/Checkouts
+
+Carthage/Build/
+
+# fastlane
+#
+# It is recommended to not store the screenshots in the git repo.
+# Instead, use fastlane to re-generate the screenshots whenever they are needed.
+# For more information about the recommended setup visit:
+# https://docs.fastlane.tools/best-practices/source-control/#source-control
+
+fastlane/report.xml
+fastlane/Preview.html
+fastlane/screenshots/**/*.png
+fastlane/test_output
\ No newline at end of file
diff --git a/src/AI/AppleNative/EssentialsAI/Cancellation.swift b/src/AI/AppleNative/EssentialsAI/Cancellation.swift
new file mode 100644
index 000000000..fe6095593
--- /dev/null
+++ b/src/AI/AppleNative/EssentialsAI/Cancellation.swift
@@ -0,0 +1,19 @@
+import Foundation
+import FoundationModels
+
+@objc(CancellationTokenNative)
+public class CancellationTokenNative: NSObject {
+ private var task: Task
+
+ init(task: Task) {
+ self.task = task
+ }
+
+ @objc public func cancel() {
+ task.cancel()
+ }
+
+ @objc public var isCancelled: Bool {
+ task.isCancelled
+ }
+}
diff --git a/src/AI/AppleNative/EssentialsAI/ChatClient.swift b/src/AI/AppleNative/EssentialsAI/ChatClient.swift
new file mode 100644
index 000000000..b4c9fa7a6
--- /dev/null
+++ b/src/AI/AppleNative/EssentialsAI/ChatClient.swift
@@ -0,0 +1,665 @@
+import Foundation
+import FoundationModels
+
+#if APPLE_INTELLIGENCE_LOGGING_ENABLED
+/// Type alias for the logging action block.
+public typealias AppleIntelligenceLogAction = (String) -> Void
+
+/// Singleton holder for the logger action.
+@objc(AppleIntelligenceLogger)
+public class AppleIntelligenceLogger: NSObject {
+ /// The logging action. Set this to receive log callbacks.
+ /// Example: AppleIntelligenceLogger.log = { message in print("[Native] \(message)") }
+ @objc public static var log: AppleIntelligenceLogAction?
+}
+#endif
+
+@objc(ChatClientError)
+public enum ChatClientError: Int {
+ case emptyMessages = 1
+ case invalidRole = 2
+ case invalidContent = 3
+ case cancelled = 4
+}
+
+@objc(ChatClientNative)
+public class ChatClientNative: NSObject {
+
+ // MARK: - Stream Response
+
+ @objc public func streamResponse(
+ messages: [ChatMessageNative],
+ options: ChatOptionsNative?,
+ onUpdate: @escaping (ResponseUpdateNative) -> Void,
+ onComplete: @escaping (ChatResponseNative?, NSError?) -> Void
+ ) -> CancellationTokenNative? {
+
+ let methodName = "streamResponse"
+ let cq = OperationQueue.current?.underlyingQueue
+
+#if APPLE_INTELLIGENCE_LOGGING_ENABLED
+ if let log = AppleIntelligenceLogger.log {
+ log("[\(methodName)] Invoked with \(messages.count) messages")
+ log("[\(methodName)] Messages: \(formatMessagesDetailed(messages))")
+ if let opts = options {
+ log("[\(methodName)] Options: \(formatOptionsDetailed(opts))")
+ }
+ }
+#endif
+
+ let toolWatcher =
+ options?.tools == nil
+ ? nil
+ : ToolCallWatcher(
+ onToolCall: { id, name, arguments in
+#if APPLE_INTELLIGENCE_LOGGING_ENABLED
+ if let log = AppleIntelligenceLogger.log {
+ log("[\(methodName)] Tool invoking: \(name) (id=\(id)) with arguments: \(arguments)")
+ }
+#endif
+
+ let update = ResponseUpdateNative(updateType: .toolCall, toolCallId: id, toolCallName: name, toolCallArguments: arguments)
+ cq?.async { onUpdate(update) } ?? onUpdate(update)
+ },
+ onToolResult: { id, name, result in
+#if APPLE_INTELLIGENCE_LOGGING_ENABLED
+ if let log = AppleIntelligenceLogger.log {
+ log("[\(methodName)] Tool completed: \(name) (id=\(id)) with result: \(result)")
+ }
+#endif
+
+ let update = ResponseUpdateNative(updateType: .toolResult, toolCallId: id, toolCallName: name, toolCallResult: result)
+ cq?.async { onUpdate(update) } ?? onUpdate(update)
+ }
+ )
+
+ return executeTask(methodName, messages, options, toolWatcher, onComplete) { session, prompt, schema, genOptions in
+
+ if let jsonSchema = schema {
+#if APPLE_INTELLIGENCE_LOGGING_ENABLED
+ if let log = AppleIntelligenceLogger.log {
+ log("[\(methodName)] Starting schema-based stream response")
+ }
+#endif
+
+ let responseStream = session.streamResponse(to: prompt, schema: jsonSchema, includeSchemaInPrompt: false, options: genOptions)
+
+ for try await response in responseStream {
+ try Task.checkCancellation()
+ let text = response.content.jsonString
+ guard !text.isEmpty else { continue }
+#if APPLE_INTELLIGENCE_LOGGING_ENABLED
+ if let log = AppleIntelligenceLogger.log {
+ log("[\(methodName)] Streaming update: \(text)")
+ }
+#endif
+ let update = ResponseUpdateNative(updateType: .content, text: text)
+ cq?.async { onUpdate(update) } ?? onUpdate(update)
+ }
+
+ let response = try await responseStream.collect()
+#if APPLE_INTELLIGENCE_LOGGING_ENABLED
+ if let log = AppleIntelligenceLogger.log {
+ log("[\(methodName)] Stream collected, content length: \(response.content.jsonString.count)")
+ }
+#endif
+ return (response.content.jsonString, response.transcriptEntries)
+ } else {
+#if APPLE_INTELLIGENCE_LOGGING_ENABLED
+ if let log = AppleIntelligenceLogger.log {
+ log("[\(methodName)] Starting text-based stream response")
+ }
+#endif
+
+ let responseStream = session.streamResponse(to: prompt, options: genOptions)
+
+ for try await response in responseStream {
+ try Task.checkCancellation()
+ let text = response.content
+ guard !text.isEmpty else { continue }
+#if APPLE_INTELLIGENCE_LOGGING_ENABLED
+ if let log = AppleIntelligenceLogger.log {
+ log("[\(methodName)] Streaming update: \(text)")
+ }
+#endif
+ let update = ResponseUpdateNative(updateType: .content, text: text)
+ cq?.async { onUpdate(update) } ?? onUpdate(update)
+ }
+
+ let response = try await responseStream.collect()
+#if APPLE_INTELLIGENCE_LOGGING_ENABLED
+ if let log = AppleIntelligenceLogger.log {
+ log("[\(methodName)] Stream collected, content length: \(response.content.count)")
+ }
+#endif
+ return (response.content, response.transcriptEntries)
+ }
+ }
+
+ }
+
+ // MARK: - Get Response
+
+ @objc public func getResponse(
+ messages: [ChatMessageNative],
+ options: ChatOptionsNative?,
+ onUpdate: @escaping (ResponseUpdateNative) -> Void,
+ onComplete: @escaping (ChatResponseNative?, NSError?) -> Void
+ ) -> CancellationTokenNative? {
+
+ let methodName = "getResponse"
+ let cq = OperationQueue.current?.underlyingQueue
+
+#if APPLE_INTELLIGENCE_LOGGING_ENABLED
+ if let log = AppleIntelligenceLogger.log {
+ log("[\(methodName)] Invoked with \(messages.count) messages")
+ log("[\(methodName)] Messages: \(formatMessagesDetailed(messages))")
+ if let opts = options {
+ log("[\(methodName)] Options: \(formatOptionsDetailed(opts))")
+ }
+ }
+#endif
+
+ let toolWatcher =
+ options?.tools == nil
+ ? nil
+ : ToolCallWatcher(
+ onToolCall: { id, name, arguments in
+#if APPLE_INTELLIGENCE_LOGGING_ENABLED
+ if let log = AppleIntelligenceLogger.log {
+ log("[\(methodName)] Tool invoking: \(name) (id=\(id)) with arguments: \(arguments)")
+ }
+#endif
+
+ let update = ResponseUpdateNative(updateType: .toolCall, toolCallId: id, toolCallName: name, toolCallArguments: arguments)
+ cq?.async { onUpdate(update) } ?? onUpdate(update)
+ },
+ onToolResult: { id, name, result in
+#if APPLE_INTELLIGENCE_LOGGING_ENABLED
+ if let log = AppleIntelligenceLogger.log {
+ log("[\(methodName)] Tool completed: \(name) (id=\(id)) with result: \(result)")
+ }
+#endif
+
+ let update = ResponseUpdateNative(updateType: .toolResult, toolCallId: id, toolCallName: name, toolCallResult: result)
+ cq?.async { onUpdate(update) } ?? onUpdate(update)
+ }
+ )
+
+ return executeTask(methodName, messages, options, toolWatcher, onComplete) { session, prompt, schema, genOptions in
+
+#if APPLE_INTELLIGENCE_LOGGING_ENABLED
+ if let log = AppleIntelligenceLogger.log {
+ log("[\(methodName)] \(schema != nil ? "Getting schema-based response" : "Getting text-based response")")
+ }
+#endif
+
+ let response = try await {
+ if let jsonSchema = schema {
+ let inner = try await session.respond(to: prompt, schema: jsonSchema, includeSchemaInPrompt: false, options: genOptions)
+#if APPLE_INTELLIGENCE_LOGGING_ENABLED
+ if let log = AppleIntelligenceLogger.log {
+ log("[\(methodName)] Response received, content length: \(inner.content.jsonString.count)")
+ }
+#endif
+ return (inner.content.jsonString, inner.transcriptEntries)
+ } else {
+ let inner = try await session.respond(to: prompt, options: genOptions)
+#if APPLE_INTELLIGENCE_LOGGING_ENABLED
+ if let log = AppleIntelligenceLogger.log {
+ log("[\(methodName)] Response received, content length: \(inner.content.count)")
+ }
+#endif
+ return (inner.content, inner.transcriptEntries)
+ }
+ }()
+
+ return response
+ }
+ }
+
+ // MARK: - Session Helpers
+
+ private func prepareSession(
+ _ methodName: String,
+ _ messages: [ChatMessageNative],
+ _ options: ChatOptionsNative?,
+ _ toolWatcher: ToolCallWatcher?
+ ) async throws -> (
+ session: LanguageModelSession,
+ prompt: Prompt,
+ schema: GenerationSchema?,
+ genOptions: GenerationOptions
+ ) {
+
+#if APPLE_INTELLIGENCE_LOGGING_ENABLED
+ if let log = AppleIntelligenceLogger.log {
+ log("[\(methodName)] Preparing session with \(messages.count) messages, hasTools=\(options?.tools != nil)")
+ }
+#endif
+
+ // The last message is the prompt; everything before is the transcript history.
+ guard let lastMessage = messages.last else {
+ throw NSError.chatError(.invalidRole, description: "No messages found in conversation")
+ }
+ let otherMessages = Array(messages.dropLast())
+
+ let model = SystemLanguageModel.default
+ let tools = options?.tools?.map { ToolNative($0, toolWatcher?.notifyToolCall, toolWatcher?.notifyToolResult) } ?? []
+
+#if APPLE_INTELLIGENCE_LOGGING_ENABLED
+ if let log = AppleIntelligenceLogger.log, let toolList = options?.tools {
+ for tool in toolList {
+ log("[\(methodName)] Tool registered: \(tool.name) - \(tool.desc)")
+ log("[\(methodName)] Tool \(tool.name) argumentsSchema: \(tool.argumentsSchema)")
+ log("[\(methodName)] Tool \(tool.name) outputSchema: \(tool.outputSchema)")
+ }
+ }
+#endif
+
+ let transcript = try Transcript(entries: otherMessages.flatMap(self.toTranscriptEntries))
+ let prompt = try self.toPrompt(message: lastMessage)
+
+ // Parse the JSON schema from the options
+ let schema: GenerationSchema? = try {
+ if let jsonSchema = options?.responseJsonSchema {
+#if APPLE_INTELLIGENCE_LOGGING_ENABLED
+ if let log = AppleIntelligenceLogger.log {
+ log("[\(methodName)] Parsing JSON schema for structured output: \(jsonSchema)")
+ }
+#endif
+
+ let parsed = try JsonSchemaDecoder.parse(String(jsonSchema))
+ return parsed
+ }
+ return nil
+ }()
+
+ // Map options into GenerationOptions
+ let genOptions = GenerationOptions(
+ sampling: {
+ if let topK = options?.topK?.intValue {
+ return .random(top: topK, seed: options?.seed?.uint64Value)
+ }
+ return .greedy
+ }(),
+ temperature: options?.temperature?.doubleValue,
+ maximumResponseTokens: options?.maxOutputTokens?.intValue
+ )
+
+ let session = LanguageModelSession(model: model, tools: tools, transcript: transcript)
+
+#if APPLE_INTELLIGENCE_LOGGING_ENABLED
+ if let log = AppleIntelligenceLogger.log {
+ log("[\(methodName)] Session ready, hasSchema=\(schema != nil)")
+ }
+#endif
+
+ return (session, prompt, schema, genOptions)
+ }
+
+ private func executeTask(
+ _ methodName: String,
+ _ messages: [ChatMessageNative],
+ _ options: ChatOptionsNative?,
+ _ toolWatcher: ToolCallWatcher?,
+ _ onComplete: @escaping (ChatResponseNative?, NSError?) -> Void,
+ operation:
+ @escaping (LanguageModelSession, Prompt, GenerationSchema?, GenerationOptions) async throws
+ -> (String, ArraySlice)
+ ) -> CancellationTokenNative? {
+
+ let cq = OperationQueue.current?.underlyingQueue
+
+ guard !messages.isEmpty else {
+ let error = NSError.chatError(.emptyMessages, description: "No messages provided.")
+#if APPLE_INTELLIGENCE_LOGGING_ENABLED
+ if let log = AppleIntelligenceLogger.log {
+ log("[\(methodName)] Failed: No messages provided")
+ }
+#endif
+
+ cq?.async { onComplete(nil, error.toNSError()) } ?? onComplete(nil, error.toNSError())
+ return nil
+ }
+
+ let task = Task {
+ do {
+ try Task.checkCancellation()
+
+ let (session, prompt, schema, genOptions) = try await self.prepareSession(methodName, messages, options, toolWatcher)
+
+ let result = try await operation(session, prompt, schema, genOptions)
+
+ try Task.checkCancellation()
+
+ // Convert transcript entries to messages
+ let transcriptMessages = try result.1.compactMap(self.fromTranscriptEntry)
+
+ // Create response with all transcript messages
+ let response = ChatResponseNative(messages: transcriptMessages)
+
+#if APPLE_INTELLIGENCE_LOGGING_ENABLED
+ if let log = AppleIntelligenceLogger.log {
+ log("[\(methodName)] Completed with \(transcriptMessages.count) messages")
+ log("[\(methodName)] Response: \(self.formatResponseDetailed(response))")
+ }
+#endif
+
+ cq?.async { onComplete(response, nil) } ?? onComplete(response, nil)
+ } catch {
+#if APPLE_INTELLIGENCE_LOGGING_ENABLED
+ if let log = AppleIntelligenceLogger.log {
+ log("[\(methodName)] Failed: \(error.localizedDescription)")
+ }
+#endif
+
+ cq?.async { onComplete(nil, error.toNSError()) } ?? onComplete(nil, error.toNSError())
+ }
+ }
+
+ return CancellationTokenNative(task: task)
+ }
+
+ // MARK: - Conversion to Foundation Models Helpers
+
+ private func toPrompt(message: ChatMessageNative) throws -> Prompt {
+ guard message.role == .user else {
+ throw NSError.chatError(.invalidRole, description: "Only user messages can be prompts. Found: \(message.role)")
+ }
+
+ return try Prompt {
+ try message.contents.map {
+ switch $0 {
+ case let textContent as TextContentNative:
+ return textContent.text
+ default:
+ throw NSError.chatError(.invalidContent, description: "Unsupported content type in prompt. Found: \(type(of: $0))")
+ }
+ }
+ }
+ }
+
+ private func toTranscriptEntries(message: ChatMessageNative) throws -> [Transcript.Entry] {
+ switch message.role {
+ case .user:
+ return [try toUserEntry(message)]
+ case .assistant:
+ return toAssistantEntries(message)
+ case .system:
+ return [try toSystemEntry(message)]
+ case .tool:
+ return try toToolEntries(message)
+ default:
+ throw NSError.chatError(.invalidRole, description: "Unsupported role in transcript. Found: \(message.role)")
+ }
+ }
+
+ private func toUserEntry(_ message: ChatMessageNative) throws -> Transcript.Entry {
+ let segments: [Transcript.Segment] = try message.contents.map { content in
+ guard let textContent = content as? TextContentNative else {
+ throw NSError.chatError(.invalidContent, description: "Unsupported content type in user message: \(type(of: content))")
+ }
+ return .text(Transcript.TextSegment(content: textContent.text))
+ }
+ return .prompt(Transcript.Prompt(segments: segments))
+ }
+
+ private func toAssistantEntries(_ message: ChatMessageNative) -> [Transcript.Entry] {
+ // Process contents in order, flushing batches when the content type changes.
+ // This preserves interleaving: [text, funcCall, text] → [.response, .toolCalls, .response]
+ var entries: [Transcript.Entry] = []
+ var pendingTextSegments: [Transcript.Segment] = []
+ var pendingToolCalls: [Transcript.ToolCall] = []
+
+ for content in message.contents {
+ if let textContent = content as? TextContentNative {
+ if !pendingToolCalls.isEmpty {
+ entries.append(.toolCalls(Transcript.ToolCalls(pendingToolCalls)))
+ pendingToolCalls = []
+ }
+ pendingTextSegments.append(.text(Transcript.TextSegment(content: textContent.text)))
+ } else if let funcCall = content as? FunctionCallContentNative {
+ if !pendingTextSegments.isEmpty {
+ entries.append(.response(Transcript.Response(assetIDs: [], segments: pendingTextSegments)))
+ pendingTextSegments = []
+ }
+ let argsContent = (try? GeneratedContent(json: funcCall.arguments)) ?? GeneratedContent(funcCall.arguments)
+ pendingToolCalls.append(Transcript.ToolCall(id: funcCall.callId, toolName: funcCall.name, arguments: argsContent))
+ }
+ }
+
+ if !pendingTextSegments.isEmpty {
+ entries.append(.response(Transcript.Response(assetIDs: [], segments: pendingTextSegments)))
+ }
+ if !pendingToolCalls.isEmpty {
+ entries.append(.toolCalls(Transcript.ToolCalls(pendingToolCalls)))
+ }
+ return entries
+ }
+
+ private func toSystemEntry(_ message: ChatMessageNative) throws -> Transcript.Entry {
+ let segments: [Transcript.Segment] = try message.contents.map { content in
+ guard let textContent = content as? TextContentNative else {
+ throw NSError.chatError(.invalidContent, description: "Unsupported content type in system message: \(type(of: content))")
+ }
+ return .text(Transcript.TextSegment(content: textContent.text))
+ }
+ return .instructions(Transcript.Instructions(segments: segments, toolDefinitions: []))
+ }
+
+ private func toToolEntries(_ message: ChatMessageNative) throws -> [Transcript.Entry] {
+ return try message.contents.map { content in
+ guard let funcResult = content as? FunctionResultContentNative else {
+ throw NSError.chatError(.invalidContent, description: "Unsupported content type in tool message: \(type(of: content))")
+ }
+ let segment = Transcript.Segment.text(Transcript.TextSegment(content: funcResult.result))
+ return .toolOutput(Transcript.ToolOutput(id: funcResult.callId, toolName: funcResult.name, segments: [segment]))
+ }
+ }
+
+ // MARK: - Conversion to Essentials AI Helpers
+
+ private func fromTranscriptEntry(_ entry: Transcript.Entry) throws -> ChatMessageNative? {
+ switch entry {
+ case .prompt(let prompt):
+ let message = ChatMessageNative()
+ message.role = .user
+ message.contents = prompt.segments.compactMap(fromTranscriptSegment)
+ return message
+
+ case .response(let response):
+ let message = ChatMessageNative()
+ message.role = .assistant
+ message.contents = response.segments.compactMap(fromTranscriptSegment)
+ return message
+
+ case .instructions(let instructions):
+ let message = ChatMessageNative()
+ message.role = .system
+ message.contents = instructions.segments.compactMap(fromTranscriptSegment)
+ return message
+
+ case .toolCalls(let toolCalls):
+ let message = ChatMessageNative()
+ message.role = .assistant
+ message.contents = toolCalls.map(fromToolCall)
+ return message
+
+ case .toolOutput(let toolOutput):
+ let message = ChatMessageNative()
+ message.role = .tool
+ message.contents = fromToolOutput(toolOutput)
+ return message
+
+ @unknown default:
+ return nil
+ }
+ }
+
+ private func fromToolCall(_ toolCall: Transcript.ToolCall) -> AIContentNative {
+ let argsJson = toolCall.arguments.jsonString
+ return FunctionCallContentNative(callId: toolCall.id, name: toolCall.toolName, arguments: argsJson)
+ }
+
+ private func fromToolOutput(_ toolOutput: Transcript.ToolOutput) -> [AIContentNative] {
+ return toolOutput.segments.compactMap { segment -> AIContentNative? in
+ let resultText: String
+ switch segment {
+ case .text(let textSegment):
+ resultText = textSegment.content
+ case .structure(let structuredSegment):
+ resultText = structuredSegment.content.jsonString
+ @unknown default:
+ return nil
+ }
+
+ return FunctionResultContentNative(callId: toolOutput.id, name: toolOutput.toolName, result: resultText)
+ }
+ }
+
+ private func fromTranscriptSegment(_ segment: Transcript.Segment) -> AIContentNative? {
+ switch segment {
+ case .text(let textSegment):
+ return TextContentNative(text: textSegment.content)
+
+ case .structure(let structuredSegment):
+ // For now, convert structured content to text
+ let jsonString = structuredSegment.content.jsonString
+ return TextContentNative(text: jsonString)
+
+ @unknown default:
+ return nil
+ }
+ }
+
+ // MARK: - Logging Helpers
+
+#if APPLE_INTELLIGENCE_LOGGING_ENABLED
+ private func formatMessagesDetailed(_ messages: [ChatMessageNative]) -> String {
+ let formatted = messages.map { message -> String in
+ let role = "\(message.role)"
+ let contents = message.contents.map { content -> String in
+ switch content {
+ case let text as TextContentNative:
+ return "TextContent(text=\"\(text.text)\")"
+ case let funcCall as FunctionCallContentNative:
+ return "FunctionCallContent(name=\"\(funcCall.name)\", callId=\"\(funcCall.callId)\", arguments=\(funcCall.arguments))"
+ case let funcResult as FunctionResultContentNative:
+ return "FunctionResultContent(callId=\"\(funcResult.callId)\", result=\"\(funcResult.result)\")"
+ default:
+ return "UnknownContent(\(type(of: content)))"
+ }
+ }.joined(separator: ", ")
+ return "Message(role=\(role), contents=[\(contents)])"
+ }.joined(separator: ", ")
+ return "[\(formatted)]"
+ }
+
+ private func formatOptionsDetailed(_ options: ChatOptionsNative) -> String {
+ var parts: [String] = []
+ if let topK = options.topK { parts.append("topK=\(topK)") }
+ if let temp = options.temperature { parts.append("temperature=\(temp)") }
+ if let maxTokens = options.maxOutputTokens { parts.append("maxOutputTokens=\(maxTokens)") }
+ if let seed = options.seed { parts.append("seed=\(seed)") }
+ if let schema = options.responseJsonSchema { parts.append("responseJsonSchema=\(schema)") }
+ if let tools = options.tools {
+ let toolNames = tools.map { "\($0.name)" }.joined(separator: ", ")
+ parts.append("tools=[\(toolNames)]")
+ }
+ return "Options(\(parts.joined(separator: ", ")))"
+ }
+
+ private func formatResponseDetailed(_ response: ChatResponseNative) -> String {
+ let messagesStr = response.messages.map { message -> String in
+ let role = "\(message.role)"
+ let contents = message.contents.map { content -> String in
+ switch content {
+ case let text as TextContentNative:
+ return "TextContent(text=\"\(text.text)\")"
+ case let funcCall as FunctionCallContentNative:
+ return "FunctionCallContent(name=\"\(funcCall.name)\", callId=\"\(funcCall.callId)\", arguments=\(funcCall.arguments))"
+ case let funcResult as FunctionResultContentNative:
+ return "FunctionResultContent(callId=\"\(funcResult.callId)\", result=\"\(funcResult.result)\")"
+ default:
+ return "UnknownContent(\(type(of: content)))"
+ }
+ }.joined(separator: ", ")
+ return "Message(role=\(role), contents=[\(contents)])"
+ }.joined(separator: ", ")
+ return "ChatResponse(messages=[\(messagesStr)])"
+ }
+#endif
+}
+
+extension NSError {
+
+ fileprivate static func chatError(_ code: ChatClientError, description: String) -> NSError {
+ NSError(
+ domain: "ChatClientNative",
+ code: code.rawValue,
+ userInfo: [NSLocalizedDescriptionKey: description]
+ )
+ }
+}
+
+extension Error {
+
+ fileprivate func toNSError() -> NSError {
+ switch self
+ {
+ case let error as LanguageModelSession.GenerationError:
+ return NSError(
+ domain: "ChatClientNative",
+ code: 0,
+ userInfo: [
+ NSUnderlyingErrorKey: error.errorDescription ?? "",
+ NSLocalizedRecoverySuggestionErrorKey: error.recoverySuggestion ?? "",
+ NSLocalizedFailureReasonErrorKey: error.failureReason ?? "",
+ NSLocalizedDescriptionKey: error.localizedDescription,
+ ]
+ )
+
+ case let error as LanguageModelSession.ToolCallError:
+ return NSError(
+ domain: "ChatClientNative",
+ code: 0,
+ userInfo: [
+ NSUnderlyingErrorKey: error.errorDescription ?? "",
+ NSLocalizedRecoverySuggestionErrorKey: error.recoverySuggestion ?? "",
+ NSLocalizedFailureReasonErrorKey: error.failureReason ?? "",
+ NSLocalizedDescriptionKey: error.localizedDescription,
+ ]
+ )
+
+ case let error as LocalizedError:
+ return NSError(
+ domain: "ChatClientNative",
+ code: 0,
+ userInfo: [
+ NSUnderlyingErrorKey: error.errorDescription ?? "",
+ NSLocalizedRecoverySuggestionErrorKey: error.recoverySuggestion ?? "",
+ NSLocalizedFailureReasonErrorKey: error.failureReason ?? "",
+ NSLocalizedDescriptionKey: error.localizedDescription,
+ ]
+ )
+
+ case is CancellationError:
+ return NSError.chatError(.cancelled, description: "Request was cancelled.")
+
+ case let error as NSError:
+ return error
+
+ default:
+ return NSError(
+ domain: "ChatClientNative",
+ code: 0,
+ userInfo: [
+ NSLocalizedDescriptionKey: self.localizedDescription
+ ]
+ )
+ }
+
+ }
+
+}
diff --git a/src/AI/AppleNative/EssentialsAI/ChatMessage.swift b/src/AI/AppleNative/EssentialsAI/ChatMessage.swift
new file mode 100644
index 000000000..0b42fe925
--- /dev/null
+++ b/src/AI/AppleNative/EssentialsAI/ChatMessage.swift
@@ -0,0 +1,16 @@
+import Foundation
+import FoundationModels
+
+@objc(ChatRoleNative)
+public enum ChatRoleNative: Int {
+ case user = 1
+ case assistant = 2
+ case system = 3
+ case tool = 4
+}
+
+@objc(ChatMessageNative)
+public class ChatMessageNative: NSObject {
+ @objc public var role: ChatRoleNative = .user
+ @objc public var contents: [AIContentNative] = []
+}
diff --git a/src/AI/AppleNative/EssentialsAI/ChatMessageContent.swift b/src/AI/AppleNative/EssentialsAI/ChatMessageContent.swift
new file mode 100644
index 000000000..a80ccca24
--- /dev/null
+++ b/src/AI/AppleNative/EssentialsAI/ChatMessageContent.swift
@@ -0,0 +1,41 @@
+import Foundation
+import FoundationModels
+
+@objc(AIContentNative)
+public class AIContentNative: NSObject {}
+
+@objc(TextContentNative)
+public class TextContentNative: AIContentNative {
+ @objc public init(text: String) {
+ self.text = text
+ }
+ @objc public var text: String
+}
+
+@objc(FunctionCallContentNative)
+public class FunctionCallContentNative: AIContentNative {
+ @objc public var callId: String
+ @objc public var name: String
+ @objc public var arguments: String // JSON string
+
+ @objc public init(callId: String, name: String, arguments: String) {
+ self.callId = callId
+ self.name = name
+ self.arguments = arguments
+ super.init()
+ }
+}
+
+@objc(FunctionResultContentNative)
+public class FunctionResultContentNative: AIContentNative {
+ @objc public var callId: String
+ @objc public var name: String
+ @objc public var result: String
+
+ @objc public init(callId: String, name: String, result: String) {
+ self.callId = callId
+ self.name = name
+ self.result = result
+ super.init()
+ }
+}
diff --git a/src/AI/AppleNative/EssentialsAI/ChatOptions.swift b/src/AI/AppleNative/EssentialsAI/ChatOptions.swift
new file mode 100644
index 000000000..09fefba47
--- /dev/null
+++ b/src/AI/AppleNative/EssentialsAI/ChatOptions.swift
@@ -0,0 +1,12 @@
+import Foundation
+import FoundationModels
+
+@objc(ChatOptionsNative)
+public class ChatOptionsNative: NSObject {
+ @objc public var topK: NSNumber? = nil
+ @objc public var seed: NSNumber? = nil
+ @objc public var temperature: NSNumber? = nil
+ @objc public var maxOutputTokens: NSNumber? = nil
+ @objc public var responseJsonSchema: NSString? = nil
+ @objc public var tools: [any AIToolNative]? = nil
+}
diff --git a/src/AI/AppleNative/EssentialsAI/ChatResponseNative.swift b/src/AI/AppleNative/EssentialsAI/ChatResponseNative.swift
new file mode 100644
index 000000000..09beda7c5
--- /dev/null
+++ b/src/AI/AppleNative/EssentialsAI/ChatResponseNative.swift
@@ -0,0 +1,12 @@
+import Foundation
+import FoundationModels
+
+@objc(ChatResponseNative)
+public class ChatResponseNative: NSObject, @unchecked Sendable {
+ @objc public var messages: [ChatMessageNative]
+
+ @objc public init(messages: [ChatMessageNative]) {
+ self.messages = messages
+ super.init()
+ }
+}
diff --git a/src/AI/AppleNative/EssentialsAI/ChatResponseUpdateNative.swift b/src/AI/AppleNative/EssentialsAI/ChatResponseUpdateNative.swift
new file mode 100644
index 000000000..2b3bea8b5
--- /dev/null
+++ b/src/AI/AppleNative/EssentialsAI/ChatResponseUpdateNative.swift
@@ -0,0 +1,36 @@
+import Foundation
+import FoundationModels
+
+@objc(ResponseUpdateTypeNative)
+public enum ResponseUpdateTypeNative: Int, Sendable {
+ case content = 0
+ case toolCall = 1
+ case toolResult = 2
+}
+
+@objc(ResponseUpdateNative)
+public final class ResponseUpdateNative: NSObject, Sendable {
+ @objc public let updateType: ResponseUpdateTypeNative
+ @objc public let text: String?
+ @objc public let toolCallId: String?
+ @objc public let toolCallName: String?
+ @objc public let toolCallArguments: String?
+ @objc public let toolCallResult: String?
+
+ @objc public init(
+ updateType: ResponseUpdateTypeNative = .content,
+ text: String? = nil,
+ toolCallId: String? = nil,
+ toolCallName: String? = nil,
+ toolCallArguments: String? = nil,
+ toolCallResult: String? = nil
+ ) {
+ self.updateType = updateType
+ self.text = text
+ self.toolCallId = toolCallId
+ self.toolCallName = toolCallName
+ self.toolCallArguments = toolCallArguments
+ self.toolCallResult = toolCallResult
+ super.init()
+ }
+}
diff --git a/src/AI/AppleNative/EssentialsAI/ChatTool.swift b/src/AI/AppleNative/EssentialsAI/ChatTool.swift
new file mode 100644
index 000000000..02692e342
--- /dev/null
+++ b/src/AI/AppleNative/EssentialsAI/ChatTool.swift
@@ -0,0 +1,10 @@
+import Foundation
+
+@objc(AIToolNative)
+public protocol AIToolNative : Sendable {
+ @objc var name: String { get }
+ @objc var desc: String { get }
+ @objc var argumentsSchema: String { get }
+ @objc var outputSchema: String { get }
+ @objc func call(arguments: String) async throws -> String
+}
diff --git a/src/AI/AppleNative/EssentialsAI/EssentialsAI.xcodeproj/project.pbxproj b/src/AI/AppleNative/EssentialsAI/EssentialsAI.xcodeproj/project.pbxproj
new file mode 100644
index 000000000..62f2cf8ed
--- /dev/null
+++ b/src/AI/AppleNative/EssentialsAI/EssentialsAI.xcodeproj/project.pbxproj
@@ -0,0 +1,426 @@
+// !$*UTF8*$!
+{
+ archiveVersion = 1;
+ classes = {
+ };
+ objectVersion = 77;
+ objects = {
+
+/* Begin PBXBuildFile section */
+ 340019332EDF4D6800DAB0A3 /* JsonSchemaDecoder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 340019302EDF4D6800DAB0A3 /* JsonSchemaDecoder.swift */; };
+ 340019342EDF4D6800DAB0A3 /* ChatMessage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 340019292EDF4D6800DAB0A3 /* ChatMessage.swift */; };
+ 340019352EDF4D6800DAB0A3 /* ToolNative.swift in Sources */ = {isa = PBXBuildFile; fileRef = 340019322EDF4D6800DAB0A3 /* ToolNative.swift */; };
+ 340019372EDF4D6800DAB0A3 /* ToolCallWatcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 340019312EDF4D6800DAB0A3 /* ToolCallWatcher.swift */; };
+ 340019382EDF4D6800DAB0A3 /* ChatOptions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3400192B2EDF4D6800DAB0A3 /* ChatOptions.swift */; };
+ 340019392EDF4D6800DAB0A3 /* ChatMessageContent.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3400192A2EDF4D6800DAB0A3 /* ChatMessageContent.swift */; };
+ 3400193A2EDF4D6800DAB0A3 /* ChatResponseNative.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3400192C2EDF4D6800DAB0A3 /* ChatResponseNative.swift */; };
+ 3400193B2EDF4D6800DAB0A3 /* ChatClient.swift in Sources */ = {isa = PBXBuildFile; fileRef = 340019282EDF4D6800DAB0A3 /* ChatClient.swift */; };
+ 3400193C2EDF4D6800DAB0A3 /* ChatResponseUpdateNative.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3400192D2EDF4D6800DAB0A3 /* ChatResponseUpdateNative.swift */; };
+ 3400193D2EDF4D6800DAB0A3 /* Cancellation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 340019272EDF4D6800DAB0A3 /* Cancellation.swift */; };
+ 3400193E2EDF4D6800DAB0A3 /* ChatTool.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3400192E2EDF4D6800DAB0A3 /* ChatTool.swift */; };
+ 34279CA12EC421CC00583050 /* FoundationModels.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 34279CA02EC421CC00583050 /* FoundationModels.framework */; settings = {ATTRIBUTES = (Weak, ); }; };
+/* End PBXBuildFile section */
+
+/* Begin PBXFileReference section */
+ 340019272EDF4D6800DAB0A3 /* Cancellation.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Cancellation.swift; sourceTree = ""; };
+ 340019282EDF4D6800DAB0A3 /* ChatClient.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatClient.swift; sourceTree = ""; };
+ 340019292EDF4D6800DAB0A3 /* ChatMessage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatMessage.swift; sourceTree = ""; };
+ 3400192A2EDF4D6800DAB0A3 /* ChatMessageContent.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatMessageContent.swift; sourceTree = ""; };
+ 3400192B2EDF4D6800DAB0A3 /* ChatOptions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatOptions.swift; sourceTree = ""; };
+ 3400192C2EDF4D6800DAB0A3 /* ChatResponseNative.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatResponseNative.swift; sourceTree = ""; };
+ 3400192D2EDF4D6800DAB0A3 /* ChatResponseUpdateNative.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatResponseUpdateNative.swift; sourceTree = ""; };
+ 3400192E2EDF4D6800DAB0A3 /* ChatTool.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatTool.swift; sourceTree = ""; };
+ 340019302EDF4D6800DAB0A3 /* JsonSchemaDecoder.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JsonSchemaDecoder.swift; sourceTree = ""; };
+ 340019312EDF4D6800DAB0A3 /* ToolCallWatcher.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ToolCallWatcher.swift; sourceTree = ""; };
+ 340019322EDF4D6800DAB0A3 /* ToolNative.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ToolNative.swift; sourceTree = ""; };
+ 34279C902EC421CC00583050 /* EssentialsAI.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = EssentialsAI.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 34279CA02EC421CC00583050 /* FoundationModels.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = FoundationModels.framework; path = System/Library/Frameworks/FoundationModels.framework; sourceTree = SDKROOT; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+ 34279C8D2EC421CC00583050 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 34279CA12EC421CC00583050 /* FoundationModels.framework in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+ 34279C862EC421CC00583050 = {
+ isa = PBXGroup;
+ children = (
+ 34279CA02EC421CC00583050 /* FoundationModels.framework */,
+ 340019272EDF4D6800DAB0A3 /* Cancellation.swift */,
+ 340019282EDF4D6800DAB0A3 /* ChatClient.swift */,
+ 340019292EDF4D6800DAB0A3 /* ChatMessage.swift */,
+ 3400192A2EDF4D6800DAB0A3 /* ChatMessageContent.swift */,
+ 3400192B2EDF4D6800DAB0A3 /* ChatOptions.swift */,
+ 3400192C2EDF4D6800DAB0A3 /* ChatResponseNative.swift */,
+ 3400192D2EDF4D6800DAB0A3 /* ChatResponseUpdateNative.swift */,
+ 3400192E2EDF4D6800DAB0A3 /* ChatTool.swift */,
+ 340019302EDF4D6800DAB0A3 /* JsonSchemaDecoder.swift */,
+ 340019312EDF4D6800DAB0A3 /* ToolCallWatcher.swift */,
+ 340019322EDF4D6800DAB0A3 /* ToolNative.swift */,
+ 34279C912EC421CC00583050 /* Products */,
+ );
+ sourceTree = "";
+ };
+ 34279C912EC421CC00583050 /* Products */ = {
+ isa = PBXGroup;
+ children = (
+ 34279C902EC421CC00583050 /* EssentialsAI.framework */,
+ );
+ name = Products;
+ sourceTree = "";
+ };
+/* End PBXGroup section */
+
+/* Begin PBXHeadersBuildPhase section */
+ 34279C8B2EC421CC00583050 /* Headers */ = {
+ isa = PBXHeadersBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXHeadersBuildPhase section */
+
+/* Begin PBXNativeTarget section */
+ 34279C8F2EC421CC00583050 /* EssentialsAI */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 34279C992EC421CC00583050 /* Build configuration list for PBXNativeTarget "EssentialsAI" */;
+ buildPhases = (
+ 34279C8B2EC421CC00583050 /* Headers */,
+ 34279C8C2EC421CC00583050 /* Sources */,
+ 34279C8D2EC421CC00583050 /* Frameworks */,
+ 34279C8E2EC421CC00583050 /* Resources */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = EssentialsAI;
+ packageProductDependencies = (
+ );
+ productName = EssentialsAI;
+ productReference = 34279C902EC421CC00583050 /* EssentialsAI.framework */;
+ productType = "com.apple.product-type.framework";
+ };
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+ 34279C872EC421CC00583050 /* Project object */ = {
+ isa = PBXProject;
+ attributes = {
+ BuildIndependentTargetsInParallel = 1;
+ LastSwiftUpdateCheck = 2610;
+ LastUpgradeCheck = 2620;
+ TargetAttributes = {
+ 34279C8F2EC421CC00583050 = {
+ CreatedOnToolsVersion = 26.1;
+ LastSwiftMigration = 2610;
+ };
+ };
+ };
+ buildConfigurationList = 34279C8A2EC421CC00583050 /* Build configuration list for PBXProject "EssentialsAI" */;
+ developmentRegion = en;
+ hasScannedForEncodings = 0;
+ knownRegions = (
+ en,
+ Base,
+ );
+ mainGroup = 34279C862EC421CC00583050;
+ minimizedProjectReferenceProxies = 1;
+ preferredProjectObjectVersion = 77;
+ productRefGroup = 34279C912EC421CC00583050 /* Products */;
+ projectDirPath = "";
+ projectRoot = "";
+ targets = (
+ 34279C8F2EC421CC00583050 /* EssentialsAI */,
+ );
+ };
+/* End PBXProject section */
+
+/* Begin PBXResourcesBuildPhase section */
+ 34279C8E2EC421CC00583050 /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXResourcesBuildPhase section */
+
+/* Begin PBXSourcesBuildPhase section */
+ 34279C8C2EC421CC00583050 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 340019332EDF4D6800DAB0A3 /* JsonSchemaDecoder.swift in Sources */,
+ 340019342EDF4D6800DAB0A3 /* ChatMessage.swift in Sources */,
+ 340019352EDF4D6800DAB0A3 /* ToolNative.swift in Sources */,
+ 340019372EDF4D6800DAB0A3 /* ToolCallWatcher.swift in Sources */,
+ 340019382EDF4D6800DAB0A3 /* ChatOptions.swift in Sources */,
+ 340019392EDF4D6800DAB0A3 /* ChatMessageContent.swift in Sources */,
+ 3400193A2EDF4D6800DAB0A3 /* ChatResponseNative.swift in Sources */,
+ 3400193B2EDF4D6800DAB0A3 /* ChatClient.swift in Sources */,
+ 3400193C2EDF4D6800DAB0A3 /* ChatResponseUpdateNative.swift in Sources */,
+ 3400193D2EDF4D6800DAB0A3 /* Cancellation.swift in Sources */,
+ 3400193E2EDF4D6800DAB0A3 /* ChatTool.swift in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXSourcesBuildPhase section */
+
+/* Begin XCBuildConfiguration section */
+ 34279C972EC421CC00583050 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
+ CLANG_ANALYZER_NONNULL = YES;
+ CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
+ CLANG_ENABLE_MODULES = YES;
+ CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_ENABLE_OBJC_WEAK = YES;
+ CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
+ CLANG_WARN_BOOL_CONVERSION = YES;
+ CLANG_WARN_COMMA = YES;
+ CLANG_WARN_CONSTANT_CONVERSION = YES;
+ CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
+ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+ CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
+ CLANG_WARN_EMPTY_BODY = YES;
+ CLANG_WARN_ENUM_CONVERSION = YES;
+ CLANG_WARN_INFINITE_RECURSION = YES;
+ CLANG_WARN_INT_CONVERSION = YES;
+ CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
+ CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
+ CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
+ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
+ CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
+ CLANG_WARN_STRICT_PROTOTYPES = YES;
+ CLANG_WARN_SUSPICIOUS_MOVE = YES;
+ CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
+ CLANG_WARN_UNREACHABLE_CODE = YES;
+ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+ COPY_PHASE_STRIP = NO;
+ CURRENT_PROJECT_VERSION = 1;
+ DEAD_CODE_STRIPPING = YES;
+ DEBUG_INFORMATION_FORMAT = dwarf;
+ ENABLE_STRICT_OBJC_MSGSEND = YES;
+ ENABLE_TESTABILITY = YES;
+ ENABLE_USER_SCRIPT_SANDBOXING = YES;
+ GCC_C_LANGUAGE_STANDARD = gnu17;
+ GCC_DYNAMIC_NO_PIC = NO;
+ GCC_NO_COMMON_BLOCKS = YES;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ GCC_PREPROCESSOR_DEFINITIONS = (
+ "DEBUG=1",
+ "$(inherited)",
+ );
+ GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+ GCC_WARN_UNDECLARED_SELECTOR = YES;
+ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+ GCC_WARN_UNUSED_FUNCTION = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
+ MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
+ MTL_FAST_MATH = YES;
+ ONLY_ACTIVE_ARCH = YES;
+ STRING_CATALOG_GENERATE_SYMBOLS = YES;
+ SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)";
+ SWIFT_OPTIMIZATION_LEVEL = "-Onone";
+ VERSIONING_SYSTEM = "apple-generic";
+ VERSION_INFO_PREFIX = "";
+ };
+ name = Debug;
+ };
+ 34279C982EC421CC00583050 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
+ CLANG_ANALYZER_NONNULL = YES;
+ CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
+ CLANG_ENABLE_MODULES = YES;
+ CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_ENABLE_OBJC_WEAK = YES;
+ CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
+ CLANG_WARN_BOOL_CONVERSION = YES;
+ CLANG_WARN_COMMA = YES;
+ CLANG_WARN_CONSTANT_CONVERSION = YES;
+ CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
+ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+ CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
+ CLANG_WARN_EMPTY_BODY = YES;
+ CLANG_WARN_ENUM_CONVERSION = YES;
+ CLANG_WARN_INFINITE_RECURSION = YES;
+ CLANG_WARN_INT_CONVERSION = YES;
+ CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
+ CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
+ CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
+ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
+ CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
+ CLANG_WARN_STRICT_PROTOTYPES = YES;
+ CLANG_WARN_SUSPICIOUS_MOVE = YES;
+ CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
+ CLANG_WARN_UNREACHABLE_CODE = YES;
+ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+ COPY_PHASE_STRIP = NO;
+ CURRENT_PROJECT_VERSION = 1;
+ DEAD_CODE_STRIPPING = YES;
+ DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+ ENABLE_NS_ASSERTIONS = NO;
+ ENABLE_STRICT_OBJC_MSGSEND = YES;
+ ENABLE_USER_SCRIPT_SANDBOXING = YES;
+ GCC_C_LANGUAGE_STANDARD = gnu17;
+ GCC_NO_COMMON_BLOCKS = YES;
+ GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+ GCC_WARN_UNDECLARED_SELECTOR = YES;
+ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+ GCC_WARN_UNUSED_FUNCTION = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
+ MTL_ENABLE_DEBUG_INFO = NO;
+ MTL_FAST_MATH = YES;
+ STRING_CATALOG_GENERATE_SYMBOLS = YES;
+ SWIFT_COMPILATION_MODE = wholemodule;
+ VERSIONING_SYSTEM = "apple-generic";
+ VERSION_INFO_PREFIX = "";
+ };
+ name = Release;
+ };
+ 34279C9A2EC421CC00583050 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALLOW_TARGET_PLATFORM_SPECIALIZATION = YES;
+ BUILD_LIBRARY_FOR_DISTRIBUTION = YES;
+ CLANG_ENABLE_MODULES = YES;
+ CODE_SIGN_STYLE = Automatic;
+ CURRENT_PROJECT_VERSION = 1;
+ DEAD_CODE_STRIPPING = YES;
+ DEFINES_MODULE = YES;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
+ ENABLE_MODULE_VERIFIER = YES;
+ GENERATE_INFOPLIST_FILE = YES;
+ INFOPLIST_KEY_NSHumanReadableCopyright = "";
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ IPHONEOS_DEPLOYMENT_TARGET = 26.0;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "@executable_path/Frameworks",
+ "@loader_path/Frameworks",
+ );
+ "LD_RUNPATH_SEARCH_PATHS[sdk=macosx*]" = (
+ "@executable_path/../Frameworks",
+ "@loader_path/Frameworks",
+ );
+ MACOSX_DEPLOYMENT_TARGET = 26.0;
+ MARKETING_VERSION = 1.0;
+ MODULE_VERIFIER_SUPPORTED_LANGUAGES = "objective-c objective-c++";
+ MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = "gnu17 gnu++20";
+ PRODUCT_BUNDLE_IDENTIFIER = com.microsoft.maui.EssentialsAI;
+ PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
+ SDKROOT = auto;
+ SKIP_INSTALL = YES;
+ STRING_CATALOG_GENERATE_SYMBOLS = YES;
+ SUPPORTED_PLATFORMS = "appletvos appletvsimulator iphoneos iphonesimulator macosx xros xrsimulator";
+ SUPPORTS_MACCATALYST = YES;
+ SWIFT_APPROACHABLE_CONCURRENCY = YES;
+ SWIFT_EMIT_LOC_STRINGS = YES;
+ SWIFT_INSTALL_MODULE = YES;
+ SWIFT_INSTALL_OBJC_HEADER = YES;
+ SWIFT_OPTIMIZATION_LEVEL = "-Onone";
+ SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES;
+ SWIFT_VERSION = 5.0;
+ TARGETED_DEVICE_FAMILY = "1,2,3,7";
+ TVOS_DEPLOYMENT_TARGET = 15.6;
+ XROS_DEPLOYMENT_TARGET = 26.0;
+ };
+ name = Debug;
+ };
+ 34279C9B2EC421CC00583050 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALLOW_TARGET_PLATFORM_SPECIALIZATION = YES;
+ BUILD_LIBRARY_FOR_DISTRIBUTION = YES;
+ CLANG_ENABLE_MODULES = YES;
+ CODE_SIGN_STYLE = Automatic;
+ CURRENT_PROJECT_VERSION = 1;
+ DEAD_CODE_STRIPPING = YES;
+ DEFINES_MODULE = YES;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
+ ENABLE_MODULE_VERIFIER = YES;
+ GENERATE_INFOPLIST_FILE = YES;
+ INFOPLIST_KEY_NSHumanReadableCopyright = "";
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ IPHONEOS_DEPLOYMENT_TARGET = 26.0;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "@executable_path/Frameworks",
+ "@loader_path/Frameworks",
+ );
+ "LD_RUNPATH_SEARCH_PATHS[sdk=macosx*]" = (
+ "@executable_path/../Frameworks",
+ "@loader_path/Frameworks",
+ );
+ MACOSX_DEPLOYMENT_TARGET = 26.0;
+ MARKETING_VERSION = 1.0;
+ MODULE_VERIFIER_SUPPORTED_LANGUAGES = "objective-c objective-c++";
+ MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = "gnu17 gnu++20";
+ PRODUCT_BUNDLE_IDENTIFIER = com.microsoft.maui.EssentialsAI;
+ PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
+ SDKROOT = auto;
+ SKIP_INSTALL = YES;
+ STRING_CATALOG_GENERATE_SYMBOLS = YES;
+ SUPPORTED_PLATFORMS = "appletvos appletvsimulator iphoneos iphonesimulator macosx xros xrsimulator";
+ SUPPORTS_MACCATALYST = YES;
+ SWIFT_APPROACHABLE_CONCURRENCY = YES;
+ SWIFT_EMIT_LOC_STRINGS = YES;
+ SWIFT_INSTALL_MODULE = YES;
+ SWIFT_INSTALL_OBJC_HEADER = YES;
+ SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES;
+ SWIFT_VERSION = 5.0;
+ TARGETED_DEVICE_FAMILY = "1,2,3,7";
+ TVOS_DEPLOYMENT_TARGET = 15.6;
+ XROS_DEPLOYMENT_TARGET = 26.0;
+ };
+ name = Release;
+ };
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+ 34279C8A2EC421CC00583050 /* Build configuration list for PBXProject "EssentialsAI" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 34279C972EC421CC00583050 /* Debug */,
+ 34279C982EC421CC00583050 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ 34279C992EC421CC00583050 /* Build configuration list for PBXNativeTarget "EssentialsAI" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 34279C9A2EC421CC00583050 /* Debug */,
+ 34279C9B2EC421CC00583050 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+/* End XCConfigurationList section */
+ };
+ rootObject = 34279C872EC421CC00583050 /* Project object */;
+}
diff --git a/src/AI/AppleNative/EssentialsAI/EssentialsAI.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/src/AI/AppleNative/EssentialsAI/EssentialsAI.xcodeproj/project.xcworkspace/contents.xcworkspacedata
new file mode 100644
index 000000000..919434a62
--- /dev/null
+++ b/src/AI/AppleNative/EssentialsAI/EssentialsAI.xcodeproj/project.xcworkspace/contents.xcworkspacedata
@@ -0,0 +1,7 @@
+
+
+
+
+
diff --git a/src/AI/AppleNative/EssentialsAI/JsonSchemaDecoder.swift b/src/AI/AppleNative/EssentialsAI/JsonSchemaDecoder.swift
new file mode 100644
index 000000000..13db2498a
--- /dev/null
+++ b/src/AI/AppleNative/EssentialsAI/JsonSchemaDecoder.swift
@@ -0,0 +1,136 @@
+import Foundation
+import FoundationModels
+
+class JsonSchemaDecoder {
+
+ enum SchemaError: Error, LocalizedError {
+ case unsupportedType(String)
+ case missingObjectProperties
+ case missingArrayItems
+
+ var errorDescription: String? {
+ switch self {
+ case .unsupportedType(let type):
+ return "Unsupported JSON schema type '\(type)'"
+ case .missingObjectProperties:
+ return "Object schema missing 'properties'"
+ case .missingArrayItems:
+ return "Array schema missing 'items'"
+ }
+ }
+ }
+
+ /// Simple JSON Schema representation
+ private class JsonSchema: Codable {
+ var type: String?
+ var title: String?
+ var description: String?
+ var properties: [String: JsonSchema]?
+ var required: [String]?
+ var items: JsonSchema?
+ var additionalProperties: Bool?
+ var `enum`: [String]?
+ var minItems: Int?
+ var maxItems: Int?
+
+ static func parse(jsonString: String) throws -> JsonSchema? {
+ // Decode into an object
+ guard let data = jsonString.data(using: .utf8) else {
+ return nil
+ }
+ let jsonSchema = try JSONDecoder().decode(
+ JsonSchema.self,
+ from: data
+ )
+
+ // These seem to be required for tools to be called
+ jsonSchema.type = jsonSchema.type ?? "object"
+ if jsonSchema.type == "object" {
+ jsonSchema.properties = jsonSchema.properties ?? [:]
+ }
+
+ return jsonSchema
+ }
+ }
+
+ /// Some common JSON Schemas
+ static let StringGenerationSchema: GenerationSchema =
+ try! GenerationSchema(
+ root: DynamicGenerationSchema(type: String.self),
+ dependencies: []
+ )
+
+ /// Parse a string into a GenerationSchema
+ static func parse(_ jsonString: String) throws -> GenerationSchema? {
+ // Parse the JSON string
+ guard let jsonSchema = try JsonSchema.parse(jsonString: jsonString)
+ else { return nil }
+
+ // Convert into a DynamicJsonSchema
+ let dynamicSchema = try toDynamicSchema(jsonSchema)
+
+ // Get the final GenerationSchema
+ return try GenerationSchema(root: dynamicSchema, dependencies: [])
+ }
+
+ /// Convert the object representation of a JSON schema into a DynamicGenerationSchema
+ private static func toDynamicSchema(_ schema: JsonSchema) throws
+ -> DynamicGenerationSchema
+ {
+ switch schema.type {
+ // Handle objects with properties
+ case "object":
+ guard let properties = schema.properties else {
+ throw SchemaError.missingObjectProperties
+ }
+ let props = try properties.map { (name, value) in
+ try parseJsonProperty(name, value, schema)
+ }
+ return DynamicGenerationSchema(
+ name: schema.title ?? "Object",
+ description: schema.description,
+ properties: props
+ )
+ // Handle arrays with items
+ case "array":
+ guard let items = schema.items else {
+ throw SchemaError.missingArrayItems
+ }
+ let itemSchema = try toDynamicSchema(items)
+ return DynamicGenerationSchema(
+ arrayOf: itemSchema,
+ minimumElements: schema.minItems,
+ maximumElements: schema.maxItems
+ )
+ // Handle primitive data types
+ case "string":
+ // Support enum values
+ if let enumValues = schema.enum, !enumValues.isEmpty {
+ return DynamicGenerationSchema(type: String.self, guides: [.anyOf(enumValues)])
+ }
+ // No enum values
+ return DynamicGenerationSchema(type: String.self)
+ case "integer": return DynamicGenerationSchema(type: Int.self)
+ case "number": return DynamicGenerationSchema(type: Double.self)
+ case "boolean": return DynamicGenerationSchema(type: Bool.self)
+ default:
+ throw SchemaError.unsupportedType(schema.type ?? "unknown")
+ }
+ }
+
+ private static func parseJsonProperty(
+ _ propertyName: String,
+ _ value: JsonSchema,
+ _ parentSchema: JsonSchema
+ ) throws -> DynamicGenerationSchema.Property {
+ let nestedSchema = try toDynamicSchema(value)
+ let isRequired = parentSchema.required?.contains(propertyName) == true
+ return DynamicGenerationSchema.Property(
+ name: propertyName,
+ description: value.description,
+ schema: nestedSchema,
+ isOptional: !isRequired
+ )
+ }
+
+}
diff --git a/src/AI/AppleNative/EssentialsAI/ToolCallWatcher.swift b/src/AI/AppleNative/EssentialsAI/ToolCallWatcher.swift
new file mode 100644
index 000000000..3fa530c89
--- /dev/null
+++ b/src/AI/AppleNative/EssentialsAI/ToolCallWatcher.swift
@@ -0,0 +1,22 @@
+import Foundation
+
+final class ToolCallWatcher: Sendable {
+ let onToolCall: (@Sendable (String, String, String) -> Void)
+ let onToolResult: (@Sendable (String, String, String) -> Void)
+
+ init(
+ onToolCall: @escaping (@Sendable (String, String, String) -> Void),
+ onToolResult: @escaping (@Sendable (String, String, String) -> Void)
+ ) {
+ self.onToolCall = onToolCall
+ self.onToolResult = onToolResult
+ }
+
+ func notifyToolCall(id: String, name: String, arguments: String) {
+ onToolCall(id, name, arguments)
+ }
+
+ func notifyToolResult(id: String, name: String, result: String) {
+ onToolResult(id, name, result)
+ }
+}
diff --git a/src/AI/AppleNative/EssentialsAI/ToolNative.swift b/src/AI/AppleNative/EssentialsAI/ToolNative.swift
new file mode 100644
index 000000000..944482ee0
--- /dev/null
+++ b/src/AI/AppleNative/EssentialsAI/ToolNative.swift
@@ -0,0 +1,101 @@
+import Foundation
+import FoundationModels
+
+/// Swift wrapper that makes an AIToolBase conform to FoundationModels.Tool protocol
+final class ToolNative: Tool {
+ let tool: AIToolNative
+ let onToolCall: (@Sendable (String, String, String) -> Void)? // id, name, arguments
+ let onToolResult: (@Sendable (String, String, String) -> Void)? // id, name, result
+ let name: String
+ let description: String
+ let parameters: GenerationSchema
+ let output: GenerationSchema
+
+ init(
+ _ tool: AIToolNative,
+ _ onToolCall: (@Sendable (String, String, String) -> Void)?,
+ _ onToolResult: (@Sendable (String, String, String) -> Void)?
+ ) {
+ self.tool = tool
+ self.onToolCall = onToolCall
+ self.onToolResult = onToolResult
+
+ self.name = tool.name
+ self.description = tool.desc
+
+ // Parse the JSON schema for parameters
+ do {
+ self.parameters =
+ try JsonSchemaDecoder.parse(tool.argumentsSchema) ?? JsonSchemaDecoder.StringGenerationSchema
+ } catch {
+ self.parameters = JsonSchemaDecoder.StringGenerationSchema
+ }
+
+ // Parse the JSON schema for output
+ do {
+ self.output =
+ try JsonSchemaDecoder.parse(tool.outputSchema) ?? JsonSchemaDecoder.StringGenerationSchema
+ } catch {
+ self.output = JsonSchemaDecoder.StringGenerationSchema
+ }
+ }
+
+ func call(arguments: Arguments) async throws -> Output {
+ let argumentsJson = arguments.jsonString
+ let callId = arguments.id.map { extractGuid(from: String(describing: $0)) } ?? UUID().uuidString
+
+ // Notify that tool is being called
+ onToolCall?(callId, name, argumentsJson)
+
+ // Call the C# tool
+ let resultJson: String = try await tool.call(arguments: argumentsJson)
+
+ // Notify that tool execution completed
+ onToolResult?(callId, name, resultJson)
+
+ return try Output(json: resultJson)
+ }
+
+ /// Extracts a GUID from a string matching the exact format `GenerationID(value: "UUID")`.
+ /// Returns the original string if the pattern doesn't match.
+ private func extractGuid(from string: String) -> String {
+ // Pattern matches exactly: GenerationID(value: "UUID")
+ let pattern = #"^GenerationID\(value: "([0-9A-Fa-f]{8}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{12})"\)$"#
+
+ guard let regex = try? NSRegularExpression(pattern: pattern),
+ let match = regex.firstMatch(in: string, range: NSRange(string.startIndex..., in: string)),
+ let guidRange = Range(match.range(at: 1), in: string) else {
+ return string
+ }
+
+ return String(string[guidRange])
+ }
+
+ struct Arguments: ConvertibleFromGeneratedContent {
+ let id: GenerationID?
+ let jsonString: String
+ let generatedContent: GeneratedContent
+
+ init(_ content: GeneratedContent) throws {
+ self.id = content.id
+ self.jsonString = content.jsonString
+ self.generatedContent = content
+ }
+ }
+
+ struct Output: ConvertibleToGeneratedContent {
+ let promptRepresentation: Prompt
+ let generatedContent: GeneratedContent
+
+ init(json: String) throws {
+ self.promptRepresentation = .init({ json })
+
+ // Try to parse as JSON, otherwise use as plain text
+ do {
+ self.generatedContent = try .init(json: json)
+ } catch {
+ self.generatedContent = .init(json)
+ }
+ }
+ }
+}
diff --git a/src/AI/AppleNative/StructsAndEnums.cs b/src/AI/AppleNative/StructsAndEnums.cs
new file mode 100644
index 000000000..0078d4207
--- /dev/null
+++ b/src/AI/AppleNative/StructsAndEnums.cs
@@ -0,0 +1,29 @@
+using ObjCRuntime;
+
+namespace Microsoft.Maui.Essentials.AI;
+
+[Native]
+internal enum ChatClientError : long
+{
+ EmptyMessages = 1,
+ InvalidRole = 2,
+ InvalidContent = 3,
+ Cancelled = 4
+}
+
+[Native]
+internal enum ChatRoleNative : long
+{
+ User = 1,
+ Assistant = 2,
+ System = 3,
+ Tool = 4,
+}
+
+[Native]
+internal enum ResponseUpdateTypeNative : long
+{
+ Content = 0,
+ ToolCall = 1,
+ ToolResult = 2
+}
diff --git a/src/AI/EssentialsAI.slnf b/src/AI/EssentialsAI.slnf
new file mode 100644
index 000000000..81f4e6bdc
--- /dev/null
+++ b/src/AI/EssentialsAI.slnf
@@ -0,0 +1,12 @@
+{
+ "solution": {
+ "path": "../../MauiLabs.slnx",
+ "projects": [
+ "samples\\EssentialsAISample\\EssentialsAISample.csproj",
+ "src\\AI\\Microsoft.Maui.Essentials.AI\\Microsoft.Maui.Essentials.AI.csproj",
+ "tests\\AI\\Microsoft.Maui.Essentials.AI.Benchmarks\\Microsoft.Maui.Essentials.AI.Benchmarks.csproj",
+ "tests\\AI\\Microsoft.Maui.Essentials.AI.DeviceTests\\Microsoft.Maui.Essentials.AI.DeviceTests.csproj",
+ "tests\\AI\\Microsoft.Maui.Essentials.AI.UnitTests\\Microsoft.Maui.Essentials.AI.UnitTests.csproj"
+ ]
+ }
+}
diff --git a/src/AI/Microsoft.Maui.Essentials.AI/CONTRIBUTING.md b/src/AI/Microsoft.Maui.Essentials.AI/CONTRIBUTING.md
new file mode 100644
index 000000000..4347aaa06
--- /dev/null
+++ b/src/AI/Microsoft.Maui.Essentials.AI/CONTRIBUTING.md
@@ -0,0 +1,14 @@
+## Generating Files
+
+To generate the API definitions files:
+
+```
+dotnet build src/AI/Microsoft.Maui.Essentials.AI/Microsoft.Maui.Essentials.AI.csproj -f net10.0-ios26.0
+
+sharpie bind \
+ --output=src/AI/Microsoft.Maui.Essentials.AI/Platform/MaciOS \
+ --namespace=Microsoft.Maui.Essentials.AI \
+ --sdk=iphoneos26.1 \
+ --scope=. \
+ artifacts/obj/Microsoft.Maui.Essentials.AI/Debug/net10.0-ios26.0/xcode/{hash}/archives/EssentialsAIiOS.xcarchive/Products/Library/Frameworks/EssentialsAI.framework/Headers/EssentialsAI-Swift.h
+```
\ No newline at end of file
diff --git a/src/AI/Microsoft.Maui.Essentials.AI/DiagnosticIds.cs b/src/AI/Microsoft.Maui.Essentials.AI/DiagnosticIds.cs
new file mode 100644
index 000000000..2573c8138
--- /dev/null
+++ b/src/AI/Microsoft.Maui.Essentials.AI/DiagnosticIds.cs
@@ -0,0 +1,24 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+
+namespace Microsoft.Maui.Essentials.AI;
+
+///
+/// Diagnostic IDs for the Microsoft.Maui.Essentials.AI package.
+///
+internal static class DiagnosticIds
+{
+ ///
+ /// Experimental API diagnostic IDs.
+ ///
+ ///
+ /// All Essentials.AI experiments share a single diagnostic ID so consumers
+ /// only need one suppression to opt in: <NoWarn>MAUIAI0001</NoWarn>.
+ /// Individual constants exist per feature area so that APIs can be graduated
+ /// to stable independently in the future by assigning distinct IDs.
+ ///
+ internal static class Experiments
+ {
+ internal const string EssentialsAI = "MAUIAI0001";
+ }
+}
diff --git a/src/AI/Microsoft.Maui.Essentials.AI/Microsoft.Maui.Essentials.AI.csproj b/src/AI/Microsoft.Maui.Essentials.AI/Microsoft.Maui.Essentials.AI.csproj
new file mode 100644
index 000000000..b25bd939f
--- /dev/null
+++ b/src/AI/Microsoft.Maui.Essentials.AI/Microsoft.Maui.Essentials.AI.csproj
@@ -0,0 +1,53 @@
+
+
+ net10.0;net10.0-android;net10.0-ios;net10.0-maccatalyst;net10.0-macos;net10.0-windows10.0.19041.0
+ Microsoft.Maui.Essentials.AI
+ Microsoft.Maui.Essentials.AI
+ true
+ true
+ true
+ true
+ true
+
+ $(NoWarn);CA1416
+
+
+
+ true
+ true
+ Microsoft.Maui.Essentials.AI
+
+ true
+ preview
+ $(EssentialsAIPreviewVersionIteration)
+ $(DefaultPackageTags);essentials;ai
+ .NET Multi-platform App UI (.NET MAUI) is a cross-platform framework for creating native mobile and desktop apps with C# and XAML. This package contains a collection of cross-platform APIs for working with device AI and local models.
+ false
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ EssentialsAI
+
+
+
+
+
+
diff --git a/src/AI/Microsoft.Maui.Essentials.AI/Platform/JsonStreamChunker.cs b/src/AI/Microsoft.Maui.Essentials.AI/Platform/JsonStreamChunker.cs
new file mode 100644
index 000000000..479cf2c36
--- /dev/null
+++ b/src/AI/Microsoft.Maui.Essentials.AI/Platform/JsonStreamChunker.cs
@@ -0,0 +1,1552 @@
+using System.Text;
+using System.Text.Json;
+
+namespace Microsoft.Maui.Essentials.AI;
+
+///
+/// Converts complete JSON objects (from an AI model that post-processes its output) back into
+/// streaming chunks. The AI model receives progressive JSON internally but outputs complete
+/// valid JSON objects each time, sometimes with reordered properties.
+///
+///
+///
+/// Problem: AI models may output complete JSON objects at each step, but we want to
+/// stream partial output to the user for better UX.
+///
+///
+/// Solution: This chunker compares successive complete JSON snapshots and emits only
+/// the delta (new/changed content) as streaming chunks.
+///
+///
+/// Key Design Principles:
+///
+/// - Growable types (strings, arrays, objects) are potentially partial until proven complete
+/// - Non-growable types (numbers, bools, null) are always emitted complete immediately
+/// - Multiple new growables at same level → add to pending, wait for next chunk to disambiguate
+/// - Use path-based tracking (e.g., "days[0].title") not position-based
+/// - Properties only grow or stay same - never shrink or disappear
+///
+///
+///
+/// See json-stream-chunker-design.md for full algorithm documentation.
+///
+///
+internal sealed class JsonStreamChunker : StreamChunkerBase
+{
+ // ═══════════════════════════════════════════════════════════════════════════════════════════
+ // STATE TRACKING
+ // ═══════════════════════════════════════════════════════════════════════════════════════════
+
+ /// Flattened path→value dictionary from the previous chunk.
+ private Dictionary? _prevState;
+
+ /// Path of the currently open string (no closing quote emitted yet).
+ private string? _openStringPath;
+
+ /// Tracks emitted string values by path for extension detection.
+ private readonly Dictionary _emittedStrings = new();
+
+ /// Strings waiting for next chunk to determine which is the active/partial one.
+ private readonly Dictionary _pendingStrings = new();
+
+ /// Containers (arrays/objects) waiting for next chunk to see if they grow.
+ /// Key is path, Value is true for array, false for object.
+ private readonly Dictionary _pendingContainers = new();
+
+ /// All paths we've already output (for comma management).
+ private readonly HashSet _emittedPaths = new();
+
+ /// Stack of open containers (objects/arrays) for proper closing.
+ private readonly Stack<(string Path, bool IsArray)> _openStructures = new();
+
+ /// Represents a JSON value with its kind and content.
+ private record struct JsonValue(JsonValueKind Kind, string? StringValue, string? RawValue);
+
+ // ═══════════════════════════════════════════════════════════════════════════════════════════
+ // HELPER: Is this a "growable" value type?
+ // ═══════════════════════════════════════════════════════════════════════════════════════════
+
+ ///
+ /// Returns true if the JSON value kind is a "growable" type (string, array, object).
+ /// Growable types may be partial and need special handling.
+ ///
+ private static bool IsGrowable(JsonValueKind kind) =>
+ kind == JsonValueKind.String || kind == JsonValueKind.Array || kind == JsonValueKind.Object;
+
+ ///
+ /// Closes any currently open string by emitting the closing quote.
+ ///
+ private void CloseOpenString(StringBuilder sb)
+ {
+ if (_openStringPath != null)
+ {
+ sb.Append('"');
+ _openStringPath = null;
+ }
+ }
+
+ ///
+ /// Emits and removes any pending items that are children of the given path.
+ /// Used when we know a subtree is complete (e.g., moving to next array item in first chunk).
+ ///
+ private void EmitPendingItemsUnder(StringBuilder sb, string parentPath)
+ {
+ // Find pending strings under this path
+ var stringsToEmit = _pendingStrings
+ .Where(kvp => kvp.Key.StartsWith(parentPath + ".", StringComparison.Ordinal) ||
+ kvp.Key.StartsWith(parentPath + "[", StringComparison.Ordinal))
+ .OrderBy(kvp => kvp.Key)
+ .ToList();
+
+ foreach (var (path, value) in stringsToEmit)
+ {
+ EmitPendingString(sb, path, value, keepOpen: false);
+ _pendingStrings.Remove(path);
+ }
+
+ // Find pending containers under this path
+ var containersToEmit = _pendingContainers
+ .Where(kvp => kvp.Key.StartsWith(parentPath + ".", StringComparison.Ordinal) ||
+ kvp.Key.StartsWith(parentPath + "[", StringComparison.Ordinal))
+ .OrderBy(kvp => kvp.Key)
+ .ToList();
+
+ foreach (var (path, isArray) in containersToEmit)
+ {
+ var (containerParent, propName) = SplitPath(path);
+ CloseStructuresDownTo(sb, containerParent);
+
+ if (HasEmittedSiblingAt(containerParent))
+ sb.Append(',');
+
+ sb.Append("\"" + Escape(propName) + "\":");
+ sb.Append(isArray ? "[]" : "{}");
+ _emittedPaths.Add(path);
+ _pendingContainers.Remove(path);
+ }
+ }
+
+ // ═══════════════════════════════════════════════════════════════════════════════════════════
+ // PUBLIC API
+ // ═══════════════════════════════════════════════════════════════════════════════════════════
+
+ ///
+ /// Processes a complete JSON snapshot and returns a streaming chunk representing the delta.
+ ///
+ /// A complete, valid JSON object representing the current state.
+ /// A string chunk to emit (may be empty if no output yet). Concatenating all chunks yields valid JSON.
+ ///
+ /// Call this method for each complete JSON object received from the AI model.
+ /// The chunker maintains state between calls to track what has been emitted.
+ ///
+ public override string Process(string completeJson)
+ {
+ if (string.IsNullOrWhiteSpace(completeJson))
+ return string.Empty;
+
+ JsonDocument doc;
+ try
+ {
+ doc = JsonDocument.Parse(completeJson);
+ }
+ catch
+ {
+ return string.Empty;
+ }
+
+ using (doc)
+ {
+ var currState = FlattenJson(doc.RootElement, "");
+
+ string result;
+ if (_prevState == null)
+ {
+ // First chunk - emit structure with strings potentially open
+ result = ProcessFirstChunk(currState, doc.RootElement);
+ }
+ else
+ {
+ // Subsequent chunk - compare and emit deltas
+ result = ProcessSubsequentChunk(currState, doc.RootElement);
+ }
+
+ _prevState = currState;
+ return result;
+ }
+ }
+
+ ///
+ /// Flushes any remaining state and closes all open structures.
+ ///
+ /// Final chunk to complete the JSON output (may be empty).
+ ///
+ /// Must be called after all JSON snapshots have been processed to properly close
+ /// any pending strings and open containers (objects/arrays).
+ ///
+ public override string Flush()
+ {
+ var sb = new StringBuilder();
+
+ // Emit any pending strings that never got disambiguated
+ if (_pendingStrings.Count > 0)
+ {
+ foreach (var (path, value) in _pendingStrings.OrderBy(p => p.Key))
+ EmitPendingString(sb, path, value, keepOpen: false);
+ _pendingStrings.Clear();
+ }
+
+ // Emit any pending containers that never got disambiguated
+ if (_pendingContainers.Count > 0)
+ {
+ foreach (var (path, isArray) in _pendingContainers.OrderBy(p => p.Key))
+ {
+ var (parentPath, propName) = SplitPath(path);
+ CloseStructuresDownTo(sb, parentPath);
+
+ if (HasEmittedSiblingAt(parentPath))
+ sb.Append(',');
+
+ sb.Append("\"" + Escape(propName) + "\":");
+ sb.Append(isArray ? "[]" : "{}");
+ _emittedPaths.Add(path);
+ }
+ _pendingContainers.Clear();
+ }
+
+ // Close any open string
+ CloseOpenString(sb);
+
+ // Close all open structures (objects/arrays)
+ while (_openStructures.Count > 0)
+ {
+ var (_, isArray) = _openStructures.Pop();
+ sb.Append(isArray ? ']' : '}');
+ }
+
+ return sb.ToString();
+ }
+
+ ///
+ public override void Reset()
+ {
+ // Setting _prevState to null causes the next Process() call to treat the
+ // incoming JSON as a "first chunk" (see the _prevState == null check in
+ // Process), which is the intended behavior after a reset — the chunker
+ // should emit the full initial structure for the new stream rather than
+ // computing a delta against stale state from before the reset.
+ _prevState = null;
+ _openStringPath = null;
+ _emittedStrings.Clear();
+ _pendingStrings.Clear();
+ _pendingContainers.Clear();
+ _emittedPaths.Clear();
+ _openStructures.Clear();
+ }
+
+ // ═══════════════════════════════════════════════════════════════════════════════════════════
+ // FIRST CHUNK PROCESSING
+ // ═══════════════════════════════════════════════════════════════════════════════════════════
+
+ ///
+ /// Processes the first JSON chunk - emits initial structure with strings potentially open.
+ ///
+ private string ProcessFirstChunk(Dictionary state, JsonElement elem)
+ {
+ var sb = new StringBuilder();
+ sb.Append('{');
+ _openStructures.Push(("", false));
+ _emittedPaths.Add("");
+
+ // Group strings by parent to determine if we have multiple at same level (ambiguous)
+ var stringsByParent = GroupStringsByParent(state);
+ EmitStructure(sb, elem, "", state, stringsByParent);
+
+ return sb.ToString();
+ }
+
+ // ═══════════════════════════════════════════════════════════════════════════════════════════
+ // SUBSEQUENT CHUNK PROCESSING
+ // ═══════════════════════════════════════════════════════════════════════════════════════════
+
+ ///
+ /// Processes subsequent chunks - compares with previous state and emits deltas.
+ ///
+ private string ProcessSubsequentChunk(Dictionary currState, JsonElement currElem)
+ {
+ var sb = new StringBuilder();
+
+ // Step 1: Handle any currently open string (check if it changed, has new sibling, or parent changed)
+ if (_openStringPath != null)
+ HandleOpenString(sb, currState);
+
+ // Step 2: Resolve any pending items (strings and containers) from previous chunk
+ if (_pendingStrings.Count > 0 || _pendingContainers.Count > 0)
+ ResolvePendingItems(sb, currState, currElem);
+
+ // Step 3: Process new content (new properties, new array items)
+ ProcessNewContent(sb, _prevState!, currState, currElem, "");
+
+ return sb.ToString();
+ }
+
+ ///
+ /// Handles an open string from the previous chunk.
+ /// Determines if string is complete (has new sibling or parent changed) or still growing.
+ ///
+ ///
+ /// String completion rules:
+ /// 1. New sibling at same level → string is complete (close it)
+ /// 2. Parent-level change (e.g., new array item) → string is complete (close it)
+ /// 3. Value changed but no sibling/parent change → emit extension, keep open
+ /// 4. Value unchanged → string is complete (close it)
+ ///
+ private void HandleOpenString(StringBuilder sb, Dictionary currState)
+ {
+ if (_openStringPath == null)
+ return;
+
+ var emitted = _emittedStrings.GetValueOrDefault(_openStringPath, "");
+ var curr = currState.TryGetValue(_openStringPath, out var currVal) && currVal.Kind == JsonValueKind.String
+ ? currVal.StringValue ?? ""
+ : "";
+
+ var parentPath = GetParentPath(_openStringPath);
+ bool hasNewSibling = HasNewSiblingAt(parentPath, _prevState!, currState);
+ bool hasParentChange = HasParentLevelChange(_openStringPath, _prevState!, currState);
+
+ if (hasNewSibling || hasParentChange)
+ {
+ // String is complete - emit any remaining extension and close
+ if (curr != emitted && curr.Length > emitted.Length)
+ sb.Append(Escape(curr.Substring(emitted.Length)));
+ sb.Append('"');
+ _openStringPath = null;
+ }
+ else if (curr != emitted)
+ {
+ // String changed but no completion signal - emit extension, keep open
+ if (curr.Length > emitted.Length)
+ sb.Append(Escape(curr.Substring(emitted.Length)));
+ _emittedStrings[_openStringPath] = curr;
+ }
+ else
+ {
+ // Value unchanged - string is complete
+ sb.Append('"');
+ _openStringPath = null;
+ }
+ }
+
+ ///
+ /// Resolves pending items (strings and containers) from previous chunk by comparing current values.
+ ///
+ ///
+ /// When we had multiple new growables at the same level, we couldn't tell which was partial.
+ /// Now we can compare: items that didn't change are complete, the one that changed is the active one.
+ ///
+ private void ResolvePendingItems(StringBuilder sb, Dictionary currState, JsonElement currElem)
+ {
+ // Determine which pending item changed
+ string? changedStringPath = null;
+ string? changedStringValue = null;
+ string? changedContainerPath = null;
+ var completeStrings = new List<(string Path, string Value)>();
+ var completeContainers = new List<(string Path, bool IsArray)>();
+
+ // Check pending strings
+ foreach (var (path, storedValue) in _pendingStrings)
+ {
+ if (!currState.TryGetValue(path, out var currVal) || currVal.Kind != JsonValueKind.String)
+ continue;
+
+ var currValue = currVal.StringValue ?? "";
+ if (currValue == storedValue)
+ {
+ // Unchanged - this one is complete
+ completeStrings.Add((path, currValue));
+ }
+ else
+ {
+ // Changed - this is the active/partial string
+ changedStringPath = path;
+ changedStringValue = currValue;
+ }
+ }
+
+ // Check pending containers
+ foreach (var (path, isArray) in _pendingContainers)
+ {
+ bool containerChanged = HasContainerGrown(path, _prevState!, currState);
+ if (containerChanged)
+ {
+ // Container grew - it's the active one
+ changedContainerPath = path;
+ }
+ else
+ {
+ // Unchanged - complete
+ completeContainers.Add((path, isArray));
+ }
+ }
+
+ // Emit all complete items first
+ // Sort by path to maintain consistent order
+ var allComplete = completeStrings.Select(s => (s.Path, IsString: true, Value: s.Value, IsArray: false))
+ .Concat(completeContainers.Select(c => (c.Path, IsString: false, Value: "", c.IsArray)))
+ .OrderBy(x => x.Path)
+ .ToList();
+
+ foreach (var item in allComplete)
+ {
+ if (item.IsString)
+ {
+ EmitPendingString(sb, item.Path, item.Value, keepOpen: false);
+ }
+ else
+ {
+ EmitPendingContainer(sb, item.Path, item.IsArray, currElem, currState, complete: true);
+ }
+ }
+
+ // Emit the changed item (potentially still open/growing)
+ if (changedStringPath != null && changedStringValue != null)
+ {
+ EmitPendingString(sb, changedStringPath, changedStringValue, keepOpen: true);
+
+ // Check if it should be closed due to sibling
+ if (HasNewSiblingAt(GetParentPath(changedStringPath), _prevState!, currState))
+ {
+ sb.Append('"');
+ _openStringPath = null;
+ }
+ }
+ else if (changedContainerPath != null)
+ {
+ bool isArray = _pendingContainers[changedContainerPath];
+ EmitPendingContainer(sb, changedContainerPath, isArray, currElem, currState, complete: false);
+ }
+
+ // Remove only the items that were pending when we entered this method.
+ // Don't clear everything - EmitPendingContainer may have added NEW pending items
+ // when processing nested content.
+ foreach (var (path, _) in completeStrings)
+ _pendingStrings.Remove(path);
+ if (changedStringPath != null)
+ _pendingStrings.Remove(changedStringPath);
+
+ foreach (var (path, _) in completeContainers)
+ _pendingContainers.Remove(path);
+ if (changedContainerPath != null)
+ _pendingContainers.Remove(changedContainerPath);
+ }
+
+ ///
+ /// Checks if a container (array or object) has grown since previous state.
+ ///
+ private bool HasContainerGrown(string path, Dictionary prevState, Dictionary currState)
+ {
+ // Check if any children were added or changed
+ var prevChildren = prevState.Keys.Where(k => k.StartsWith(path + ".") || k.StartsWith(path + "[")).ToHashSet();
+ var currChildren = currState.Keys.Where(k => k.StartsWith(path + ".") || k.StartsWith(path + "[")).ToHashSet();
+
+ // Container grew if there are new keys that weren't in prevChildren
+ // This handles the case where days[0] (empty object) becomes days[0].activities[0].title
+ return !currChildren.SetEquals(prevChildren);
+ }
+
+ ///
+ /// Emits a pending container (array or object) that has been resolved.
+ ///
+ private void EmitPendingContainer(StringBuilder sb, string path, bool isArray, JsonElement currElem, Dictionary currState, bool complete)
+ {
+ var (parentPath, propName) = SplitPath(path);
+ CloseStructuresDownTo(sb, parentPath);
+
+ if (HasEmittedSiblingAt(parentPath))
+ sb.Append(',');
+
+ // Get the actual element at this path
+ var elem = GetElementAtPath(currElem, path);
+
+ sb.Append("\"" + Escape(propName) + "\":");
+ _emittedPaths.Add(path);
+
+ if (isArray)
+ {
+ sb.Append('[');
+ if (complete)
+ {
+ // Emit complete array content
+ if (elem.HasValue && elem.Value.ValueKind == JsonValueKind.Array)
+ EmitCompleteArrayContent(sb, elem.Value, path);
+ sb.Append(']');
+ }
+ else
+ {
+ // Array is still growing - push to open structures
+ _openStructures.Push((path, true));
+ if (elem.HasValue && elem.Value.ValueKind == JsonValueKind.Array)
+ EmitArrayContent(sb, elem.Value, path);
+ }
+ }
+ else
+ {
+ sb.Append('{');
+ if (complete)
+ {
+ // Emit complete object content
+ if (elem.HasValue && elem.Value.ValueKind == JsonValueKind.Object)
+ EmitCompleteObjectContent(sb, elem.Value, path);
+ sb.Append('}');
+ }
+ else
+ {
+ // Object is still growing - push to open structures
+ _openStructures.Push((path, false));
+ if (elem.HasValue && elem.Value.ValueKind == JsonValueKind.Object)
+ EmitObjectContent(sb, elem.Value, path);
+ }
+ }
+ }
+
+ ///
+ /// Emits complete array content (all closed).
+ ///
+ private void EmitCompleteArrayContent(StringBuilder sb, JsonElement elem, string path)
+ {
+ int idx = 0;
+ foreach (var item in elem.EnumerateArray())
+ {
+ if (idx > 0)
+ sb.Append(',');
+
+ var itemPath = path + "[" + idx + "]";
+ _emittedPaths.Add(itemPath);
+ EmitCompleteValue(sb, item, itemPath);
+ idx++;
+ }
+ }
+
+ ///
+ /// Emits complete object content (all closed).
+ ///
+ private void EmitCompleteObjectContent(StringBuilder sb, JsonElement elem, string path)
+ {
+ bool isFirst = true;
+ foreach (var prop in elem.EnumerateObject())
+ {
+ if (!isFirst)
+ sb.Append(',');
+ isFirst = false;
+
+ var propPath = CombinePath(path, prop.Name);
+ sb.Append("\"" + Escape(prop.Name) + "\":");
+ _emittedPaths.Add(propPath);
+ EmitCompleteValue(sb, prop.Value, propPath);
+ }
+ }
+
+ ///
+ /// Emits a complete (closed) JSON value at the given path.
+ /// Used for values that are fully resolved and should not be left open.
+ ///
+ private void EmitCompleteValue(StringBuilder sb, JsonElement elem, string path)
+ {
+ switch (elem.ValueKind)
+ {
+ case JsonValueKind.Object:
+ sb.Append('{');
+ EmitCompleteObjectContent(sb, elem, path);
+ sb.Append('}');
+ break;
+ case JsonValueKind.Array:
+ sb.Append('[');
+ EmitCompleteArrayContent(sb, elem, path);
+ sb.Append(']');
+ break;
+ case JsonValueKind.String:
+ sb.Append('"');
+ sb.Append(Escape(elem.GetString() ?? ""));
+ sb.Append('"');
+ _emittedStrings[path] = elem.GetString() ?? "";
+ break;
+ default:
+ sb.Append(elem.GetRawText());
+ break;
+ }
+ }
+
+ ///
+ /// Gets a JSON element at the specified path.
+ ///
+ private static JsonElement? GetElementAtPath(JsonElement root, string path)
+ {
+ if (string.IsNullOrEmpty(path))
+ return root;
+
+ var current = root;
+ var segments = ParsePath(path);
+
+ foreach (var segment in segments)
+ {
+ if (segment.StartsWith("[") && segment.EndsWith("]"))
+ {
+ // Array index
+ var idxStr = segment.Substring(1, segment.Length - 2);
+ if (int.TryParse(idxStr, out var idx) && current.ValueKind == JsonValueKind.Array && idx < current.GetArrayLength())
+ current = current[idx];
+ else
+ return null;
+ }
+ else
+ {
+ // Property name
+ if (current.ValueKind == JsonValueKind.Object && current.TryGetProperty(segment, out var prop))
+ current = prop;
+ else
+ return null;
+ }
+ }
+
+ return current;
+ }
+
+ ///
+ /// Parses a path into segments.
+ ///
+ private static List ParsePath(string path)
+ {
+ var segments = new List();
+ var current = new StringBuilder();
+
+ for (int i = 0; i < path.Length; i++)
+ {
+ char c = path[i];
+ if (c == '.')
+ {
+ if (current.Length > 0)
+ {
+ segments.Add(current.ToString());
+ current.Clear();
+ }
+ }
+ else if (c == '[')
+ {
+ if (current.Length > 0)
+ {
+ segments.Add(current.ToString());
+ current.Clear();
+ }
+ // Find matching ]
+ int end = path.IndexOf(']', i);
+ if (end > i)
+ {
+ segments.Add(path.Substring(i, end - i + 1));
+ i = end;
+ }
+ }
+ else
+ {
+ current.Append(c);
+ }
+ }
+
+ if (current.Length > 0)
+ segments.Add(current.ToString());
+
+ return segments;
+ }
+
+ ///
+ /// Recursively processes new content by comparing previous and current state.
+ ///
+ private void ProcessNewContent(StringBuilder sb, Dictionary prevState,
+ Dictionary currState, JsonElement currElem, string path)
+ {
+ if (currElem.ValueKind == JsonValueKind.Object)
+ ProcessObjectChanges(sb, prevState, currState, currElem, path);
+ else if (currElem.ValueKind == JsonValueKind.Array)
+ ProcessArrayChanges(sb, prevState, currState, currElem, path);
+ }
+
+ ///
+ /// Processes changes within an object - identifies new properties and recurses into existing ones.
+ ///
+ private void ProcessObjectChanges(StringBuilder sb, Dictionary prevState,
+ Dictionary currState, JsonElement currElem, string path)
+ {
+ var prevProps = GetPropertiesAtPath(prevState, path);
+ var newStringProps = new List<(string Name, JsonElement Value, string Path)>();
+ var newContainerProps = new List<(string Name, JsonElement Value, string Path, bool IsArray)>();
+ var newNonGrowableProps = new List<(string Name, JsonElement Value, string Path)>();
+ int newGrowablesCount = 0;
+
+ foreach (var prop in currElem.EnumerateObject())
+ {
+ var propPath = CombinePath(path, prop.Name);
+
+ if (prevProps.Contains(prop.Name))
+ {
+ // Existing property - recurse into non-strings (strings handled elsewhere)
+ if (prop.Value.ValueKind != JsonValueKind.String)
+ ProcessNewContent(sb, prevState, currState, prop.Value, propPath);
+ }
+ else
+ {
+ // Skip if already emitted (e.g., during pending resolution)
+ if (_emittedPaths.Contains(propPath))
+ continue;
+
+ // New property - categorize it
+ switch (prop.Value.ValueKind)
+ {
+ case JsonValueKind.String:
+ newGrowablesCount++;
+ newStringProps.Add((prop.Name, prop.Value, propPath));
+ break;
+ case JsonValueKind.Array:
+ newGrowablesCount++;
+ newContainerProps.Add((prop.Name, prop.Value, propPath, true));
+ break;
+ case JsonValueKind.Object:
+ newGrowablesCount++;
+ newContainerProps.Add((prop.Name, prop.Value, propPath, false));
+ break;
+ default:
+ newNonGrowableProps.Add((prop.Name, prop.Value, propPath));
+ break;
+ }
+ }
+ }
+
+ // Emit non-growable properties immediately
+ foreach (var (name, value, propPath) in newNonGrowableProps)
+ EmitNewProperty(sb, name, value, propPath, path);
+
+ // Handle new growable properties
+ if (newGrowablesCount == 1)
+ {
+ // Only one growable - emit it appropriately
+ if (newStringProps.Count == 1 && _openStringPath == null)
+ {
+ var (name, value, propPath) = newStringProps[0];
+ EmitNewStringProperty(sb, name, value.GetString() ?? "", propPath, path, keepOpen: true);
+ }
+ else if (newStringProps.Count == 1)
+ {
+ // Already have open string - add to pending
+ foreach (var (_, value, propPath) in newStringProps)
+ _pendingStrings[propPath] = value.GetString() ?? "";
+ }
+ else if (newContainerProps.Count == 1)
+ {
+ var (name, value, propPath, isArray) = newContainerProps[0];
+ EmitNewProperty(sb, name, value, propPath, path);
+ }
+ }
+ else if (newGrowablesCount > 1)
+ {
+ // Multiple growables - add all to pending
+ foreach (var (_, value, propPath) in newStringProps)
+ _pendingStrings[propPath] = value.GetString() ?? "";
+ foreach (var (_, _, propPath, isArray) in newContainerProps)
+ _pendingContainers[propPath] = isArray;
+ }
+ }
+
+ ///
+ /// Processes changes within an array - identifies new items and recurses into existing ones.
+ ///
+ private void ProcessArrayChanges(StringBuilder sb, Dictionary prevState,
+ Dictionary currState, JsonElement currElem, string path)
+ {
+ int prevCount = GetArrayCountAtPath(prevState, path);
+ var items = currElem.EnumerateArray().ToList();
+
+ for (int idx = 0; idx < items.Count; idx++)
+ {
+ var item = items[idx];
+ var itemPath = path + "[" + idx + "]";
+
+ if (idx < prevCount)
+ {
+ // Existing item - recurse into non-strings
+ if (item.ValueKind != JsonValueKind.String)
+ ProcessNewContent(sb, prevState, currState, item, itemPath);
+ }
+ else
+ {
+ // New array item - skip if already emitted (e.g., during pending resolution)
+ if (_emittedPaths.Contains(itemPath))
+ continue;
+
+ EmitNewArrayItem(sb, item, itemPath, path, needsComma: idx > 0 || prevCount > 0);
+ }
+ }
+ }
+
+ // ═══════════════════════════════════════════════════════════════════════════════════════════
+ // VALUE EMISSION (for subsequent chunks)
+ // ═══════════════════════════════════════════════════════════════════════════════════════════
+
+ ///
+ /// Emits a string property with the given name, value, and path.
+ /// Optionally closes any open string first and keeps the new string open.
+ ///
+ private void EmitString(StringBuilder sb, string name, string value, string path, string parentPath, bool closeExisting, bool keepOpen)
+ {
+ if (closeExisting)
+ CloseOpenString(sb);
+
+ CloseStructuresDownTo(sb, parentPath);
+
+ if (HasEmittedSiblingAt(parentPath))
+ sb.Append(',');
+
+ sb.Append("\"" + Escape(name) + "\":\"" + Escape(value));
+
+ if (keepOpen)
+ _openStringPath = path;
+ else
+ sb.Append('"');
+
+ _emittedStrings[path] = value;
+ _emittedPaths.Add(path);
+ }
+
+ ///
+ /// Emits a pending string that has been resolved.
+ ///
+ private void EmitPendingString(StringBuilder sb, string path, string value, bool keepOpen)
+ {
+ var (parentPath, propName) = SplitPath(path);
+ EmitString(sb, propName, value, path, parentPath, closeExisting: true, keepOpen);
+ }
+
+ ///
+ /// Emits a new string property (just discovered in current chunk).
+ ///
+ private void EmitNewStringProperty(StringBuilder sb, string name, string value, string path, string parentPath, bool keepOpen) =>
+ EmitString(sb, name, value, path, parentPath, closeExisting: false, keepOpen);
+
+ ///
+ /// Emits a new non-string property (numbers, bools, null, objects, arrays).
+ ///
+ private void EmitNewProperty(StringBuilder sb, string name, JsonElement value, string path, string parentPath)
+ {
+ CloseOpenString(sb);
+ CloseStructuresDownTo(sb, parentPath);
+
+ if (HasEmittedSiblingAt(parentPath))
+ sb.Append(',');
+
+ sb.Append("\"" + Escape(name) + "\":");
+ EmitValue(sb, value, path);
+ _emittedPaths.Add(path);
+ }
+
+ ///
+ /// Emits a new array item.
+ ///
+ private void EmitNewArrayItem(StringBuilder sb, JsonElement value, string path, string arrayPath, bool needsComma)
+ {
+ CloseOpenString(sb);
+ CloseStructuresDownTo(sb, arrayPath);
+
+ if (needsComma)
+ sb.Append(',');
+
+ if (value.ValueKind == JsonValueKind.Object)
+ {
+ sb.Append('{');
+ _openStructures.Push((path, false));
+ _emittedPaths.Add(path);
+ EmitObjectContent(sb, value, path);
+ }
+ else if (value.ValueKind == JsonValueKind.Array)
+ {
+ sb.Append('[');
+ _openStructures.Push((path, true));
+ _emittedPaths.Add(path);
+ EmitArrayContent(sb, value, path);
+ }
+ else
+ {
+ EmitValue(sb, value, path);
+ _emittedPaths.Add(path);
+ }
+ }
+
+ #region Structure Emission (First Chunk)
+
+ ///
+ /// Recursively emits structure for first chunk processing.
+ ///
+ private void EmitStructure(StringBuilder sb, JsonElement elem, string path,
+ Dictionary state, Dictionary> stringsByParent)
+ {
+ if (elem.ValueKind == JsonValueKind.Object)
+ EmitObjectStructure(sb, elem, path, state, stringsByParent);
+ else if (elem.ValueKind == JsonValueKind.Array)
+ EmitArrayStructure(sb, elem, path, state, stringsByParent);
+ }
+
+ ///
+ /// Emits object structure for first chunk. Handles string ambiguity (single vs multiple growables).
+ ///
+ private void EmitObjectStructure(StringBuilder sb, JsonElement elem, string path,
+ Dictionary state, Dictionary> stringsByParent)
+ {
+ var stringsAtLevel = stringsByParent.GetValueOrDefault(path, new List());
+ int growablesAtLevel = CountGrowablesAtLevel(elem, path);
+ bool isFirst = true;
+
+ foreach (var prop in elem.EnumerateObject())
+ {
+ var propPath = CombinePath(path, prop.Name);
+
+ if (prop.Value.ValueKind == JsonValueKind.String)
+ {
+ // If only 1 growable at this level AND it's this string, emit it open
+ // Otherwise, add to pending (we can't tell which growable will grow)
+ if (growablesAtLevel == 1 && stringsAtLevel.Count == 1)
+ {
+ // Single growable and it's a string - emit it open (potentially partial)
+ if (!isFirst)
+ sb.Append(',');
+ isFirst = false;
+ sb.Append("\"" + Escape(prop.Name) + "\":\"" + Escape(prop.Value.GetString() ?? ""));
+ _openStringPath = propPath;
+ _emittedStrings[propPath] = prop.Value.GetString() ?? "";
+ _emittedPaths.Add(propPath);
+ }
+ else
+ {
+ // Multiple growables at this level - add string to pending
+ _pendingStrings[propPath] = prop.Value.GetString() ?? "";
+ }
+ }
+ else if (prop.Value.ValueKind == JsonValueKind.Object || prop.Value.ValueKind == JsonValueKind.Array)
+ {
+ // Container property (array or object) - may be growable
+ bool isArray = prop.Value.ValueKind == JsonValueKind.Array;
+
+ if (growablesAtLevel == 1)
+ {
+ // Single growable - emit structure
+ if (!isFirst)
+ sb.Append(',');
+ isFirst = false;
+ sb.Append("\"" + Escape(prop.Name) + "\":");
+ _emittedPaths.Add(propPath);
+
+ sb.Append(isArray ? '[' : '{');
+ _openStructures.Push((propPath, isArray));
+ EmitStructure(sb, prop.Value, propPath, state, stringsByParent);
+ }
+ else
+ {
+ // Multiple growables at this level - add container to pending
+ _pendingContainers[propPath] = isArray;
+ }
+ }
+ else
+ {
+ // Non-growable property (number, bool, null) - emit immediately
+ if (!isFirst)
+ sb.Append(',');
+ isFirst = false;
+ sb.Append("\"" + Escape(prop.Name) + "\":");
+ _emittedPaths.Add(propPath);
+ EmitValue(sb, prop.Value, propPath);
+ }
+ }
+ }
+
+ ///
+ /// Emits array structure for first chunk.
+ ///
+ private void EmitArrayStructure(StringBuilder sb, JsonElement elem, string path,
+ Dictionary state, Dictionary