diff --git a/.gitignore b/.gitignore index e0c520e..7f3551a 100644 --- a/.gitignore +++ b/.gitignore @@ -39,6 +39,7 @@ Pods/ # APK files apps/ +airlines/ # Claude .claude/ diff --git a/AIRLINE_API_SPEC.md b/AIRLINE_API_SPEC.md deleted file mode 100644 index df12197..0000000 --- a/AIRLINE_API_SPEC.md +++ /dev/null @@ -1,792 +0,0 @@ -# Airline Flight Load API Specification - -Integration-ready API reference for querying flight loads, standby lists, and seat availability across 7 airlines. All endpoints confirmed working as of April 2026. - ---- - -## Architecture Overview - -All airlines except Spirit require **Playwright** (headless browser) to bypass Akamai TLS fingerprinting. The pattern is: -1. Navigate to the airline's domain to establish a browser session -2. Use `page.evaluate(async () => { const r = await fetch(...); return r.json(); })` to call APIs from within the browser context - -Spirit works with plain HTTP requests (curl/fetch). - ---- - -## UNITED AIRLINES - -### Base Setup -``` -Domain: https://www.united.com -Auth: Anonymous token (no login required) -Method: Playwright → navigate to united.com → page.evaluate(fetch) -``` - -### Step 1: Get Token -``` -GET /api/auth/anonymous-token -Headers: none required -``` -**Response:** -```json -{ - "data": { - "token": { - "hash": "DAAAA...", - "expiresAt": "2026-04-08T19:42:57Z" - } - } -} -``` -Token is valid ~30 minutes. Refresh as needed. - -### Step 2: Search Flights by Route -``` -GET /api/flightstatus/status/{flightNumber}/{date}?carrierCode=UA&useLegDestDate=true - -Path params: - flightNumber: "2238" - date: "2026-04-08" - -Headers: - x-authorization-api: bearer {token.hash} - Accept: application/json -``` -**Response:** Flight status with departure/arrival times, gates, terminals, aircraft type, tail number, delays. - -### Step 3: Get Flight Loads + Standby List -``` -GET /api/flightstatus/upgradeListExtended?flightNumber={num}&flightDate={YYYY-MM-DD}&fromAirportCode={origin} - -Headers: - x-authorization-api: bearer {token.hash} - Accept: application/json -``` -**Response:** -```json -{ - "segment": { - "airlineCode": "UA", - "flightNumber": 2238, - "flightDate": "20260408", - "departureAirportCode": "EWR", - "arrivalAirportCode": "LAX", - "equipmentDescriptionLong": "Boeing 777-200ER", - "departed": false - }, - "pbts": [ - { - "cabin": "Front", - "capacity": 50, - "authorized": 50, - "booked": 50, - "held": 0, - "reserved": 0, - "revenueStandby": 0, - "waitList": 0, - "jump": 0, - "group": 0, - "ps": 1, - "sa": 5 - }, - { - "cabin": "Middle", - "capacity": 24, - "authorized": 24, - "booked": 16, - "held": 0, - "reserved": 0, - "revenueStandby": 0, - "waitList": 0, - "jump": 0, - "group": 0, - "ps": 0, - "sa": 0 - }, - { - "cabin": "Rear", - "capacity": 202, - "authorized": 202, - "booked": 164, - "held": 0, - "reserved": 0, - "revenueStandby": 2, - "waitList": 0, - "jump": 0, - "group": 0, - "ps": 0, - "sa": 4 - } - ], - "checkInSummaries": [ - { - "cabin": "Front", - "capacity": 50, - "total": 50, - "etktPassengersCheckedIn": 50, - "revStandbyCheckedInWithoutSeats": 0, - "nonRevStandbyCheckedInWithoutSeats": 0, - "children": 0, - "infants": 0, - "bags": 0 - } - ], - "numberOfCabins": 3, - "front": { - "cleared": [ - { - "currentCabin": "Front", - "bookedCabin": "Rear", - "firstName": "T", - "lastName": "JEN", - "passengerName": "T/JEN", - "seatNumber": "1G", - "clearanceType": "Upgrade", - "skipped": false - } - ], - "standby": [] - } -} -``` - -### Field Reference -| Field | Description | -|---|---| -| `pbts[].cabin` | "Front" (First/Polaris), "Middle" (Premium+), "Rear" (Economy) | -| `pbts[].capacity` | Total seats in cabin | -| `pbts[].booked` | Seats sold/assigned | -| `pbts[].revenueStandby` | Revenue standby passengers | -| `pbts[].sa` | Space available (non-rev standby) | -| `pbts[].ps` | Positive space | -| `pbts[].waitList` | Waitlisted passengers | -| `front.cleared[]` | Passengers cleared for upgrade | -| `front.standby[]` | Passengers on standby | - -### Derived Values -``` -availableSeats = capacity - booked -loadFactor = booked / capacity -``` - ---- - -## AMERICAN AIRLINES - -### Base Setup -``` -Domain: https://cdn.flyaa.aa.com -Auth: None required -Method: Playwright → set mobile UA headers → navigate to cdn.flyaa.aa.com → page.evaluate(fetch) - -Required context headers (set via page.context().setExtraHTTPHeaders): - User-Agent: Android/2025.31 Pixel 7|14|1080|2400|1.0|AmericanAirlines - x-clientid: MOBILE - Accept: application/json - Content-Type: application/json - Device-ID: {any-uuid} -``` - -### Step 1: Search Flights by Route -``` -GET /apiv2/mobile-flifo/flightSchedules/v1.0?origin={ORIG}&destination={DEST}&departureDay={D}&departureMonth={M}&searchType=schedule&noOfFlightsToDisplay=20 -``` -**Response:** -```json -{ - "flightSchedules": { - "flights": [ - [{ - "flightKey": "AA:3390:2026-04-09:DFW:0", - "operatingCarrierCode": "AA", - "operatingCarrierName": "AMERICAN EAGLE", - "marketingCarrierCode": "AA", - "flightNumber": "3390", - "originAirportCode": "DFW", - "originCity": "Dallas/ Fort Worth", - "destinationAirportCode": "IAH", - "destinationCity": "Houston", - "departDate": "2026-04-09T07:01:00.000-05:00", - "arrivalDate": "2026-04-09T08:20:00.000-05:00", - "showUpgradeStandbyList": false, - "allowFSN": false - }] - ] - } -} -``` - -### Step 2: Get Waitlist + Available Seats -``` -GET /api/mobile/loyalty/waitlist/v1.2?carrierCode=AA&flightNumber={NUM}&departureDate={YYYY-MM-DD}&originAirportCode={ORIG}&destinationAirportCode={DEST} - -Additional headers: - x-referrer: fs -``` -**Response:** -```json -{ - "relevantList": "First", - "footer": [ - "If your upgrade has cleared or you clear the waitlist, please refresh your mobile boarding pass.", - "The order of names may change as additional customers check in." - ], - "waitList": [ - { - "listName": "First", - "seatsAvailableLabel": "Available seats", - "seatsAvailableValue": 1, - "seatsAvailableSemanticColor": "failure", - "passengers": [ - {"order": 1, "displayName": "BRI, K", "cleared": false, "seat": null, "highlighted": false}, - {"order": 2, "displayName": "MAT, R", "cleared": false, "seat": null, "highlighted": false} - ] - }, - { - "listName": "Standby", - "seatsAvailableLabel": "Available seats", - "seatsAvailableValue": 45, - "seatsAvailableSemanticColor": "success", - "passengers": [ - {"order": 1, "displayName": "MIT, R", "cleared": false, "seat": null, "highlighted": false}, - {"order": 2, "displayName": "MAR, M", "cleared": false, "seat": null, "highlighted": false} - ] - } - ] -} -``` - -### Field Reference -| Field | Description | -|---|---| -| `waitList[].listName` | "First", "Standby", etc. | -| `waitList[].seatsAvailableValue` | Number of open seats for that class | -| `waitList[].seatsAvailableSemanticColor` | "success" (green, many), "warning" (yellow, few), "failure" (red, <=1) | -| `waitList[].passengers[].displayName` | Passenger name (LAST, F) | -| `waitList[].passengers[].order` | Position on list (1-based) | -| `waitList[].passengers[].cleared` | true if cleared from list | -| `waitList[].passengers[].seat` | Seat number if cleared | - ---- - -## SPIRIT AIRLINES - -### Base Setup -``` -Domain: https://api.spirit.com -Auth: APIM subscription key (no login required) -Method: Plain HTTP (curl/fetch) — no Playwright needed -``` - -### Step 1: Get Flight Status -``` -POST https://api.spirit.com/customermobileprod/2.8.0/v3/GetFlightInfoBI - -Headers: - Content-Type: application/json - Ocp-Apim-Subscription-Key: c6567af50d544dfbb3bc5dd99c6bb177 - Platform: Android - -Body: -{ - "departureStation": "FLL", - "arrivalStation": "ATL", - "departureDate": "2026-04-08" -} -``` -**Response:** -```json -{ - "getFlightInfoBIResult": [ - { - "flightNumber": "NK204", - "journeyID": 1, - "departureStationCode": "FLL", - "arrivalStationCode": "ATL", - "departureGate": "F4", - "arrivalGate": "C4", - "departureTerminal": "4", - "arrivalTerminal": "N", - "legStatus": "Arrived", - "departureTime": "8:57am", - "arrivalTime": "11:04am", - "scheduledDeparture": "scheduled at 8:24am", - "scheduledArrival": "scheduled at 10:22am", - "departureCity": "Fort Lauderdale, FL", - "arrivalCity": "Atlanta, GA", - "flightStatusColor": "#FF9500", - "totalDurationMinutes": 127, - "departureDateTime": "2026-04-08T08:57:00", - "arrivalDateTime": "2026-04-08T11:04:00" - } - ] -} -``` - -### Step 2: Get Station/Route Network -``` -GET https://api.spirit.com/customermobileprod/2.8.0/v1/stations - -Headers: - Ocp-Apim-Subscription-Key: c6567af50d544dfbb3bc5dd99c6bb177 -``` -Returns all Spirit stations with airport codes, coordinates, city names, and which routes connect to each station. - -### Notes -- Spirit is a ULCC — no standby lists or upgrade waitlists -- Seat-level availability requires a booking session + Akamai bypass (not publicly accessible) -- The APIM key was decrypted from the native library in the Android APK - ---- - -## KOREAN AIR - -### Base Setup -``` -Domain: https://www.koreanair.com -Auth: None required for flight status; minimal headers -Method: Playwright → navigate to koreanair.com → page.evaluate(fetch) -``` - -### Step 1: Search Flights -``` -POST /api/fs/scheduleFlightSearch/flight/status/app - -Headers: - Content-Type: application/json - Accept: application/json - channel: app - -Body (by flight number): -{ - "departureDate": "20260408", - "departureLocationCode": "", - "arrivalLocationCode": "", - "flightNumber": "017", - "searchOption": "FLTNUM" -} - -Body (by route): -{ - "departureDate": "20260408", - "departureLocationCode": "ICN", - "arrivalLocationCode": "LAX", - "flightNumber": "", - "searchOption": "ROUTE" -} -``` -**Response:** -```json -{ - "scheduleInformation": { - "flightInformation": { - "flightDetailsList": [ - { - "departureAirport": "ICN", - "arrivalAirport": "LAX", - "departureDate": "20260408", - "departureTime": "1430", - "arrivalTime": "0940", - "flightNumber": "017", - "flyingTime": "1110", - "status": {"code": "ARV", "codeByUI": "ARV"}, - "cabinClassInfoList": [ - {"cabinClassOfService": "1"}, - {"cabinClassOfService": "2"}, - {"cabinClassOfService": "3"} - ], - "scheduleFlightUIInfoMsOutVo": { - "flightStatus": "arrived", - "departureUIInfo": { - "scheduledTime": "14:30", - "actualTime": "14:27" - }, - "arrivalUIInfo": { - "scheduledTime": "09:40", - "actualTime": "09:47" - } - } - } - ] - } - } -} -``` - -### Step 2: Get Seat Count -``` -POST /api/et/ibeSupport/flightSeatCount - -Headers: - Content-Type: application/json - Accept: application/json - channel: pc - -Body: -{ - "carrierCode": "KE", - "flightNumber": "017", - "departureAirport": "ICN", - "arrivalAirport": "LAX", - "departureDate": "20260409" -} -``` -**Response:** -```json -{ - "seatCount": 0, - "carrierCode": "KE", - "flightNumber": "017" -} -``` -Note: `seatCount` returns available seats. Returns 0 for dates too far out — works best within 24-48 hours of departure. - -### Step 3: Get Availability -``` -POST /api/fs/scheduleFlightSearch/sdcAirMultiAvailability - -Headers: - Content-Type: application/json - Accept: application/json - channel: pc - -Body: -{ - "departureDate": "20260409", - "departureLocationCode": "ICN", - "arrivalLocationCode": "LAX", - "flightNumber": "001", - "searchOption": "FLTNUM" -} -``` - ---- - -## Playwright Integration Pattern - -All airlines except Spirit use the same Playwright wrapper pattern: - -```javascript -const { chromium } = require('playwright'); - -async function queryAirline(airlineDomain, setupHeaders, apiCall) { - const browser = await chromium.launch({ headless: true }); - const context = await browser.newContext(); - - if (setupHeaders) { - await context.setExtraHTTPHeaders(setupHeaders); - } - - const page = await context.newPage(); - await page.goto(airlineDomain); - await page.waitForTimeout(5000); - - const result = await page.evaluate(apiCall); - - await browser.close(); - return result; -} - -// UNITED example: -const unitedLoads = await queryAirline( - 'https://www.united.com/en/us/flightstatus', - null, - async () => { - const tokenResp = await fetch('/api/auth/anonymous-token'); - const { data } = await tokenResp.json(); - const token = data.token.hash; - - const resp = await fetch( - '/api/flightstatus/upgradeListExtended?flightNumber=2238&flightDate=2026-04-08&fromAirportCode=EWR', - { headers: { 'Accept': 'application/json', 'x-authorization-api': 'bearer ' + token } } - ); - return resp.json(); - } -); - -// AMERICAN example: -const aaLoads = await queryAirline( - 'https://cdn.flyaa.aa.com/apiv2/mobile-flifo/flightSchedules/v1.0?origin=DFW&destination=IAH&departureDay=9&departureMonth=4&searchType=schedule&noOfFlightsToDisplay=20', - { - 'User-Agent': 'Android/2025.31 Pixel 7|14|1080|2400|1.0|AmericanAirlines', - 'x-clientid': 'MOBILE', - 'Accept': 'application/json', - 'Device-ID': 'device-001' - }, - async () => { - const resp = await fetch( - 'https://cdn.flyaa.aa.com/api/mobile/loyalty/waitlist/v1.2?carrierCode=AA&flightNumber=2209&departureDate=2026-04-08&originAirportCode=DFW&destinationAirportCode=IAH', - { headers: { 'Accept': 'application/json', 'x-referrer': 'fs' } } - ); - return resp.json(); - } -); - -// KOREAN AIR example: -const keStatus = await queryAirline( - 'https://www.koreanair.com', - null, - async () => { - const resp = await fetch('/api/fs/scheduleFlightSearch/flight/status/app', { - method: 'POST', - headers: { 'Content-Type': 'application/json', 'Accept': 'application/json', 'channel': 'app' }, - body: JSON.stringify({ - departureDate: '20260408', - flightNumber: '017', - searchOption: 'FLTNUM', - departureLocationCode: '', - arrivalLocationCode: '' - }) - }); - return resp.json(); - } -); -``` - -### Spirit (plain HTTP, no Playwright): -```javascript -const spiritStatus = await fetch('https://api.spirit.com/customermobileprod/2.8.0/v3/GetFlightInfoBI', { - method: 'POST', - headers: { - 'Content-Type': 'application/json', - 'Ocp-Apim-Subscription-Key': 'c6567af50d544dfbb3bc5dd99c6bb177', - 'Platform': 'Android' - }, - body: JSON.stringify({ - departureStation: 'FLL', - arrivalStation: 'ATL', - departureDate: '2026-04-08' - }) -}).then(r => r.json()); -``` - ---- - -## EMIRATES - -### Base Setup -``` -Domain: https://www.emirates.com -Auth: None required for flight status -Method: Plain HTTP (curl/fetch) — no Playwright needed -``` - -### Step 1: Flight Status -``` -GET https://www.emirates.com/service/flight-status?departureDate={YYYY-MM-DD}&flight={flightNumber} - -Headers: none required -``` -**Response:** -```json -{ - "results": [{ - "airlineDesignator": "EK", - "flightNumber": "0221", - "flightId": "2026040700221DXB", - "flightDate": "2026-04-07", - "flightRoute": [{ - "legNumber": "1", - "originActualAirportCode": "DXB", - "destinationActualAirportCode": "DFW", - "originPlannedAirportCode": "DXB", - "destinationPlannedAirportCode": "DFW", - "statusCode": "ARVD", - "flightPosition": 100, - "totalTravelDuration": "17:30", - "isIrregular": "false", - "departureTime": { - "schedule": "2026-04-08T01:10:00Z", - "estimated": "2026-04-08T01:15:00Z", - "actual": "2026-04-08T01:12:00Z" - }, - "arrivalTime": { - "schedule": "2026-04-08T09:40:00Z", - "estimated": "2026-04-08T09:34:00Z", - "actual": "2026-04-08T09:32:00Z" - }, - "departureTerminal": "Terminal 3", - "arrivalTerminal": "Terminal D", - "flightOutageType": 0 - }] - }], - "metaLinks": [] -} -``` - -### Step 2: Flight Load / Staff Standby (requires PNR) -``` -Mobile API base: https://mobileapp.emirates.com/ - -GET /olci/v1/checkin/staffinformation/{pnr}/{lastName} -``` -Returns `FlightLoadResponse` with: -- `isStaffSubLoadTableAvl` - whether subload table is available -- `staffPax.passengers[]` - staff passenger list with check-in status -- `flights[]` - per-flight load data -- Per passenger: `currentPriority`, `totalPriority`, `status`, `flightNumber` - -### Notes -- Flight status works from **plain curl** with zero auth — simplest of all airlines -- Staff standby/flight load data requires PNR + last name (mobile app only) -- The app has a full staff travel system: standby priority tracking, class downgrade acceptance, subload questionnaires -- Internal backend leaked in response: `business-services-cache-bex-prod.dub.prd01.digitalattract.aws.emirates.prd` - ---- - -## ALASKA AIRLINES - -### Base Setup -``` -Domain: https://www.alaskaair.com -Mobile API: /1/guestservices/customermobile/ -Auth: Requires booking confirmation code for load data -Method: Playwright (website uses shadow DOM web components) -``` - -### Step 1: Flight Status -``` -GET /1/guestservices/customermobile/flights/status/{airlineCode}/{flightNumber}/{departureDate} - -Example: /1/guestservices/customermobile/flights/status/AS/1084/2026-04-08 -``` - -### Step 2: Flight Status v2 (by route) -``` -POST /1/guestservices/customermobile/mobileservices/reservation/flights/status - -Body: -{ - "airlineCode": "AS", - "flightNumber": "1084", - "departureDate": "2026-04-08", - "departureCityCode": "SEA", - "arrivalCityCode": "LAX" -} -``` -Response includes `showPriorityList` boolean indicating if standby list is available for that flight. - -### Step 3: Seat Availability / Remaining Seats (requires confirmation code) -``` -POST /1/guestservices/customermobile/seats/SeatUpgradesByCabinRec/{confirmationCode} - -Body: -{ - "adobeMarketingCloudVisitorID": "{visitor_id}" -} -``` -**Response:** -```json -[ - { - "flightNumber": 1084, - "origin": "SEA", - "destination": "LAX", - "cabinType": "First", - "remainingSeats": 4, - "upgradePrice": 149.00, - "equipment": "Boeing 737-900ER" - } -] -``` - -### Notes -- Flight status is public, but `remainingSeats` data requires a valid confirmation code -- Mobile API paths start with `/1/guestservices/customermobile/` -- Uses Ktor HTTP client (modern Kotlin) -- Website uses deep shadow DOM -- Playwright automation is complex - ---- - -## JETBLUE - -### Base Setup -``` -API Domain: https://az-api.jetblue.com -Auth: API key (no login required) -Method: Plain HTTP (curl/fetch) — no Playwright needed -API Key: 49fc015f1ba44abf892d2b8961612378 -``` - -### Step 1: Flight Status by Number -``` -GET https://az-api.jetblue.com/flight-status/get-by-number?number={flightNumber}&date={YYYY-MM-DD} - -Headers: - apikey: 49fc015f1ba44abf892d2b8961612378 - Accept: application/json -``` -**Response:** -```json -{ - "flights": [{ - "tripOrigin": "LAX", - "tripDestination": "JFK", - "isConnecting": false, - "isThroughFlight": false, - "legs": [{ - "flightNo": "524", - "flightStatus": "IN FLIGHT", - "flightStatusGroup": "standardPostDeparture", - "originAirport": "LAX", - "originGate": "16", - "originTerminal": "1", - "actualDeparture": "2026-04-08T13:19:00-07:00", - "scheduledDeparture": "2026-04-08T13:27:00-07:00", - "doorCloseTime": "2026-04-08T13:12:00-07:00", - "boardingTime": "2026-04-08T12:42:00-07:00", - "destinationAirport": "JFK", - "destinationGate": "518", - "destinationTerminal": "5", - "actualArrival": "2026-04-08T21:37:00-04:00", - "scheduledArrival": "2026-04-08T21:55:00-04:00", - "baggageClaim": "4", - "equipmentType": "3NL", - "tailNumber": "4074" - }] - }] -} -``` - -### Step 2: Priority List (Standby/Upgrade - requires check-in session) -The app has `retrievePriorityList` which returns `PriorityListPassenger`: -```json -{ - "shortLastName": "DOE", - "shortFirstName": "J", - "code": "SA", - "order": 1, - "hasSeat": false -} -``` -This requires an active check-in session (Cookie header). Accessible during check-in flow only. - -### Step 3: Crystal Blue Seat Map -``` -POST https://az-api.jetblue.com/mobile_seatmap -Headers: - Ocp-Apim-Subscription-Key: a5ee654e981b4577a58264fed9b1669c - Content-Type: application/json -``` - -### Notes -- Flight status works from **plain curl** with just the API key -- Priority list requires check-in session -- Second APIM key `a5ee654e981b4577a58264fed9b1669c` used for seat map and logging - ---- - -## FRONTIER AIRLINES - -APK not available for download from any third-party source. Frontier is a ULCC like Spirit -- minimal standby/upgrade features expected. Not yet analyzed. - ---- - -## Rate Limits & Best Practices - -- **United**: Token expires in ~30min. Cache and refresh. No known rate limit. -- **American**: No token needed. Akamai may throttle if too many requests from same browser session. Rotate browser contexts. -- **Spirit**: APIM key is shared across all app users. No known rate limit but don't abuse. -- **Korean Air**: No auth needed for status endpoints. `channel` header is required. -- **All Playwright airlines**: Reuse browser context across multiple queries to avoid re-establishing sessions. Close and recreate if you get 403s. diff --git a/AIRLINE_INTEGRATION_GUIDE.md b/AIRLINE_INTEGRATION_GUIDE.md new file mode 100644 index 0000000..d424bbc --- /dev/null +++ b/AIRLINE_INTEGRATION_GUIDE.md @@ -0,0 +1,398 @@ +# Airline API Integration Guide + +Drop-in reference for integrating flight load / seat availability data from 11 airlines. Each section tells you **what works today, how to call it, what you get back, and what's blocked**. Verified 2026-04-12. + +--- + +## 1. United Airlines — WORKING (best US data) + +**What you get:** Per-cabin capacity, booked, available, revenue standby, space-available, upgrade/standby passenger lists with names. + +**Auth:** Anonymous token (~30 min lifetime), Playwright required (TLS fingerprinting blocks curl). + +**Flow:** +``` +GET https://www.united.com/api/auth/anonymous-token +→ { data: { token: { hash: "DAAAA..." } } } + +GET https://www.united.com/api/flightstatus/upgradeListExtended + ?flightNumber=2238&flightDate=2026-04-08&fromAirportCode=EWR +Headers: + x-authorization-api: bearer {token.hash} + Accept: application/json +``` + +**Response shape:** +```json +{ + "pbts": [ + { "cabin": "Front", "capacity": 50, "booked": 50, "revenueStandby": 0, "sa": 5, "waitList": 0 }, + { "cabin": "Middle", "capacity": 24, "booked": 16 }, + { "cabin": "Rear", "capacity": 202, "booked": 164, "revenueStandby": 2, "sa": 4 } + ], + "front": { "cleared": [...], "standby": [...] } +} +``` + +**Derived:** `availableSeats = capacity - booked`, `loadFactor = booked / capacity`. + +**Cabin mapping:** `Front` = Polaris/First, `Middle` = Premium Plus, `Rear` = Economy. + +**Other useful endpoints:** +- `GET /api/flightstatus/status/{num}/{date}/{origin}/{dest}?carrierCode=UA` — gates, times, equipment +- `GET /api/flightstatus/seatmap/{num}/{date}/{origin}/{dest}?carrierCode=UA` — seat map + +--- + +## 2. American Airlines — WORKING + +**What you get:** Waitlist per class (First, Standby), seats available per class with semantic color, passenger names + order. + +**Auth:** None — but mobile User-Agent is mandatory. Direct curl blocked by TLS fingerprinting; use Playwright. + +**Required headers (on browser context):** +``` +User-Agent: Android/2025.31 Pixel 7|14|1080|2400|1.0|AmericanAirlines +x-clientid: MOBILE +Device-ID: {any-uuid} +Accept: application/json +``` + +**The UA format is strict.** Any deviation returns `{"error":["Invalid user-agent header"]}` from Akamai. + +**Flow:** +``` +# Step 1 — find the flight +GET https://cdn.flyaa.aa.com/apiv2/mobile-flifo/flightSchedules/v1.0 + ?origin=DFW&destination=IAH&departureDay=9&departureMonth=4 + &searchType=schedule&noOfFlightsToDisplay=20 + +# Step 2 — get waitlist + seats +GET https://cdn.flyaa.aa.com/api/mobile/loyalty/waitlist/v1.2 + ?carrierCode=AA&flightNumber={num}&departureDate={YYYY-MM-DD} + &originAirportCode={origin}&destinationAirportCode={dest} +Headers: x-referrer: fs +``` + +**Response shape:** +```json +{ + "waitList": [ + { + "listName": "First", + "seatsAvailableValue": 1, + "seatsAvailableSemanticColor": "failure", + "passengers": [ + { "order": 1, "displayName": "BRI, K", "cleared": false, "seat": null } + ] + }, + { "listName": "Standby", "seatsAvailableValue": 45, "seatsAvailableSemanticColor": "success", "passengers": [...] } + ] +} +``` + +`seatsAvailableSemanticColor`: `success` (many), `warning` (few), `failure` (≤1). + +--- + +## 3. Alaska Airlines — WORKING (easiest integration) + +**What you get:** Seat map with per-seat status + `AvailableSeats` per cabin, **full standby + upgrade waitlists with passenger names**, capacity, cabin configuration. + +**Auth:** Static APIM key (decrypted from APK). **Plain curl works — no Playwright needed.** + +**Key:** `de1d0ff837444468a5ea868945aab738` +**Header:** `Ocp-Apim-Subscription-Key: de1d0ff837444468a5ea868945aab738` + +### Seat map (per-seat availability) +```bash +curl "https://apis.alaskaair.com/1/guestservices/customermobile/viewseatmap/seatmap\ +?flightnumber=308&departureairport=SEA&arrivalairport=PSP&departuredate=2026-04-13" \ + -H "Ocp-Apim-Subscription-Key: de1d0ff837444468a5ea868945aab738" +``` +Per-seat status: `OCCD` (occupied), `OPEN`, `PCLA` (premium class), `PREM` (premium). Returns `AvailableSeats` per cabin section. + +### Standby + upgrade waitlist (the prize — **no PNR needed**) +```bash +curl -X POST "https://apis.alaskaair.com/1/guestservices/customermobile/seats/waitlist" \ + -H "Ocp-Apim-Subscription-Key: de1d0ff837444468a5ea868945aab738" \ + -H "Content-Type: application/json" \ + -d '{ + "marketedByAirlineCode":"AS", + "departureAirportCode":"SEA", + "departureLocalDate":"2026-04-12", + "flightNumber":"308", + "confirmationCode": null + }' +``` + +**Response includes:** +- `StandbyList.FlightLoad.Authorized` — cabin capacity +- `StandbyList.FlightLoad.PremiumClassConfigured` — first-class exists +- `StandbyList.Passengers[]` — `DisplayName`, `Position`, `Seat`, `UpgradedToPC` +- `UpgradeList.FlightLoad.Authorized` — first-class capacity +- `UpgradeList.Passengers[]` — upgrade waitlist + +**Key insight:** `confirmationCode: null` is accepted. Works for past, current, and future flights (tested 2+ weeks out). + +### Flight status +``` +GET /1/guestservices/customermobile/flights/status/AS/{num}/{YYYY-MM-DD} +``` + +--- + +## 4. JSX — WORKING (per-flight seat counts) + +**What you get:** Per-flight `availableCount` per fare class, full schedule, route network. + +**Auth:** Anonymous JWT (15 min idle), Playwright required for the initial token call (Akamai). + +**Carrier code:** X2 (ICAO: XSR). + +### Step 1 — get token (Playwright) +```javascript +await page.goto('https://www.jsx.com'); +const { data } = await page.evaluate(async () => { + const r = await fetch('https://api.jsx.com/api/nsk/v2/token', { + method: 'POST', + headers: { 'Content-Type': 'application/json', 'Accept': 'application/json' }, + body: JSON.stringify({ applicationName: 'IBE', credentials: { channelType: 'DigitalWeb' } }) + }); + return r.json(); +}); +const token = data.token; // raw JWT, no "Bearer " prefix +``` + +### Step 2 — per-flight availability (GraphQL) +``` +POST https://api.jsx.com/api/v2/graph/searchAvailability +Headers: + authorization: {token} + Content-Type: application/json + +Body: +{ + "cachedResults": false, + "query": "{ availabilityv5(request: { criteria: [{ dates: { beginDate: \"2026-04-15\", endDate: \"2026-04-15\" }, stations: { originStationCodes: [\"BUR\"], destinationStationCodes: [\"LAS\"] } }], passengers: { types: [{ count: 1, type: \"ADT\" }] }, codes: { currencyCode: \"USD\" } }) { results { trips { date journeysAvailableByMarket { key value { journeyKey stops designator { arrival departure destination origin } segments { identifier { identifier carrierCode } } fares { details { availableCount classOfService productClass passengerFares { fareAmount } } } } } } } } }" +} +``` + +Returns per-flight seat counts per fare class (sample: BUR→LAS 6 flights, 1–2 seats each). + +### Step 3 — low fare calendar (REST, simpler) +``` +GET https://api.jsx.com/api/nsk/v1/availability/lowfare/estimate + ?Origin=BUR&Destination=LAS&StartDate=2026-04-15&EndDate=2026-04-18 + &IncludeTaxesAndFees=true&PassengerCount=1&CurrencyCode=USD +Headers: authorization: {token} +``` + +### Route network (GraphQL) +`POST /api/v2/graph/primaryResources` — returns all markets + station coords. + +Script ready at `scripts/jsx_availability.js`. + +--- + +## 5. Spirit Airlines — PARTIAL (status only, no standby) + +**What you get:** Flight status, station/route data. **No standby — Spirit is a ULCC and doesn't run standby lists.** + +**Auth:** Static APIM key (decrypted). Plain curl for GETs; POSTs mostly blocked by Akamai CyberFend sensor. + +**Key:** `c6567af50d544dfbb3bc5dd99c6bb177` + +```bash +curl -X POST "https://api.spirit.com/customermobileprod/2.8.0/v3/GetFlightInfoBI" \ + -H "Ocp-Apim-Subscription-Key: c6567af50d544dfbb3bc5dd99c6bb177" \ + -H "Content-Type: application/json" \ + -H "Platform: Android" \ + -d '{"departureStation":"FLL","arrivalStation":"ATL","departureDate":"2026-04-08"}' +``` + +Seat maps require JWT + CyberFend sensor data (real device + Frida hook only). + +--- + +## 6. JetBlue — PARTIAL (status yes, loads need PNR) + +**What you get without PNR:** Flight status, full route database (12MB of origin/dest pairs, Mint/seasonal flags). + +**What you get with a PNR:** Per-cabin capacity, confirmed pax, authorized seats, standby/waitlist counts, passenger names. + +**Auth:** Static API key. + +**Keys:** +- Main: `49fc015f1ba44abf892d2b8961612378` +- Seat map: `a5ee654e981b4577a58264fed9b1669c` +- MYB/PNR: `45804e33f26b44d1b144090af2788abf` + +### Flight status (no PNR) +```bash +curl "https://az-api.jetblue.com/flight-status/get-by-number?number=524&date=2026-04-08" \ + -H "apikey: 49fc015f1ba44abf892d2b8961612378" +``` + +### Route database (no PNR) +``` +GET https://azrest.jetblue.com/od/od-service/routes +``` + +### Priority list / loads (PNR required) +``` +POST https://jbrest.jetblue.com/lookup/itinerary +Body: { "fName":"JOHN", "lName":"DOE", "from":"LAX", "pnr":"ABC123", "channelID":"M" } +→ returns jbSessionId + +POST https://jbrest.jetblue.com/prioritylist/getPriorityList?jbSessionId={id} +→ numberOfCapacityJ/Y, numberOfAvailableSeatsJ/Y, numberOfAuthorizedSeatsJ/Y, + numberOfStandbyPassengers, numberOfWaitListedPassengers, priorityListPassengers[] +``` + +**No public load path exists without a real PNR.** + +--- + +## 7. Korean Air — PARTIAL + +**What you get:** Flight status, route availability. `flightSeatCount` endpoint exists but returns 0 for far-out dates (works best within 24–48 hrs of departure). + +**Auth:** None. `channel` header required (`app` for flight search, `pc` for seat count). + +``` +POST https://www.koreanair.com/api/fs/scheduleFlightSearch/flight/status/app +Headers: channel: app +Body: {"departureDate":"20260408","flightNumber":"017","searchOption":"FLTNUM", + "departureLocationCode":"","arrivalLocationCode":""} + +POST https://www.koreanair.com/api/et/ibeSupport/flightSeatCount +Headers: channel: pc +Body: {"carrierCode":"KE","flightNumber":"017","departureAirport":"ICN", + "arrivalAirport":"LAX","departureDate":"20260409"} +``` + +--- + +## 8. Emirates — PARTIAL (zero-auth status only) + +**What you get:** Flight status with gates, times, equipment — zero auth, zero headers. + +**Staff load tables exist but are staff-travel only (PNR + last name required).** + +```bash +curl "https://www.emirates.com/service/flight-status?departureDate=2026-04-08&flight=221" +``` + +--- + +## 9. Delta — BLOCKED (status only, no public load path) + +**What you get:** Rich flight status (gates, times, equipment, amenities per cabin). **Zero seat counts anywhere public.** + +**Auth:** Mobile User-Agent only for status. Shop/standby data requires SkyMiles auth + Akamai BMP sensor (blocked from scripts). + +**Mobile UA:** `FlyDelta/24.10.1 (Pixel 7; Android 14; Build/UQ1A.240205.004)` + +```bash +curl -X POST "https://mobile-api.delta.com/flight-status-mobile/details" \ + -H "Content-Type: application/json" \ + -H "User-Agent: FlyDelta/24.10.1 (Pixel 7; Android 14; Build/UQ1A.240205.004)" \ + -d '{"airlineCode":"DL","flightNumber":"996","flightOriginDate":"2026-04-12"}' +``` + +**Load data endpoints that exist but are blocked:** +- `POST /mytrips/getUpgradeAndStandby` — needs PNR + name +- `POST /offers/shop` — returns `seatsAvailableCount` per fare, needs SkyMiles auth + SPA session flow +- `POST /mwsb/service/shop` — same data, same auth requirement + +The SkyMiles login alone is not enough — the SPA sets session state that the backend validates. Direct API calls fail even with valid auth. + +--- + +## 10. British Airways — BLOCKED (no public load data) + +Flight availability search exists (`/sc4/baflt-paa/rs/v1/flightavailability/search`) but returns bookable fares, not load factors. Seat availability is SOAP and needs a booking reference. + +**Public OAuth:** `POST https://oauth.baplc.com/grant` with `client_id=baflt` +**Legacy SOAP:** `Authorization: Basic cHVibGljOnB1YmxpYw==` (public:public) + +No standby/waitlist endpoint found. + +--- + +## 11. Qantas — BLOCKED + +Seatmap endpoint returns `isSeatAvailable`/`isSeatOccupied` per seat, but requires a valid boarding pass (productId + surname). All upgrade endpoints require auth. Akamai BMP with native sensor SDK makes automation impractical. + +--- + +## 12. Lufthansa — BLOCKED (developer API has maps, not occupancy) + +Main API behind Cloudflare WAF (403 from curl). Official developer API at `api.lufthansa.com/v1/` has seat map **layouts** but not occupancy. Seat recommendation API needs PNR. + +Register: https://developer.lufthansa.com/member/register (free, 6 req/sec, 1000/hr). + +Same backend powers Lufthansa, SWISS, Austrian, Brussels. + +--- + +## Anti-bot & auth cheat sheet + +| Airline | Bypass | Effort | +|------------|--------------------|---------| +| Alaska | APIM key header | Lowest (curl works) | +| Emirates | none | Lowest (curl works) | +| Spirit | APIM key (GET only)| Low (curl works) | +| JetBlue | apikey header | Low (curl works) | +| Korean Air | `channel` header | Low (Playwright or curl) | +| JSX | Playwright → JWT | Medium | +| United | Playwright → token | Medium | +| American | Playwright + mobile UA | Medium | +| Delta | mobile UA for status; shop blocked | Low/High | +| BA / Qantas / Lufthansa | — | N/A (no public load data) | + +--- + +# Summary — what to build against + +## Tier 1: Plug-and-play (integrate today) + +| Airline | Data quality | Call pattern | +|---------|--------------|--------------| +| **Alaska** | ★★★★★ seat map + full standby/upgrade lists w/ names, no PNR | Plain `curl` with APIM key | +| **United** | ★★★★★ per-cabin loads + cleared upgrades + standby list | Playwright token + API fetch | +| **American** | ★★★★ waitlist + seats per class w/ pax names | Playwright w/ mobile UA | +| **JSX** | ★★★★ per-flight seat counts per fare class | Playwright JWT + GraphQL | + +These four are the core of any flight-load product. Alaska is the easiest to integrate (pure HTTP), United returns the richest data, American is close behind, JSX is the only public source for per-flight counts on a Navitaire-hosted carrier. + +## Tier 2: Status only (useful, but no seat data) + +- **Spirit** — status/routes, no standby (ULCC) +- **Emirates** — status, zero auth +- **Korean Air** — status; `flightSeatCount` returns 0 far out +- **JetBlue** — status + route DB; loads need PNR +- **Delta** — rich status, no seat counts anywhere public + +## Tier 3: Blocked / not useful + +- **BA, Qantas, Lufthansa** — no public load data. Qantas/BA need booking ref; Lufthansa dev API is layouts only. + +## Recommended product shape + +1. Start with Alaska (easiest, 15 min to wire up). +2. Add United for the standby/upgrade killer feature (needs Playwright worker). +3. Layer in American for the third major US carrier. +4. JSX as a bonus — only route pairs that JSX serves (private terminals). +5. For Delta/JetBlue: show flight status only, note "seat data unavailable" unless you have a PNR. +6. Use Emirates/Korean Air/Spirit for status on international/ULCC routes. + +## Shared integration notes + +- **Cache aggressively** — all four Tier 1 sources return stable data per flight-date; a 60-second cache dramatically cuts load. +- **Token management** — United (30 min) and JSX (15 min idle) need refresh logic. +- **Playwright workers** — run one persistent browser context per airline; reuse across requests. +- **Alaska is the exception** — no browser, no token, just HTTP. + +Full endpoint-by-endpoint reference: `airlines_request.md` (1692 lines, same directory). diff --git a/Flights/FlightsApp.swift b/Flights/FlightsApp.swift index d6d40c1..0c1cbe2 100644 --- a/Flights/FlightsApp.swift +++ b/Flights/FlightsApp.swift @@ -3,12 +3,24 @@ import SwiftUI @main struct FlightsApp: App { let service = FlightService() - let database = AirportDatabase() + let database: AirportDatabase let favoritesManager = FavoritesManager() + let loadService: AirlineLoadService + + init() { + let db = AirportDatabase() + self.database = db + self.loadService = AirlineLoadService(airportDatabase: db) + } var body: some Scene { WindowGroup { - ContentView(service: service, database: database, favoritesManager: favoritesManager) + ContentView( + service: service, + database: database, + loadService: loadService, + favoritesManager: favoritesManager + ) } } } diff --git a/Flights/Services/AirlineLoadService.swift b/Flights/Services/AirlineLoadService.swift index e5fef5e..17d3bb2 100644 --- a/Flights/Services/AirlineLoadService.swift +++ b/Flights/Services/AirlineLoadService.swift @@ -7,14 +7,16 @@ actor AirlineLoadService { // MARK: - Properties private let session: URLSession + private let airportDatabase: AirportDatabase? private var unitedToken: (hash: String, expiresAt: Date)? // MARK: - Init - init() { + init(airportDatabase: AirportDatabase? = nil) { let config = URLSessionConfiguration.default config.timeoutIntervalForRequest = 15 session = URLSession(configuration: config) + self.airportDatabase = airportDatabase } // MARK: - Public Router @@ -42,9 +44,9 @@ actor AirlineLoadService { case "AA": return await fetchAmericanLoad(flightNumber: flightNumber, date: date, origin: origin, destination: destination) case "NK": return await fetchSpiritStatus(origin: origin, destination: destination, date: date) case "KE": return await fetchKoreanAirLoad(flightNumber: flightNumber, date: date, origin: origin, destination: destination) - case "B6": return await fetchJetBlueStatus(flightNumber: flightNumber, date: date) - case "AS": return await fetchAlaskaStatus(flightNumber: flightNumber, date: date) - case "EK": return await fetchEmiratesStatus(flightNumber: flightNumber, date: date) + case "B6": return await fetchJetBlueStatus(flightNumber: flightNumber, date: date, origin: origin) + case "AS": return await fetchAlaskaLoad(flightNumber: flightNumber, date: date, origin: origin, destination: destination) + case "EK": return await fetchEmiratesStatus(flightNumber: flightNumber, date: date, origin: origin) case "XE": return await fetchJSXLoad(flightNumber: flightNumber, date: date, origin: origin, destination: destination, departureTime: departureTime) default: print("[LoadService] Unsupported airline: \(code)") @@ -64,15 +66,24 @@ actor AirlineLoadService { do { var request = URLRequest(url: url) + Self.applyUnitedBrowserHeaders(to: &request) request.setValue("application/json", forHTTPHeaderField: "Accept") let (data, response) = try await session.data(for: request) - guard let http = response as? HTTPURLResponse, http.statusCode == 200 else { return nil } + let http = response as? HTTPURLResponse + print("[UA] token HTTP status: \(http?.statusCode ?? -1), \(data.count) bytes") + guard http?.statusCode == 200 else { + if let bodyStr = String(data: data, encoding: .utf8) { + print("[UA] token body (first 500): \(bodyStr.prefix(500))") + } + return nil + } guard let json = try JSONSerialization.jsonObject(with: data) as? [String: Any], let dataObj = json["data"] as? [String: Any], let tokenObj = dataObj["token"] as? [String: Any], let hash = tokenObj["hash"] as? String else { + print("[UA] token JSON shape unexpected") return nil } @@ -80,15 +91,32 @@ actor AirlineLoadService { unitedToken = (hash: hash, expiresAt: Date().addingTimeInterval(25 * 60)) return hash } catch { + print("[UA] token error: \(error)") return nil } } + /// Browser-shaped headers for United. The guide notes that plain curl is + /// blocked by TLS fingerprinting; iOS `URLSession` has a different + /// fingerprint but United's Akamai rules still sniff `User-Agent` / + /// `Accept-Language`, so we mirror a desktop browser. Not a guarantee — + /// if this still fails we may need a WKWebView path like JSX. + private static func applyUnitedBrowserHeaders(to request: inout URLRequest) { + request.setValue( + "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 " + + "(KHTML, like Gecko) Version/17.4 Safari/605.1.15", + forHTTPHeaderField: "User-Agent" + ) + request.setValue("en-US,en;q=0.9", forHTTPHeaderField: "Accept-Language") + request.setValue("https://www.united.com/", forHTTPHeaderField: "Referer") + request.setValue("https://www.united.com", forHTTPHeaderField: "Origin") + } + private func fetchUnitedLoad(flightNumber: String, date: Date, origin: String) async -> FlightLoad? { guard let token = await getUnitedToken() else { return nil } let num = stripAirlinePrefix(flightNumber) - let dateStr = Self.dashDateFormatter.string(from: date) + let dateStr = dayString(from: date, originIATA: origin) guard let url = URL(string: "https://www.united.com/api/flightstatus/upgradeListExtended?flightNumber=\(num)&flightDate=\(dateStr)&fromAirportCode=\(origin.uppercased())") else { return nil @@ -96,6 +124,7 @@ actor AirlineLoadService { do { var request = URLRequest(url: url) + Self.applyUnitedBrowserHeaders(to: &request) request.setValue("bearer \(token)", forHTTPHeaderField: "x-authorization-api") request.setValue("application/json", forHTTPHeaderField: "Accept") @@ -262,7 +291,7 @@ actor AirlineLoadService { destination: String ) async -> FlightLoad? { let num = stripAirlinePrefix(flightNumber) - let dateStr = Self.dashDateFormatter.string(from: date) + let dateStr = dayString(from: date, originIATA: origin) var components = URLComponents(string: "https://cdn.flyaa.aa.com/api/mobile/loyalty/waitlist/v1.2") components?.queryItems = [ @@ -355,7 +384,7 @@ actor AirlineLoadService { return nil } - let dateStr = Self.dashDateFormatter.string(from: date) + let dateStr = dayString(from: date, originIATA: origin) let body: [String: String] = [ "departureStation": origin.uppercased(), "arrivalStation": destination.uppercased(), @@ -413,7 +442,7 @@ actor AirlineLoadService { } let num = stripAirlinePrefix(flightNumber) - let dateStr = Self.compactDateFormatter.string(from: date) + let dateStr = compactDayString(from: date, originIATA: origin) let body: [String: String] = [ "carrierCode": "KE", @@ -423,6 +452,8 @@ actor AirlineLoadService { "departureDate": dateStr ] + print("[KE] POST \(url) body: \(body)") + do { var request = URLRequest(url: url) request.httpMethod = "POST" @@ -432,12 +463,36 @@ actor AirlineLoadService { request.httpBody = try JSONSerialization.data(withJSONObject: body) let (data, response) = try await session.data(for: request) - guard let http = response as? HTTPURLResponse, http.statusCode == 200 else { return nil } + let http = response as? HTTPURLResponse + print("[KE] HTTP status: \(http?.statusCode ?? -1), \(data.count) bytes") - guard let json = try JSONSerialization.jsonObject(with: data) as? [String: Any] else { return nil } + if let bodyStr = String(data: data, encoding: .utf8) { + print("[KE] body (first 1200): \(bodyStr.prefix(1200))") + } - let seatCount = json["seatCount"] as? Int ?? 0 + guard http?.statusCode == 200 else { return nil } + guard let json = try JSONSerialization.jsonObject(with: data) as? [String: Any] else { + print("[KE] JSON parse failed") + return nil + } + // Guide doesn't document the response shape; try a few likely keys + // and fall back to scanning any top-level container for Int values + // named like "seatCount". Log what we see so the real shape is + // visible in the Xcode console on first run. + print("[KE] top-level keys: \(json.keys.sorted())") + + let seatCount = (json["seatCount"] as? Int) + ?? (json["availableSeatCount"] as? Int) + ?? (json["totalSeatCount"] as? Int) + ?? ((json["data"] as? [String: Any])?["seatCount"] as? Int) + ?? 0 + + print("[KE] parsed seatCount=\(seatCount)") + + // KE doesn't expose capacity/booked — report what we know as + // non-revenue-standby availability in an Economy-labeled cabin + // (matches how we presented this previously). let cabin = CabinLoad( name: "Economy", capacity: 0, @@ -455,15 +510,16 @@ actor AirlineLoadService { seatAvailability: [] ) } catch { + print("[KE] error: \(error)") return nil } } // MARK: - JetBlue - private func fetchJetBlueStatus(flightNumber: String, date: Date) async -> FlightLoad? { + private func fetchJetBlueStatus(flightNumber: String, date: Date, origin: String) async -> FlightLoad? { let num = stripAirlinePrefix(flightNumber) - let dateStr = Self.dashDateFormatter.string(from: date) + let dateStr = dayString(from: date, originIATA: origin) guard let url = URL(string: "https://az-api.jetblue.com/flight-status/get-by-number?number=\(num)&date=\(dateStr)") else { print("[B6] Invalid URL") @@ -517,56 +573,255 @@ actor AirlineLoadService { // MARK: - Alaska Airlines - private func fetchAlaskaStatus(flightNumber: String, date: Date) async -> FlightLoad? { - let num = stripAirlinePrefix(flightNumber) - let dateStr = Self.dashDateFormatter.string(from: date) + /// Static APIM key extracted from the Alaska mobile app, per + /// AIRLINE_INTEGRATION_GUIDE.md. Accepts `confirmationCode: null` on the + /// `/seats/waitlist` POST, so we get standby + upgrade lists without a PNR. + private static let alaskaAPIMKey = "de1d0ff837444468a5ea868945aab738" - guard let url = URL(string: "https://www.alaskaair.com/1/guestservices/customermobile/flights/status/AS/\(num)/\(dateStr)") else { - print("[AS] Invalid URL") + private func fetchAlaskaLoad( + flightNumber: String, + date: Date, + origin: String, + destination: String + ) async -> FlightLoad? { + let num = stripAirlinePrefix(flightNumber) + let dateStr = dayString(from: date, originIATA: origin) + let upperOrigin = origin.uppercased() + let upperDestination = destination.uppercased() + + print("[AS] Fetching Alaska load for AS\(num) \(upperOrigin)->\(upperDestination) on \(dateStr)") + + // Run seatmap + waitlist in parallel; either may fail independently. + async let seatmap = fetchAlaskaSeatmap( + flightNumber: num, + origin: upperOrigin, + destination: upperDestination, + date: dateStr + ) + async let waitlist = fetchAlaskaWaitlist( + flightNumber: num, + origin: upperOrigin, + date: dateStr + ) + + let cabinsFromMap = await seatmap + let waitlistResult = await waitlist + let cabinsFromWaitlist = waitlistResult.0 + let standbyList = waitlistResult.1 + let upgradeList = waitlistResult.2 + + // Prefer waitlist's `Authorized` cabin capacity (real FlightLoad numbers) + // over seatmap's `AvailableSeats` (count of open seats only). + let cabins = !cabinsFromWaitlist.isEmpty ? cabinsFromWaitlist : cabinsFromMap + + if cabins.isEmpty && standbyList.isEmpty && upgradeList.isEmpty { + print("[AS] No data returned from seatmap or waitlist endpoints") return nil } + return FlightLoad( + airlineCode: "AS", + flightNumber: "AS\(num)", + cabins: cabins, + standbyList: standbyList, + upgradeList: upgradeList, + seatAvailability: [] + ) + } + + /// GET /1/guestservices/customermobile/viewseatmap/seatmap + /// Returns per-seat status + `AvailableSeats` count per cabin section. + private func fetchAlaskaSeatmap( + flightNumber: String, + origin: String, + destination: String, + date: String + ) async -> [CabinLoad] { + var components = URLComponents(string: "https://apis.alaskaair.com/1/guestservices/customermobile/viewseatmap/seatmap") + components?.queryItems = [ + URLQueryItem(name: "flightnumber", value: flightNumber), + URLQueryItem(name: "departureairport", value: origin), + URLQueryItem(name: "arrivalairport", value: destination), + URLQueryItem(name: "departuredate", value: date) + ] + guard let url = components?.url else { + print("[AS] seatmap: invalid URL") + return [] + } + print("[AS] GET \(url)") do { var request = URLRequest(url: url) + request.setValue(Self.alaskaAPIMKey, forHTTPHeaderField: "Ocp-Apim-Subscription-Key") request.setValue("application/json", forHTTPHeaderField: "Accept") let (data, response) = try await session.data(for: request) let http = response as? HTTPURLResponse - print("[AS] HTTP status: \(http?.statusCode ?? -1)") + print("[AS] seatmap HTTP status: \(http?.statusCode ?? -1), \(data.count) bytes") if let bodyStr = String(data: data, encoding: .utf8) { - print("[AS] Response: \(bodyStr.prefix(800))") + print("[AS] seatmap body (first 1200): \(bodyStr.prefix(1200))") } - guard http?.statusCode == 200 else { return nil } + guard http?.statusCode == 200 else { return [] } + guard let json = try JSONSerialization.jsonObject(with: data) as? [String: Any] else { return [] } - // Alaska flight status only — seat data requires confirmation code - return FlightLoad( - airlineCode: "AS", - flightNumber: "AS\(num)", - cabins: [], - standbyList: [], - upgradeList: [], - seatAvailability: [] - ) + // Per the guide, the response carries `AvailableSeats` per cabin section. + // The exact wrapper differs by route; we walk the top level looking for + // anything that has {AvailableSeats, ...} or a list of cabin sections. + var cabins: [CabinLoad] = [] + + // Common shapes: { Cabins: [{ Name, AvailableSeats, ... }] } or + // { Sections: [...] } or the cabin fields inline at root. + if let cabinArr = (json["Cabins"] as? [[String: Any]]) + ?? (json["cabins"] as? [[String: Any]]) + ?? (json["Sections"] as? [[String: Any]]) { + for entry in cabinArr { + let name = (entry["Name"] as? String) + ?? (entry["CabinName"] as? String) + ?? (entry["Description"] as? String) + ?? "Cabin" + let available = (entry["AvailableSeats"] as? Int) + ?? (entry["availableSeats"] as? Int) + ?? 0 + // Capacity is best-effort; fall back to available so + // loadFactor stays sane when we only have open seats. + let capacity = (entry["TotalSeats"] as? Int) + ?? (entry["Capacity"] as? Int) + ?? available + let booked = max(0, capacity - available) + cabins.append(CabinLoad( + name: name, + capacity: capacity, + booked: booked, + revenueStandby: 0, + nonRevStandby: 0 + )) + } + } + + print("[AS] seatmap parsed \(cabins.count) cabins") + return cabins } catch { - print("[AS] Error: \(error)") - return nil + print("[AS] seatmap error: \(error)") + return [] } } + /// POST /1/guestservices/customermobile/seats/waitlist + /// Returns StandbyList + UpgradeList with FlightLoad.Authorized (capacity) + /// and passenger names. `confirmationCode: null` is accepted. + private func fetchAlaskaWaitlist( + flightNumber: String, + origin: String, + date: String + ) async -> ([CabinLoad], [StandbyPassenger], [StandbyPassenger]) { + guard let url = URL(string: "https://apis.alaskaair.com/1/guestservices/customermobile/seats/waitlist") else { + print("[AS] waitlist: invalid URL") + return ([], [], []) + } + + let body: [String: Any?] = [ + "marketedByAirlineCode": "AS", + "departureAirportCode": origin, + "departureLocalDate": date, + "flightNumber": flightNumber, + "confirmationCode": NSNull() + ] + + print("[AS] POST \(url) body flight=\(flightNumber) origin=\(origin) date=\(date)") + + do { + var request = URLRequest(url: url) + request.httpMethod = "POST" + request.setValue(Self.alaskaAPIMKey, forHTTPHeaderField: "Ocp-Apim-Subscription-Key") + request.setValue("application/json", forHTTPHeaderField: "Content-Type") + request.setValue("application/json", forHTTPHeaderField: "Accept") + request.httpBody = try JSONSerialization.data(withJSONObject: body.compactMapValues { $0 as Any? }) + + let (data, response) = try await session.data(for: request) + let http = response as? HTTPURLResponse + print("[AS] waitlist HTTP status: \(http?.statusCode ?? -1), \(data.count) bytes") + + if let bodyStr = String(data: data, encoding: .utf8) { + print("[AS] waitlist body (first 1500): \(bodyStr.prefix(1500))") + } + + guard http?.statusCode == 200 else { return ([], [], []) } + guard let json = try JSONSerialization.jsonObject(with: data) as? [String: Any] else { + return ([], [], []) + } + + let (mainCap, mainPax) = parseAlaskaWaitlistSection(json["StandbyList"], listLabel: "Standby") + let (upgradeCap, upgradePax) = parseAlaskaWaitlistSection(json["UpgradeList"], listLabel: "Upgrade") + + var cabins: [CabinLoad] = [] + if mainCap > 0 { + cabins.append(CabinLoad( + name: "Main", + capacity: mainCap, + booked: 0, + revenueStandby: 0, + nonRevStandby: 0 + )) + } + if upgradeCap > 0 { + cabins.append(CabinLoad( + name: "First", + capacity: upgradeCap, + booked: 0, + revenueStandby: 0, + nonRevStandby: 0 + )) + } + + return (cabins, mainPax, upgradePax) + } catch { + print("[AS] waitlist error: \(error)") + return ([], [], []) + } + } + + /// Parse one of the waitlist sections (StandbyList / UpgradeList). + /// Returns (cabinCapacity, passengers). + private func parseAlaskaWaitlistSection(_ raw: Any?, listLabel: String) -> (Int, [StandbyPassenger]) { + guard let section = raw as? [String: Any] else { return (0, []) } + + let flightLoad = section["FlightLoad"] as? [String: Any] ?? [:] + let authorized = (flightLoad["Authorized"] as? Int) ?? 0 + + var passengers: [StandbyPassenger] = [] + if let paxArr = section["Passengers"] as? [[String: Any]] { + for pax in paxArr { + let name = (pax["DisplayName"] as? String) ?? "" + let position = (pax["Position"] as? Int) ?? (passengers.count + 1) + let seat = pax["Seat"] as? String + let upgraded = (pax["UpgradedToPC"] as? Bool) ?? false + let cleared = upgraded || (seat != nil && !(seat?.isEmpty ?? true)) + passengers.append(StandbyPassenger( + order: position, + displayName: name, + cleared: cleared, + seat: seat, + listName: listLabel + )) + } + } + + print("[AS] \(listLabel) section: authorized=\(authorized), passengers=\(passengers.count)") + return (authorized, passengers) + } + // MARK: - Emirates - private func fetchEmiratesStatus(flightNumber: String, date: Date) async -> FlightLoad? { + private func fetchEmiratesStatus(flightNumber: String, date: Date, origin: String) async -> FlightLoad? { let num = stripAirlinePrefix(flightNumber) - let dateStr = Self.dashDateFormatter.string(from: date) + let dateStr = dayString(from: date, originIATA: origin) - // Pad flight number to 4 digits (Emirates uses 0-padded numbers like "0221") - let paddedNum = String(repeating: "0", count: max(0, 4 - num.count)) + num - - guard let url = URL(string: "https://www.emirates.com/service/flight-status?departureDate=\(dateStr)&flight=\(paddedNum)") else { + // Guide sample uses `flight=221` unpadded; padding was an unverified + // guess and is now removed to match the documented call exactly. + guard let url = URL(string: "https://www.emirates.com/service/flight-status?departureDate=\(dateStr)&flight=\(num)") else { print("[EK] Invalid URL") return nil } @@ -621,7 +876,7 @@ actor AirlineLoadService { destination: String, departureTime: String? ) async -> FlightLoad? { - let dateStr = Self.dashDateFormatter.string(from: date) + let dateStr = dayString(from: date, originIATA: origin) let num = stripAirlinePrefix(flightNumber) let upperOrigin = origin.uppercased() let upperDestination = destination.uppercased() @@ -777,7 +1032,10 @@ actor AirlineLoadService { return result.isEmpty ? trimmed : result } - /// "yyyy-MM-dd" formatter for United, American, Spirit + /// "yyyy-MM-dd" formatter for United, American, Spirit. + /// NOTE: this is UTC-pinned and will cross the day boundary for users in + /// non-UTC timezones. Prefer `dayString(from:originIATA:)` which resolves + /// the departure airport's approximate local timezone. private static let dashDateFormatter: DateFormatter = { let f = DateFormatter() f.dateFormat = "yyyy-MM-dd" @@ -786,6 +1044,50 @@ actor AirlineLoadService { return f }() + /// Format a `Date` as "yyyy-MM-dd" in the *departure airport's* local + /// timezone. Airlines (JSX especially) interpret the day string as the + /// calendar day at the departure airport — not UTC, not the user's locale. + /// + /// Timezone resolution strategy: + /// 1. Look up the airport's longitude in the bundled airports.json. + /// 2. Approximate the offset as `round(lng / 15)` hours (15° ≈ 1hr). + /// 3. Fall back to `TimeZone.current` if the airport isn't in the DB. + /// + /// The 15°/hour approximation ignores political timezone boundaries and + /// DST, but it's correct to within an hour of the real offset — plenty + /// precise for *which calendar day* the `Date` falls on. + private func dayString(from date: Date, originIATA: String) -> String { + let f = DateFormatter() + f.dateFormat = "yyyy-MM-dd" + f.locale = Locale(identifier: "en_US_POSIX") + f.timeZone = resolveTimeZone(forIATA: originIATA) + return f.string(from: date) + } + + /// Same as above but for Korean Air's compact "yyyyMMdd" format. + private func compactDayString(from date: Date, originIATA: String) -> String { + let f = DateFormatter() + f.dateFormat = "yyyyMMdd" + f.locale = Locale(identifier: "en_US_POSIX") + f.timeZone = resolveTimeZone(forIATA: originIATA) + return f.string(from: date) + } + + private func resolveTimeZone(forIATA iata: String) -> TimeZone { + guard let db = airportDatabase, + let airport = db.airport(byIATA: iata.uppercased()) else { + print("[TZ] \(iata): airport not in DB, falling back to TimeZone.current (\(TimeZone.current.identifier))") + return .current + } + // Round lng/15 to nearest hour. Clamp to [-12, 14] (real-world range). + let rawHours = (airport.lng / 15.0).rounded() + let hours = max(-12, min(14, Int(rawHours))) + let seconds = hours * 3600 + let tz = TimeZone(secondsFromGMT: seconds) ?? .current + print("[TZ] \(iata) (lng=\(airport.lng)) → offset=\(hours)h (\(tz.identifier))") + return tz + } + /// "yyyyMMdd" formatter for Korean Air private static let compactDateFormatter: DateFormatter = { let f = DateFormatter() diff --git a/Flights/Services/JSXWebViewFetcher.swift b/Flights/Services/JSXWebViewFetcher.swift index 437e272..f3ea025 100644 --- a/Flights/Services/JSXWebViewFetcher.swift +++ b/Flights/Services/JSXWebViewFetcher.swift @@ -768,53 +768,30 @@ private final class JSXFlow { if !s16.ok { return fail("Step 16 failed: \(s16.message)") } // ---- STEP 17 ---- - // Invoke JSX's flight-search Angular component's `search()` method - // directly via __ngContext__, bypassing the Find Flights button - // click handler entirely. - // - // Context: the introspection dump from an earlier iteration revealed - // the real component shape. It's NOT Angular Reactive Forms — it's - // plain instance properties on a custom component (minified class - // `Me` in the current build, but class names change per build, so - // we match by shape). The component sits at DOM depth 4 (the - // `
` element, context index 8), - // and by the time we get here the UI driving steps have already - // set `beginDate=Date(...)`, `origin=Object{...}`, and - // `destination=Object{...}` on it. All we need to do is call its - // `search()` method — Angular's own HttpClient then fires the POST - // via WebKit's network stack, the interceptor captures the - // response, and downstream parse runs normally. - // - // Why this works when the click doesn't: the click handler - // presumably checks some derived `isValid` or other gate that our - // synthetic click/form state can't satisfy. `search()` doesn't - // check, so it just runs. - // - // Shape match criteria: any object that is BOTH: - // - a state-bearing component (has `beginDate` + `origin` + - // `destination` as own properties) - // - callable (has a `search` function) - // This is unique to JSX's flight search component in practice — - // no other Angular component on the page has all four. + // Translate the successful real-Chrome flow into WKWebView terms: + // after one-way/origin/destination/date are set and DONE has been + // pressed, prime the search component's date state, click the real + // FIND FLIGHTS button, and wait for booking/select + Angular + // availability state. If that path still does not materialize + // state, fall back to component.search(), then finally to the + // direct in-page POST. let s17 = await jsStep( - "Direct fetch POST /search/simple from page context", + "Submit JSX search (Find Flights → component.search → direct fetch)", action: """ return await (async () => { - // This run deliberately uses a completely unwrapped fetch() - // — the step 4 `install passive performance observer` does - // NOT touch window.fetch or XMLHttpRequest. We also use the - // EXACT same shape that the step-18 low-fare fallback uses, - // which we've confirmed works (returns a 200 body) from - // this same page context. The only differences between the - // working GET and this POST: - // - method: GET → POST - // - Content-Type header (not sent on GET) - // - body (not sent on GET) - // - // If this fetch works, we parse the body directly and - // skip component.search() entirely. If it fails, we log - // the error and fall through to component.search() + state - // harvest as a secondary attempt. + const sleep = ms => new Promise(r => setTimeout(r, ms)); + const safeStringify = (value) => { + const seen = new WeakSet(); + return JSON.stringify(value, (_key, current) => { + if (typeof current === "function") return undefined; + if (current instanceof Date) return current.toISOString(); + if (!current || typeof current !== "object") return current; + if (seen.has(current)) return "[Circular]"; + seen.add(current); + return current; + }); + }; + const uiSearchWaitMs = 15000; const readToken = () => { try { @@ -824,8 +801,755 @@ private final class JSXFlow { return (parsed && parsed.token) || ""; } catch (_) { return ""; } }; + const resourceStats = () => { + const resources = (window.__jsxProbe && Array.isArray(window.__jsxProbe.resources)) + ? window.__jsxProbe.resources + : []; + const searchResources = resources.filter(r => (r.url || "").includes("/availability/search/simple")); + return { + count: searchResources.length, + completed: searchResources.filter(r => (r.responseEnd || 0) > 0).length + }; + }; + + const shapeScore = (obj) => { + if (!obj || typeof obj !== "object") return 0; + try { + const hasFares = !!(obj.faresAvailable && typeof obj.faresAvailable === "object" + && Object.keys(obj.faresAvailable).length > 0); + if (Array.isArray(obj.results)) { + for (const x of obj.results) { + if (x && Array.isArray(x.trips)) { + for (const t of x.trips) { + if (t && t.journeysAvailableByMarket) { + return hasFares ? 3 : 2; + } + } + } + } + } + if (hasFares) return 2; + if (obj.journeysAvailableByMarket) return 1; + } catch (_) {} + return 0; + }; + + const jsonSafe = (v, d = 0) => { + if (d > 10) return null; + if (v === null || v === undefined) return v; + if (typeof v === "function") return undefined; + if (v instanceof Date) return v.toISOString(); + if (typeof v !== "object") return v; + if (Array.isArray(v)) { + const out = []; + for (let i = 0; i < Math.min(v.length, 100); i++) { + const e = jsonSafe(v[i], d + 1); + if (e !== undefined) out.push(e); + } + return out; + } + const out = {}; + for (const k of Object.keys(v)) { + if (k.startsWith("_$") || k === "__proto__") continue; + let c; + try { c = v[k]; } catch (_) { continue; } + const s = jsonSafe(c, d + 1); + if (s !== undefined) out[k] = s; + } + return out; + }; + + const harvestAvailability = () => { + const seen = new WeakSet(); + let bestHit = null; + let bestScore = 0; + const find = (obj, depth) => { + if (depth > 6 || !obj || typeof obj !== "object") return; + if (seen.has(obj)) return; + seen.add(obj); + const score = shapeScore(obj); + if (score > bestScore) { + bestHit = obj; + bestScore = score; + } + if (bestScore >= 3) return; + if (Array.isArray(obj)) { + for (let i = 0; i < Math.min(obj.length, 40); i++) { + find(obj[i], depth + 1); + if (bestScore >= 3) return; + } + return; + } + const keys = Object.keys(obj); + for (let i = 0; i < Math.min(keys.length, 40); i++) { + const k = keys[i]; + if (k.startsWith("_$") || k === "__proto__") continue; + let child; + try { child = obj[k]; } catch (_) { continue; } + find(child, depth + 1); + if (bestScore >= 3) return; + } + }; + + for (const el of document.querySelectorAll("*")) { + const k = Object.keys(el).find(k => k.startsWith("__ngContext__")); + if (!k) continue; + const ctx = el[k]; + if (!Array.isArray(ctx)) continue; + for (const item of ctx) { + find(item, 0); + if (bestScore >= 3) return bestHit; + } + } + return bestHit; + }; + + const findComponent = () => { + for (const el of document.querySelectorAll("*")) { + const ctxKey = Object.keys(el).find(k => k.startsWith("__ngContext__")); + if (!ctxKey) continue; + const ctx = el[ctxKey]; + if (!Array.isArray(ctx)) continue; + for (let idx = 0; idx < ctx.length; idx++) { + const item = ctx[idx]; + if (!item || typeof item !== "object") continue; + if ("beginDate" in item && "origin" in item + && "destination" in item && typeof item.search === "function") { + const proto = Object.getPrototypeOf(item); + return { + component: item, + componentInfo: { + ctor: proto && proto.constructor ? proto.constructor.name : "?", + idx, + elTag: (el.tagName || "").toLowerCase(), + elClass: (el.className || "").toString().slice(0, 120) + } + }; + } + } + } + return { component: null, componentInfo: null }; + }; + + const setControlValue = (control, value) => { + if (!control || typeof control !== "object") return false; + try { + if (typeof control.setValue === "function") { + control.setValue(value, { emitEvent: true }); + return true; + } + } catch (_) {} + try { + if (typeof control.patchValue === "function") { + control.patchValue(value, { emitEvent: true }); + return true; + } + } catch (_) {} + return false; + }; + + const listControlEntries = (root, prefix = "", out = [], seen = new WeakSet()) => { + if (!root || typeof root !== "object" || seen.has(root)) return out; + seen.add(root); + const controls = root.controls; + if (!controls || typeof controls !== "object") return out; + + if (Array.isArray(controls)) { + for (let idx = 0; idx < controls.length; idx++) { + const child = controls[idx]; + const path = prefix ? prefix + "." + idx : String(idx); + out.push({ path, control: child }); + listControlEntries(child, path, out, seen); + } + return out; + } + + for (const key of Object.keys(controls)) { + const child = controls[key]; + const path = prefix ? prefix + "." + key : key; + out.push({ path, control: child }); + listControlEntries(child, path, out, seen); + } + return out; + }; + + const controlHasChildren = (control) => + !!(control && typeof control === "object" && control.controls + && (Array.isArray(control.controls) || typeof control.controls === "object")); + + const invalidControlPaths = (form) => { + if (!form || typeof form !== "object") return []; + return listControlEntries(form) + .filter(entry => !controlHasChildren(entry.control)) + .filter(entry => { + const control = entry.control; + return !!(control && typeof control === "object" && control.invalid === true); + }) + .slice(0, 12) + .map(entry => entry.path); + }; + + const readResources = () => { + try { + const raw = sessionStorage.getItem("navitaire.digital.resources"); + return raw ? JSON.parse(raw) : null; + } catch (_) { + return null; + } + }; + + const stationFromResources = (code) => { + const resources = readResources(); + const stations = resources && resources.entities && resources.entities.stations + && resources.entities.stations.values; + return (stations && stations[code]) || null; + }; + + const stationValueLooksRight = (value, code) => { + if (!value || typeof value !== "object") return false; + const stationCode = String(value.stationCode || value.code || value.locationCode || "").toUpperCase(); + if (stationCode === code) return true; + const shortName = String( + (value.locationDetails && value.locationDetails.shortName) + || value.shortName + || value.name + || "" + ).toUpperCase(); + return shortName.includes(code); + }; + + const safePreview = (value, depth = 0) => { + if (depth > 2) return null; + if (value === null || value === undefined) return value; + if (typeof value === "function") return "[function]"; + if (value instanceof Date) return value.toISOString(); + if (typeof value !== "object") return value; + if (Array.isArray(value)) return value.slice(0, 8).map(v => safePreview(v, depth + 1)); + const out = {}; + for (const key of Object.keys(value).slice(0, 12)) { + try { out[key] = safePreview(value[key], depth + 1); } catch (_) {} + } + return out; + }; + + const stationDisplayText = (station) => { + if (!station || typeof station !== "object") return ""; + const shortName = String( + (station.locationDetails && station.locationDetails.shortName) + || station.shortName + || station.name + || station.stationCode + || "" + ).trim(); + const region = String( + (station.locationDetails && station.locationDetails.provinceStateCode) + || station.provinceStateCode + || "" + ).trim(); + if (shortName && region) return shortName + ", " + region; + return shortName || region; + }; + + const pushEmitter = (target, value) => { + if (!target || typeof target !== "object") return false; + try { + if (typeof target.next === "function") { + target.next(value); + return true; + } + } catch (_) {} + try { + if (typeof target.emit === "function") { + target.emit(value); + return true; + } + } catch (_) {} + return false; + }; + + const componentStateSnapshot = (component) => ({ + origin: stationValueLooksRight(component && component.origin, "\(origin)"), + destination: stationValueLooksRight(component && component.destination, "\(destination)"), + beginDateType: component && component.beginDate instanceof Date ? "date" : typeof (component && component.beginDate), + tripType: component && component.tripType || null, + fromInputText: component && component.fromStation && component.fromStation.inputText || null, + toInputText: component && component.toStation && component.toStation.inputText || null, + departureSelectionComplete: component && component.departureSelectionComplete === true, + arrivalSelectionComplete: component && component.arrivalSelectionComplete === true, + searchStart: component && "searchStart" in component ? component.searchStart : null, + searchComplete: component && "searchComplete" in component ? component.searchComplete : null, + searchButtonDisabled: !!(component && component.searchButton && component.searchButton.disabled), + searchButtonAriaDisabled: component && component.searchButton + && typeof component.searchButton.getAttribute === "function" + ? component.searchButton.getAttribute("aria-disabled") + : null + }); + + const pickerPreview = (picker) => ({ + inputText: picker && picker.inputText || null, + showResults: picker && picker.showResults || false, + hasInputTextStream: !!(picker && picker.inputText$), + hasSelectedUpdated: !!(picker && picker.selectedUpdated) + }); + + const unlockButton = (button) => { + if (!button || typeof button !== "object") return false; + let touched = false; + try { + if (typeof button.removeAttribute === "function") { + button.removeAttribute("disabled"); + touched = true; + } + } catch (_) {} + try { + button.disabled = false; + touched = true; + } catch (_) {} + try { + if (typeof button.setAttribute === "function") { + button.setAttribute("aria-disabled", "false"); + touched = true; + } + } catch (_) {} + return touched; + }; + + const primeComponentState = (component, mode = "minimal") => { + if (!component || typeof component !== "object") return { primed: false }; + const desiredDate = new Date(\(targetYear), \(targetMonth - 1), \(targetDay), 0, 0, 0); + const originStation = stationFromResources("\(origin)"); + const destinationStation = stationFromResources("\(destination)"); + const componentAssignments = []; + const methodCalls = []; + const notes = []; + const selection = { + originStation: originStation || null, + destinationStation: destinationStation || null, + departureDate: desiredDate, + returnDate: null, + tripType: "OneWay" + }; + const callMaybe = (name, args) => { + if (!component || typeof component[name] !== "function") return; + try { + component[name](...args); + methodCalls.push(name + "(ok)"); + } catch (err) { + methodCalls.push(name + "(" + String(err && err.message ? err.message : err) + ")"); + } + }; + + try { + component.beginDate = desiredDate; + componentAssignments.push("beginDate"); + } catch (_) {} + try { + if ("endDate" in component) { + component.endDate = null; + componentAssignments.push("endDate"); + } + } catch (_) {} + try { + if ("tripType" in component) { + component.tripType = "OneWay"; + componentAssignments.push("tripType"); + } + } catch (_) {} + if (originStation) { + try { + component.origin = originStation; + componentAssignments.push("origin"); + } catch (_) {} + } + if (destinationStation) { + try { + component.destination = destinationStation; + componentAssignments.push("destination"); + } catch (_) {} + } + + try { + if (!component.latestTripSelection || typeof component.latestTripSelection !== "object") { + component.latestTripSelection = {}; + componentAssignments.push("latestTripSelection={}"); + } + if (component.latestTripSelection && typeof component.latestTripSelection === "object") { + Object.assign(component.latestTripSelection, selection); + componentAssignments.push("latestTripSelection"); + } + } catch (_) {} + + for (const key of ["departureSelectionComplete", "arrivalSelectionComplete"]) { + try { + if (key in component) { + component[key] = true; + componentAssignments.push(key); + } + } catch (_) {} + } + for (const key of ["searchStart", "searchComplete"]) { + try { + if (!(key in component)) continue; + const current = component[key]; + if (typeof current === "boolean" || current == null) { + component[key] = false; + componentAssignments.push(key); + } + } catch (_) {} + } + + const syncStationPicker = (picker, station, label, assignmentName) => { + if (!picker || typeof picker !== "object" || !station) return; + try { + picker.inputText = label; + componentAssignments.push(assignmentName + ".inputText"); + } catch (_) {} + try { + picker.showResults = false; + componentAssignments.push(assignmentName + ".showResults"); + } catch (_) {} + if (mode !== "inputs") { + return; + } + if (pushEmitter(picker.inputText$, label)) { + componentAssignments.push(assignmentName + ".inputText$"); + } + if (pushEmitter(picker.selectedUpdated, station)) { + componentAssignments.push(assignmentName + ".selectedUpdated"); + } + }; + + if (mode === "signals" || mode === "inputs" || mode === "methods") { + syncStationPicker(component.fromStation, originStation, stationDisplayText(originStation), "fromStation"); + syncStationPicker(component.toStation, destinationStation, stationDisplayText(destinationStation), "toStation"); + } + + if (component.searchButton && unlockButton(component.searchButton)) { + componentAssignments.push("searchButton.unlocked"); + } + + if (mode === "methods") { + if (originStation) callMaybe("fromUpdated", [originStation]); + if (destinationStation) callMaybe("toUpdated", [destinationStation]); + if (originStation && destinationStation && typeof component.setSelectedStations === "function") { + try { + component.setSelectedStations(selection); + methodCalls.push("setSelectedStations(selection)"); + } catch (err1) { + try { + component.setSelectedStations(originStation, destinationStation); + methodCalls.push("setSelectedStations(origin,destination)"); + } catch (err2) { + methodCalls.push("setSelectedStations(" + String(err2 && err2.message ? err2.message : err2) + ")"); + } + } + } + callMaybe("validateTripSelection", []); + callMaybe("validateDates", []); + try { + if (component.changeDetectorRef && typeof component.changeDetectorRef.detectChanges === "function") { + component.changeDetectorRef.detectChanges(); + methodCalls.push("detectChanges(ok)"); + } + } catch (err) { + methodCalls.push("detectChanges(" + String(err && err.message ? err.message : err) + ")"); + } + } + + const form = component.form && typeof component.form === "object" ? component.form : null; + if (!originStation) notes.push("origin station missing from resources"); + if (!destinationStation) notes.push("destination station missing from resources"); + + return { + primed: true, + strategy: mode, + beginDate: desiredDate.toISOString(), + componentAssignments, + formControlKeys: form ? listControlEntries(form).map(entry => entry.path).slice(0, 30) : [], + originResolved: originStation ? { + stationCode: originStation.stationCode || "", + shortName: (originStation.locationDetails && originStation.locationDetails.shortName) || originStation.name || "" + } : null, + destinationResolved: destinationStation ? { + stationCode: destinationStation.stationCode || "", + shortName: (destinationStation.locationDetails && destinationStation.locationDetails.shortName) || destinationStation.name || "" + } : null, + formState: form ? { + valid: form.valid === true, + invalid: form.invalid === true, + invalidPaths: invalidControlPaths(form) + } : null, + methodCalls, + notes, + componentState: componentStateSnapshot(component), + componentPreview: { + origin: safePreview(component.origin), + destination: safePreview(component.destination), + latestTripSelection: safePreview(component.latestTripSelection), + fromStation: pickerPreview(component.fromStation), + toStation: pickerPreview(component.toStation) + } + }; + }; + + const clickFindFlights = async (component, forceEnable = false) => { + const visible = el => !!(el && (el.offsetWidth || el.offsetHeight || el.getClientRects().length)); + const button = Array.from(document.querySelectorAll("button, [role='button'], input[type='submit']")) + .filter(visible) + .find(el => /find flights/i.test(el.innerText || el.textContent || el.value || "")); + if (!button) { + return { found: false, clicked: false, message: "Find Flights button not found" }; + } + + const text = (button.innerText || button.textContent || button.value || "") + .replace(/\\s+/g, " ") + .trim(); + const disabledBefore = !!button.disabled || button.getAttribute("aria-disabled") === "true"; + if (disabledBefore && forceEnable) { + unlockButton(button); + if (component && component.searchButton && component.searchButton !== button) { + unlockButton(component.searchButton); + } + await sleep(60); + } + const disabled = !!button.disabled || button.getAttribute("aria-disabled") === "true"; + if (disabled) { + return { + found: true, + clicked: false, + message: "Find Flights button disabled", + text, + disabled, + ariaDisabled: button.getAttribute("aria-disabled"), + forceEnableAttempted: forceEnable + }; + } + + button.scrollIntoView({ block: "center" }); + try { button.focus(); } catch (_) {} + for (const type of ["pointerdown", "mousedown", "pointerup", "mouseup", "click"]) { + try { + button.dispatchEvent(new MouseEvent(type, { bubbles: true, cancelable: true, view: window })); + } catch (_) {} + } + try { + if (typeof button.click === "function") button.click(); + } catch (_) {} + await sleep(700); + + return { + found: true, + clicked: true, + message: "clicked Find Flights", + text, + disabled: false, + ariaDisabled: button.getAttribute("aria-disabled"), + forceEnableAttempted: forceEnable, + disabledBefore + }; + }; + + const waitForAvailability = async (timeoutMs) => { + const deadline = Date.now() + timeoutMs; + let stats = resourceStats(); + while (Date.now() < deadline) { + const hit = harvestAvailability(); + stats = resourceStats(); + if (hit) return { hit, href: location.href, stats }; + if (location.href.includes("/booking/select") && stats.count > 0) { + await sleep(400); + const retry = harvestAvailability(); + if (retry) return { hit: retry, href: location.href, stats: resourceStats() }; + } + await sleep(300); + } + return { hit: null, href: location.href, stats }; + }; + + let componentSearchError = null; + let componentInfo = null; + let primedComponent = null; + let componentStateBefore = null; + let initialClickResult = null; + let clickResult = null; + let primeAttempts = []; + let component = null; + try { + const found = findComponent(); + componentInfo = found.componentInfo; + component = found.component; + if (component) { + componentStateBefore = componentStateSnapshot(component); + } + } catch (err) { + componentSearchError = String(err && err.message ? err.message : err); + } + + try { + initialClickResult = await clickFindFlights(component, false); + clickResult = initialClickResult; + if (initialClickResult && initialClickResult.clicked) { + const waited = await waitForAvailability(uiSearchWaitMs); + if (waited.hit) { + const serialized = safeStringify({ data: jsonSafe(waited.hit) }); + return safeStringify({ + ok: true, + message: "Find Flights click produced availability state" + + (waited.href.includes("/booking/select") ? " on booking/select" : ""), + via: "find-flights-click", + component: componentInfo, + componentStateBefore, + initialClickResult, + clickResult, + componentSearchError, + searchResourceCount: waited.stats.count, + completedResourceCount: waited.stats.completed, + href: waited.href, + body: serialized + }); + } + } + } catch (err) { + clickResult = { + found: true, + clicked: false, + message: "Find Flights click threw: " + String(err && err.message ? err.message : err) + }; + } + + if (component) { + primedComponent = primeComponentState(component, "minimal"); + primeAttempts.push(primedComponent); + try { + clickResult = await clickFindFlights(component, true); + if (clickResult && clickResult.clicked) { + const waited = await waitForAvailability(uiSearchWaitMs); + if (waited.hit) { + const serialized = safeStringify({ data: jsonSafe(waited.hit) }); + return safeStringify({ + ok: true, + message: "Find Flights click produced availability after minimal component sync" + + (waited.href.includes("/booking/select") ? " on booking/select" : ""), + via: "primed-find-flights-click", + component: componentInfo, + componentStateBefore, + primedComponent, + primeAttempts, + initialClickResult, + clickResult, + componentSearchError, + searchResourceCount: waited.stats.count, + completedResourceCount: waited.stats.completed, + href: waited.href, + body: serialized + }); + } + } + } catch (err) { + clickResult = { + found: true, + clicked: false, + message: "primed Find Flights click threw: " + String(err && err.message ? err.message : err) + }; + } + + primedComponent = primeComponentState(component, "inputs"); + primeAttempts.push(primedComponent); + } + + try { + if (component) { + try { + const r = component.search(); + if (r && typeof r.then === "function") { + try { await r; } catch (err) { + componentSearchError = String(err && err.message ? err.message : err); + } + } + } catch (err) { + componentSearchError = String(err && err.message ? err.message : err); + } + + const waited = await waitForAvailability(uiSearchWaitMs); + if (waited.hit) { + const serialized = safeStringify({ data: jsonSafe(waited.hit) }); + return safeStringify({ + ok: true, + message: "component.search() produced availability state" + + (waited.href.includes("/booking/select") ? " on booking/select" : ""), + via: "component-search", + component: componentInfo, + componentStateBefore, + primedComponent, + primeAttempts, + initialClickResult, + clickResult, + componentSearchError, + searchResourceCount: waited.stats.count, + completedResourceCount: waited.stats.completed, + href: waited.href, + body: serialized + }); + } + + primedComponent = primeComponentState(component, "methods"); + primeAttempts.push(primedComponent); + try { + const retry = component.search(); + if (retry && typeof retry.then === "function") { + try { await retry; } catch (err) { + componentSearchError = String(err && err.message ? err.message : err); + } + } + } catch (err) { + componentSearchError = String(err && err.message ? err.message : err); + } + + const retried = await waitForAvailability(uiSearchWaitMs); + if (retried.hit) { + const serialized = safeStringify({ data: jsonSafe(retried.hit) }); + return safeStringify({ + ok: true, + message: "component.search() produced availability after method sync" + + (retried.href.includes("/booking/select") ? " on booking/select" : ""), + via: "component-search-method-sync", + component: componentInfo, + componentStateBefore, + primedComponent, + primeAttempts, + initialClickResult, + clickResult, + componentSearchError, + searchResourceCount: retried.stats.count, + completedResourceCount: retried.stats.completed, + href: retried.href, + body: serialized + }); + } + } + } catch (err) { + componentSearchError = String(err && err.message ? err.message : err); + } + const token = readToken(); - if (!token) return JSON.stringify({ ok: false, message: "no token in sessionStorage" }); + if (!token) { + const stats = resourceStats(); + return safeStringify({ + ok: false, + message: "component.search() found no availability state and no token in sessionStorage", + via: "neither", + componentSearchError, + component: componentInfo, + componentStateBefore, + primedComponent, + primeAttempts, + initialClickResult, + clickResult, + searchResourceCount: stats.count, + completedResourceCount: stats.completed, + href: location.href + }); + } const url = "https://api.jsx.com/api/nsk/v4/availability/search/simple"; const body = JSON.stringify({ @@ -845,210 +1569,164 @@ private final class JSXFlow { codes: { currencyCode: "USD" }, ssrCollectionsMode: 1 }); - - // Attempt 1: straight fetch POST. Uses the unwrapped - // window.fetch. credentials:include forwards the Akamai - // session cookies the page already has from loading - // https://www.jsx.com. - let directFetchResult; - try { - const resp = await fetch(url, { - method: "POST", - credentials: "include", - headers: { - "Content-Type": "application/json", - "Accept": "application/json, text/plain, */*", - "Authorization": token - }, - body + const lowFareUrl = (() => { + const qs = new URLSearchParams({ + origin: "\(origin)", + destination: "\(destination)", + currencyCode: "USD", + includeTaxesAndFees: "true", + startDate: "\(date)", + endDate: "\(date)", + numberOfPassengers: "1" }); - const text = await resp.text(); - directFetchResult = { - ok: resp.status >= 200 && resp.status < 300 && text.length > 100, - status: resp.status, - length: text.length, - body: text - }; - } catch (err) { - directFetchResult = { - ok: false, - status: 0, - length: 0, - error: String(err && err.message ? err.message : err) - }; + return "https://api.jsx.com/api/nsk/v1/availability/lowfare/estimate?" + qs.toString(); + })(); + + const warmLowFare = async () => { + const warmToken = readToken(); + if (!warmToken) { + return { ok: false, status: 0, error: "missing token for lowfare warmup" }; + } + try { + const resp = await fetch(lowFareUrl, { + method: "GET", + credentials: "include", + headers: { + "Accept": "application/json, text/plain, */*", + "Authorization": warmToken + } + }); + const text = await resp.text(); + return { + ok: resp.status >= 200 && resp.status < 300 && text.length > 0, + status: resp.status, + length: text.length + }; + } catch (err) { + return { + ok: false, + status: 0, + error: String(err && err.message ? err.message : err) + }; + } + }; + + const runDirectFetch = async () => { + const directToken = readToken(); + if (!directToken) { + return { + ok: false, + status: 0, + length: 0, + error: "missing token before direct fetch" + }; + } + try { + const resp = await fetch(url, { + method: "POST", + credentials: "include", + headers: { + "Content-Type": "application/json", + "Accept": "application/json, text/plain, */*", + "Authorization": directToken + }, + body + }); + const text = await resp.text(); + return { + ok: resp.status >= 200 && resp.status < 300 && text.length > 100, + status: resp.status, + length: text.length, + body: text + }; + } catch (err) { + return { + ok: false, + status: 0, + length: 0, + error: String(err && err.message ? err.message : err) + }; + } + }; + + let directFetchResult; + let lowFareWarmup = { ok: false, status: 0, skipped: true }; + directFetchResult = await runDirectFetch(); + if (!directFetchResult.ok) { + lowFareWarmup = await warmLowFare(); + await sleep(lowFareWarmup.ok ? 800 : 1600); + directFetchResult = await runDirectFetch(); + } + if (!directFetchResult.ok && (directFetchResult.error || "").includes("Load failed")) { + await sleep(1600); + directFetchResult = await runDirectFetch(); } if (directFetchResult.ok) { - return JSON.stringify({ + const stats = resourceStats(); + return safeStringify({ ok: true, message: "direct fetch POST succeeded status=" + directFetchResult.status + " len=" + directFetchResult.length, via: "direct-fetch", + componentSearchError, + component: componentInfo, + componentStateBefore, + primedComponent, + primeAttempts, + initialClickResult, + clickResult, directStatus: directFetchResult.status, directLength: directFetchResult.length, + lowFareWarmup, + searchResourceCount: stats.count, + completedResourceCount: stats.completed, + href: location.href, body: directFetchResult.body }); } - // Attempt 2: component.search() + SPA state harvest. Wrap - // the whole thing in try/catch so that if anything in the - // fallback path throws (which happened with a WeakSet - // misuse in a prior iteration), we still return a result - // instead of killing the function with an uncaught error. - let fallbackError = null; - let componentInfo = null; - try { - let component = null; - for (const el of document.querySelectorAll("*")) { - const ctxKey = Object.keys(el).find(k => k.startsWith("__ngContext__")); - if (!ctxKey) continue; - const ctx = el[ctxKey]; - if (!Array.isArray(ctx)) continue; - for (let idx = 0; idx < ctx.length; idx++) { - const item = ctx[idx]; - if (!item || typeof item !== "object") continue; - if ("beginDate" in item && "origin" in item - && "destination" in item && typeof item.search === "function") { - component = item; - const proto = Object.getPrototypeOf(item); - componentInfo = { - ctor: proto && proto.constructor ? proto.constructor.name : "?", - idx - }; - break; - } - } - if (component) break; - } - - if (component) { - if (!(component.beginDate instanceof Date)) { - component.beginDate = new Date(\(targetYear), \(targetMonth - 1), \(targetDay), 12, 0, 0); - } - try { - const r = component.search(); - if (r && typeof r.then === "function") { try { await r; } catch (_) {} } - } catch (_) {} - - // Walk __ngContext__ for the parsed availability shape. - // Single globally-shared WeakSet (not recreated per - // recursion) — WeakSet isn't iterable so we can't - // clone it anyway. - const hasShape = (obj) => { - if (!obj || typeof obj !== "object") return false; - try { - if (obj.faresAvailable && typeof obj.faresAvailable === "object" - && Object.keys(obj.faresAvailable).length > 0) return true; - if (Array.isArray(obj.results)) { - for (const x of obj.results) { - if (x && Array.isArray(x.trips)) { - for (const t of x.trips) { - if (t && t.journeysAvailableByMarket) return true; - } - } - } - } - if (obj.journeysAvailableByMarket) return true; - } catch (_) {} - return false; - }; - const seen = new WeakSet(); - const find = (obj, depth) => { - if (depth > 6 || !obj || typeof obj !== "object") return null; - if (seen.has(obj)) return null; - seen.add(obj); - if (hasShape(obj)) return obj; - if (Array.isArray(obj)) { - for (let i = 0; i < Math.min(obj.length, 40); i++) { - const h = find(obj[i], depth + 1); - if (h) return h; - } - return null; - } - const keys = Object.keys(obj); - for (let i = 0; i < Math.min(keys.length, 40); i++) { - const k = keys[i]; - if (k.startsWith("_$") || k === "__proto__") continue; - let child; - try { child = obj[k]; } catch (_) { continue; } - const h = find(child, depth + 1); - if (h) return h; - } - return null; - }; - - const deadline = Date.now() + 10000; - let hit = null; - while (Date.now() < deadline && !hit) { - for (const el of document.querySelectorAll("*")) { - const k = Object.keys(el).find(k => k.startsWith("__ngContext__")); - if (!k) continue; - const ctx = el[k]; - if (!Array.isArray(ctx)) continue; - for (const item of ctx) { - hit = find(item, 0); - if (hit) break; - } - if (hit) break; - } - if (!hit) await new Promise(r => setTimeout(r, 300)); - } - - if (hit) { - const jsonSafe = (v, d = 0) => { - if (d > 10) return null; - if (v === null || v === undefined) return v; - if (typeof v === "function") return undefined; - if (v instanceof Date) return v.toISOString(); - if (typeof v !== "object") return v; - if (Array.isArray(v)) { - const out = []; - for (let i = 0; i < Math.min(v.length, 100); i++) { - const e = jsonSafe(v[i], d + 1); - if (e !== undefined) out.push(e); - } - return out; - } - const out = {}; - for (const k of Object.keys(v)) { - if (k.startsWith("_$") || k === "__proto__") continue; - let c; - try { c = v[k]; } catch (_) { continue; } - const s = jsonSafe(c, d + 1); - if (s !== undefined) out[k] = s; - } - return out; - }; - const wrapped = { data: jsonSafe(hit) }; - const serialized = JSON.stringify(wrapped); - return JSON.stringify({ - ok: true, - message: "harvested from SPA state (direct fetch failed: " - + (directFetchResult.error || ("status " + directFetchResult.status)) + ")", - via: "state-harvest", - component: componentInfo, - directFetchError: directFetchResult.error || ("status " + directFetchResult.status), - body: serialized - }); - } - } - } catch (err) { - fallbackError = String(err && err.message ? err.message : err); + const waited = await waitForAvailability(5000); + if (waited.hit) { + const serialized = safeStringify({ data: jsonSafe(waited.hit) }); + return safeStringify({ + ok: true, + message: "harvested from SPA state after direct fetch fallback", + via: "state-harvest", + componentSearchError, + component: componentInfo, + componentStateBefore, + primedComponent, + primeAttempts, + initialClickResult, + clickResult, + directFetchError: directFetchResult.error || ("status " + directFetchResult.status), + lowFareWarmup, + searchResourceCount: waited.stats.count, + completedResourceCount: waited.stats.completed, + href: waited.href, + body: serialized + }); } - // Both attempts failed. Return the direct-fetch diagnostic - // verbatim so we can see the real reason the direct fetch - // didn't work. - return JSON.stringify({ + return safeStringify({ ok: false, - message: "direct fetch POST failed AND SPA state harvest found nothing" + message: "component.search() and direct fetch both failed to produce availability" + " (direct: " + (directFetchResult.error || ("status=" + directFetchResult.status)) + ")", via: "neither", + componentSearchError, directStatus: directFetchResult.status, directError: directFetchResult.error || null, - fallbackError, + lowFareWarmup, component: componentInfo, - href: location.href + componentStateBefore, + primedComponent, + primeAttempts, + initialClickResult, + clickResult, + searchResourceCount: waited.stats.count, + completedResourceCount: waited.stats.completed, + href: waited.href }); })(); """, @@ -1075,7 +1753,13 @@ private final class JSXFlow { } if let searchCount = s17.data["searchResourceCount"] as? Int { let completed = (s17.data["completedResourceCount"] as? Int) ?? 0 - print("[JSX] ▸ /search/simple resource entries: \(searchCount) total, \(completed) with body") + print("[JSX] ▸ /search/simple resource entries: \(searchCount) total, \(completed) completed") + } + if let initialClickInfo = s17.data["initialClickResult"] as? [String: Any] { + print("[JSX] ▸ Find Flights initial attempt: \(describe(initialClickInfo))") + } + if let clickInfo = s17.data["clickResult"] as? [String: Any] { + print("[JSX] ▸ Find Flights attempt: \(describe(clickInfo))") } // ---- STEP 18 ---- @@ -1085,11 +1769,34 @@ private final class JSXFlow { // /lowfare/estimate from the page context (GETs are known to // succeed from WKWebView) so the UI still has something to show. var parsedFlights: [JSXFlight] = [] - var rawHarvested: String? = s17.data["body"] as? String + let rawHarvested: String? = s17.data["body"] as? String var lowFareFallback: JSXLowFareEstimate? = nil + self.capturedBody = rawHarvested let s18 = await nativeStep("Parse harvested availability data") { [weak self] in guard let self else { return (false, "self gone", [:]) } + + // PRIMARY: try GraphQL /api/v2/graph/searchAvailability — the + // endpoint AIRLINE_INTEGRATION_GUIDE.md recommends. If it + // succeeds, use those flights and skip the /search/simple + // harvest / native REST fallback entirely. + if let graphQLFlights = await self.nativePOSTGraphQLAvailability(), + !graphQLFlights.isEmpty { + parsedFlights = graphQLFlights + for flight in graphQLFlights { + let classesText = flight.classes.map { c in + "\(c.classOfService)/\(c.productClass):\(c.availableCount)@$\(Int(c.fareTotal))" + }.joined(separator: ", ") + let low = flight.lowestFareTotal.map { "$\(Int($0))" } ?? "n/a" + print("[JSX] │ \(flight.flightNumber) \(flight.origin)→\(flight.destination) " + + "\(flight.departureLocal) → \(flight.arrivalLocal) " + + "stops=\(flight.stops) seats=\(flight.totalAvailable) from=\(low) [\(classesText)]") + } + return (true, "decoded \(graphQLFlights.count) flights via GraphQL searchAvailability", + ["count": graphQLFlights.count, "via": "graphql"]) + } + print("[JSX] ▸ GraphQL path returned nothing; falling back to /search/simple harvest") + if let rawHarvested, !rawHarvested.isEmpty { parsedFlights = self.parseFlights(from: rawHarvested) if parsedFlights.isEmpty { @@ -1108,6 +1815,25 @@ private final class JSXFlow { return (true, "decoded \(parsedFlights.count) flights from harvested SPA state", ["count": parsedFlights.count]) } else { + print("[JSX] ▸ no harvested payload; trying native URLSession POST /search/simple") + if let nativeBody = await self.nativePOSTSearchSimple() { + self.capturedBody = nativeBody + parsedFlights = self.parseFlights(from: nativeBody) + if !parsedFlights.isEmpty { + for flight in parsedFlights { + let classesText = flight.classes.map { c in + "\(c.classOfService)/\(c.productClass):\(c.availableCount)@$\(Int(c.fareTotal))" + }.joined(separator: ", ") + let low = flight.lowestFareTotal.map { "$\(Int($0))" } ?? "n/a" + print("[JSX] │ \(flight.flightNumber) \(flight.origin)→\(flight.destination) " + + "\(flight.departureLocal) → \(flight.arrivalLocal) " + + "stops=\(flight.stops) seats=\(flight.totalAvailable) from=\(low) [\(classesText)]") + } + return (true, "decoded \(parsedFlights.count) flights from native URLSession POST", + ["count": parsedFlights.count, "via": "native-urlsession"]) + } + print("[JSX] │ native URLSession POST returned \(nativeBody.count) bytes but parser found 0 flights") + } print("[JSX] ▸ no harvested payload; fetching /lowfare/estimate directly from page context") if let lf = await self.fetchLowFareEstimateDirectly() { lowFareFallback = lf @@ -1164,6 +1890,371 @@ private final class JSXFlow { // MARK: - Low-fare direct fetch (step 18 fallback) + private func nativePOSTSearchSimple() async -> String? { + guard let webView = self.webView else { + print("[JSX] │ native POST: webView missing") + return nil + } + guard let token = await readNavitaireToken() else { + print("[JSX] │ native POST: missing navitaire token") + return nil + } + + let allCookies = await allCookies(from: webView.configuration.websiteDataStore.httpCookieStore) + let jsxCookies = allCookies.filter { cookie in + let domain = cookie.domain.lowercased() + return domain == "api.jsx.com" + || domain == "jsx.com" + || domain == ".jsx.com" + || domain.hasSuffix(".jsx.com") + } + let cookieHeader = jsxCookies.map { "\($0.name)=\($0.value)" }.joined(separator: "; ") + + guard let url = URL(string: "https://api.jsx.com/api/nsk/v4/availability/search/simple") else { + print("[JSX] │ native POST: invalid search/simple URL") + return nil + } + + var request = URLRequest(url: url) + request.httpMethod = "POST" + request.timeoutInterval = 30 + request.setValue("application/json", forHTTPHeaderField: "Content-Type") + request.setValue("application/json, text/plain, */*", forHTTPHeaderField: "Accept") + request.setValue(token, forHTTPHeaderField: "Authorization") + request.setValue("https://www.jsx.com", forHTTPHeaderField: "Origin") + request.setValue("https://www.jsx.com/home/search", forHTTPHeaderField: "Referer") + request.setValue( + "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 " + + "(KHTML, like Gecko) Version/17.4 Safari/605.1.15", + forHTTPHeaderField: "User-Agent" + ) + if !cookieHeader.isEmpty { + request.setValue(cookieHeader, forHTTPHeaderField: "Cookie") + } + + let body: [String: Any] = [ + "beginDate": self.date, + "destination": self.destination, + "origin": self.origin, + "passengers": ["types": [["count": 1, "type": "ADT"]]], + "taxesAndFees": 2, + "filters": [ + "maxConnections": 4, + "compressionType": 1, + "sortOptions": [4], + "fareTypes": ["R"], + "exclusionType": 2 + ], + "numberOfFaresPerJourney": 10, + "codes": ["currencyCode": "USD"], + "ssrCollectionsMode": 1 + ] + guard let bodyData = try? JSONSerialization.data(withJSONObject: body) else { + print("[JSX] │ native POST: failed to serialize request body") + return nil + } + request.httpBody = bodyData + + let config = URLSessionConfiguration.ephemeral + config.timeoutIntervalForRequest = 30 + config.timeoutIntervalForResource = 30 + let session = URLSession(configuration: config) + + do { + let (data, response) = try await session.data(for: request) + guard let http = response as? HTTPURLResponse else { + print("[JSX] │ native POST: non-HTTP response") + return nil + } + let text = String(data: data, encoding: .utf8) ?? "" + print("[JSX] │ native POST: status=\(http.statusCode), body=\(text.count) bytes, cookies=\(jsxCookies.count)") + guard (200..<300).contains(http.statusCode), text.count > 100 else { + let preview = String(text.prefix(300)) + print("[JSX] │ native POST preview: \(preview)") + return nil + } + return text + } catch { + let nsError = error as NSError + print("[JSX] │ native POST error: \(error.localizedDescription) [\(nsError.domain) \(nsError.code)]") + return nil + } + } + + /// POST /api/v2/graph/searchAvailability — the endpoint recommended by + /// AIRLINE_INTEGRATION_GUIDE.md. Unlike /search/simple, GraphQL responses + /// inline fare details under each fare (`passengerFares[].fareAmount`) so + /// the parser doesn't need to join against `faresAvailable`. We still + /// reuse the navitaire.digital.token acquired via WKWebView (15-min idle). + /// Returns parsed flights on success so `run()` can short-circuit the + /// /search/simple harvest when this path works. + private func nativePOSTGraphQLAvailability() async -> [JSXFlight]? { + guard let webView = self.webView else { + print("[JSX] │ GraphQL: webView missing") + return nil + } + guard let token = await readNavitaireToken() else { + print("[JSX] │ GraphQL: missing navitaire token") + return nil + } + + let allCookies = await allCookies(from: webView.configuration.websiteDataStore.httpCookieStore) + let jsxCookies = allCookies.filter { cookie in + let domain = cookie.domain.lowercased() + return domain == "api.jsx.com" + || domain == "jsx.com" + || domain == ".jsx.com" + || domain.hasSuffix(".jsx.com") + } + let cookieHeader = jsxCookies.map { "\($0.name)=\($0.value)" }.joined(separator: "; ") + + guard let url = URL(string: "https://api.jsx.com/api/v2/graph/searchAvailability") else { + print("[JSX] │ GraphQL: invalid URL") + return nil + } + + // GraphQL query — structure mirrors AIRLINE_INTEGRATION_GUIDE.md §4. + // Kept on a single line inside the JSON to avoid escape issues. + let graphQLQuery = """ + { availabilityv5(request: { criteria: [{ dates: { beginDate: \"\(self.date)\", endDate: \"\(self.date)\" }, stations: { originStationCodes: [\"\(self.origin)\"], destinationStationCodes: [\"\(self.destination)\"] } }], passengers: { types: [{ count: 1, type: \"ADT\" }] }, codes: { currencyCode: \"USD\" } }) { results { trips { date journeysAvailableByMarket { key value { journeyKey stops designator { arrival departure destination origin } segments { identifier { identifier carrierCode } legs { legInfo { equipmentType } } } fares { details { availableCount classOfService productClass passengerFares { fareAmount } } } } } } } } } + """ + + let body: [String: Any] = [ + "cachedResults": false, + "query": graphQLQuery + ] + guard let bodyData = try? JSONSerialization.data(withJSONObject: body) else { + print("[JSX] │ GraphQL: failed to serialize body") + return nil + } + + var request = URLRequest(url: url) + request.httpMethod = "POST" + request.timeoutInterval = 30 + request.setValue("application/json", forHTTPHeaderField: "Content-Type") + request.setValue("application/json, text/plain, */*", forHTTPHeaderField: "Accept") + request.setValue(token, forHTTPHeaderField: "Authorization") + request.setValue("https://www.jsx.com", forHTTPHeaderField: "Origin") + request.setValue("https://www.jsx.com/home/search", forHTTPHeaderField: "Referer") + request.setValue( + "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 " + + "(KHTML, like Gecko) Version/17.4 Safari/605.1.15", + forHTTPHeaderField: "User-Agent" + ) + if !cookieHeader.isEmpty { + request.setValue(cookieHeader, forHTTPHeaderField: "Cookie") + } + request.httpBody = bodyData + + print("[JSX] │ GraphQL POST \(url) \(self.origin)→\(self.destination) on \(self.date)") + + let config = URLSessionConfiguration.ephemeral + config.timeoutIntervalForRequest = 30 + config.timeoutIntervalForResource = 30 + let urlSession = URLSession(configuration: config) + + do { + let (data, response) = try await urlSession.data(for: request) + guard let http = response as? HTTPURLResponse else { + print("[JSX] │ GraphQL: non-HTTP response") + return nil + } + let text = String(data: data, encoding: .utf8) ?? "" + print("[JSX] │ GraphQL status=\(http.statusCode), body=\(text.count) bytes") + // Dump raw body so real field names / missing fields are visible. + // GraphQL bodies are small; print up to 4000 chars in two chunks + // so the Xcode console doesn't truncate mid-line. + let preview = text.prefix(4000) + print("[JSX] │ GraphQL raw body: \(preview)") + guard (200..<300).contains(http.statusCode), text.count > 50 else { + return nil + } + + self.capturedBody = text // preserve raw for debug logging + let flights = parseGraphQLFlights(from: text) + print("[JSX] │ GraphQL parsed \(flights.count) flights") + return flights.isEmpty ? nil : flights + } catch { + let ns = error as NSError + print("[JSX] │ GraphQL error: \(error.localizedDescription) [\(ns.domain) \(ns.code)]") + return nil + } + } + + /// Parser for the GraphQL response shape. GraphQL differs from + /// /search/simple in two ways: + /// 1. `data.availabilityv5.results[...]` (extra `availabilityv5` wrapper) + /// 2. `journeysAvailableByMarket` is an array of `{ key, value }` pairs + /// instead of a dict keyed by "ORIG|DEST" + /// 3. Fare details are inlined with passengerFares[].fareAmount — no + /// separate `faresAvailable` join. + fileprivate func parseGraphQLFlights(from rawJSON: String) -> [JSXFlight] { + guard let data = rawJSON.data(using: .utf8), + let root = try? JSONSerialization.jsonObject(with: data) as? [String: Any] else { + print("[JSX] │ parseGraphQLFlights: root JSON not a dict") + return [] + } + + if let errors = root["errors"] as? [[String: Any]], !errors.isEmpty { + print("[JSX] │ parseGraphQLFlights: GraphQL errors: \(errors)") + } + + guard let dataObj = root["data"] as? [String: Any], + let availability = dataObj["availabilityv5"] as? [String: Any], + let results = availability["results"] as? [[String: Any]] else { + print("[JSX] │ parseGraphQLFlights: missing data.availabilityv5.results") + return [] + } + + let marketKey = "\(self.origin)|\(self.destination)" + var flights: [JSXFlight] = [] + var seenKeys = Set() + + for result in results { + let trips = result["trips"] as? [[String: Any]] ?? [] + for trip in trips { + let byMarket = trip["journeysAvailableByMarket"] as? [[String: Any]] ?? [] + for pair in byMarket { + let key = (pair["key"] as? String) ?? marketKey + let journeys = pair["value"] as? [[String: Any]] ?? [] + for journey in journeys { + if let flight = buildFlightFromGraphQL(journey: journey, marketKey: key) { + let dedupeKey = "\(flight.flightNumber)|\(flight.departureLocal)" + if seenKeys.insert(dedupeKey).inserted { + flights.append(flight) + } + } + } + } + } + } + + flights.sort { $0.departureLocal < $1.departureLocal } + return flights + } + + private func buildFlightFromGraphQL(journey: [String: Any], marketKey: String) -> JSXFlight? { + let segments = journey["segments"] as? [[String: Any]] ?? [] + guard !segments.isEmpty else { return nil } + + let firstSeg = segments[0] + let firstIdentifier = firstSeg["identifier"] as? [String: Any] ?? [:] + let carrierCode = (firstIdentifier["carrierCode"] as? String) ?? "" + let baseNumber = (firstIdentifier["identifier"] as? String) ?? "" + var fullFlightNumber = "\(carrierCode)\(baseNumber)" + if segments.count > 1 { + let extras = segments.dropFirst().compactMap { seg -> String? in + let ident = seg["identifier"] as? [String: Any] ?? [:] + let cc = (ident["carrierCode"] as? String) ?? "" + let num = (ident["identifier"] as? String) ?? "" + let combined = "\(cc)\(num)" + return combined.isEmpty ? nil : combined + } + if !extras.isEmpty { + fullFlightNumber += "+" + extras.joined(separator: "+") + } + } + + let designator = journey["designator"] as? [String: Any] ?? [:] + let originCode = (designator["origin"] as? String) + ?? marketOrigin(marketKey) + ?? "" + let destinationCode = (designator["destination"] as? String) + ?? marketDestination(marketKey) + ?? "" + let departureLocal = (designator["departure"] as? String) ?? "" + let arrivalLocal = (designator["arrival"] as? String) ?? "" + + let stops = (journey["stops"] as? Int) + ?? ((journey["stops"] as? NSNumber)?.intValue ?? 0) + + var equipmentType: String? + if let legs = firstSeg["legs"] as? [[String: Any]], + let firstLeg = legs.first, + let legInfo = firstLeg["legInfo"] as? [String: Any] { + equipmentType = legInfo["equipmentType"] as? String + } + + var classes: [JSXFareClass] = [] + let fares = journey["fares"] as? [[String: Any]] ?? [] + for fareEntry in fares { + let details = fareEntry["details"] as? [[String: Any]] ?? [] + for detail in details { + let availableCount = (detail["availableCount"] as? Int) + ?? ((detail["availableCount"] as? NSNumber)?.intValue ?? 0) + let classOfService = (detail["classOfService"] as? String) ?? "" + let productClass = (detail["productClass"] as? String) ?? "" + + var fareTotal: Double = 0 + if let pax = detail["passengerFares"] as? [[String: Any]], + let first = pax.first { + fareTotal = doubleFromJSON(first["fareAmount"]) ?? 0 + } + + classes.append(JSXFareClass( + classOfService: classOfService, + productClass: productClass, + availableCount: availableCount, + fareTotal: fareTotal, + revenueTotal: fareTotal, + fareBasisCode: nil + )) + } + } + + let totalAvailable = classes.reduce(0) { $0 + $1.availableCount } + let lowestFareTotal = classes.map { $0.fareTotal }.filter { $0 > 0 }.min() + + return JSXFlight( + flightNumber: fullFlightNumber, + carrierCode: carrierCode, + origin: originCode, + destination: destinationCode, + departureLocal: departureLocal, + arrivalLocal: arrivalLocal, + stops: stops, + equipmentType: equipmentType, + totalAvailable: totalAvailable, + lowestFareTotal: lowestFareTotal, + classes: classes + ) + } + + private func readNavitaireToken(waitUpTo seconds: TimeInterval = 3) async -> String? { + let deadline = Date().addingTimeInterval(seconds) + let js = """ + return await (async () => { + try { + const raw = sessionStorage.getItem("navitaire.digital.token"); + if (!raw) return JSON.stringify({ ok: false, token: "" }); + const parsed = JSON.parse(raw); + const token = (parsed && parsed.token) || ""; + return JSON.stringify({ ok: !!token, token }); + } catch (_) { + return JSON.stringify({ ok: false, token: "" }); + } + })(); + """ + + while Date() < deadline { + if let result = await runJS(js), + let token = result["token"] as? String, + !token.isEmpty { + return token + } + try? await Task.sleep(nanoseconds: 200_000_000) + } + return nil + } + + private func allCookies(from store: WKHTTPCookieStore) async -> [HTTPCookie] { + await withCheckedContinuation { continuation in + store.getAllCookies { cookies in + continuation.resume(returning: cookies) + } + } + } + /// Fire a direct GET /api/nsk/v1/availability/lowfare/estimate from the /// page context. GETs are known to succeed from WKWebView against /// api.jsx.com (it's only POST /availability/search/simple that the @@ -1310,12 +2401,12 @@ private final class JSXFlow { // Print any extra fields the action returned (sample arrays, // counts, etc.) BEFORE the generic diagnostic dump. for (k, v) in stepData.sorted(by: { $0.key < $1.key }) { - print("[JSX] │ action.\(k): \(truncate(describe(v), limit: 400))") + print("[JSX] │ action.\(k): \(truncate(describe(v), limit: 1200))") } await dumpDiagnostics(reason: "action failed: \(actionMessage)") } else if !allOk { for (k, v) in stepData.sorted(by: { $0.key < $1.key }) { - print("[JSX] │ action.\(k): \(truncate(describe(v), limit: 400))") + print("[JSX] │ action.\(k): \(truncate(describe(v), limit: 1200))") } await dumpDiagnostics(reason: "verification failed") } @@ -1390,7 +2481,31 @@ private final class JSXFlow { let parsed = try JSONSerialization.jsonObject(with: data) return parsed as? [String: Any] } catch { - print("[JSX] │ runJS exception: \(error.localizedDescription)") + let nsError = error as NSError + let message = (nsError.userInfo["WKJavaScriptExceptionMessage"] as? String) + ?? (nsError.userInfo["WKJavaScriptExceptionMessageKey"] as? String) + ?? "" + let line = (nsError.userInfo["WKJavaScriptExceptionLineNumber"] as? NSNumber)?.intValue + ?? (nsError.userInfo["WKJavaScriptExceptionLineNumberKey"] as? NSNumber)?.intValue + let column = (nsError.userInfo["WKJavaScriptExceptionColumnNumber"] as? NSNumber)?.intValue + ?? (nsError.userInfo["WKJavaScriptExceptionColumnNumberKey"] as? NSNumber)?.intValue + let sourceURL = (nsError.userInfo["WKJavaScriptExceptionSourceURL"] as? URL)?.absoluteString + ?? (nsError.userInfo["WKJavaScriptExceptionSourceURLKey"] as? URL)?.absoluteString + ?? "" + var detail = error.localizedDescription + if !message.isEmpty { + detail += " — \(message)" + } + if let line { + detail += " @ line \(line)" + if let column { + detail += ":\(column)" + } + } + if !sourceURL.isEmpty { + detail += " [\(sourceURL)]" + } + print("[JSX] │ runJS exception: \(detail)") return nil } } @@ -1408,12 +2523,16 @@ private final class JSXFlow { const findBtnState = findBtn ? { disabled: findBtn.disabled, aria: findBtn.getAttribute("aria-disabled") } : null; const probe = window.__jsxProbe || {}; const shortenUrl = u => (u || "").split("?")[0].split("/").slice(-3).join("/"); - const lastCompleted = (probe.allCalls || []).slice(-6).map(c => - c.method + " " + c.status + (c.error ? "[" + c.error + "]" : "") + " " + shortenUrl(c.url) - ); - const lastInitiated = (probe.initiatedCalls || []).slice(-6).map(c => - c.method + " (init) " + shortenUrl(c.url) - ); + const recentResources = Array.isArray(probe.resources) + ? probe.resources.slice(-8).map(r => ({ + url: shortenUrl(r.url), + duration: r.duration || 0, + transferSize: r.transferSize || 0, + responseEnd: r.responseEnd || 0, + initiatorType: r.initiatorType || "" + })) + : []; + const searchResources = recentResources.filter(r => String(r.url || "").includes("availability/search/simple")); // Surface any error-flagged inputs so we can spot form validation failures. const errorMarkers = Array.from(document.querySelectorAll( "[class*='ng-invalid'], [class*='mat-form-field-invalid'], [class*='error']" @@ -1429,8 +2548,8 @@ private final class JSXFlow { href: location.href, stationBtns, matOptions, calendar, findBtnState, - lastCompleted, - lastInitiated, + recentResources, + searchResources, errorMarkers }); })(); @@ -1444,185 +2563,6 @@ private final class JSXFlow { } } - // MARK: - Native URLSession POST (step 17) - - /// Fires the `/availability/search/simple` POST via a native URLSession - /// request rather than from inside the WebKit web-content process. - /// URLSession uses iOS's native HTTPS stack whose TLS/HTTP2 fingerprint - /// matches Safari, so Akamai accepts it where it rejects WKWebView's - /// script-side `fetch()`/`XHR`. - /// - /// Forwards the session cookies from `WKHTTPCookieStore` (including - /// HttpOnly Akamai cookies that `document.cookie` can't read) and the - /// anonymous JWT from `sessionStorage["navitaire.digital.token"]`. - /// - /// On success, stores the response body on `self.capturedBody` so the - /// parse step can read it. On failure, calls `fail(...)` semantics are - /// handled by the caller checking `self.capturedBody`. - private func nativePOSTSearchSimple() async { - stepNumber += 1 - let label = "STEP \(String(format: "%02d", stepNumber))" - let name = "POST /availability/search/simple via native URLSession" - print("[JSX] ┌─ \(label) \(name)") - let start = Date() - - // 1. Read the auth token out of sessionStorage. This is the only JS - // call — everything else is native. - let tokenResult = await runJS(""" - return await (async () => { - const readToken = () => { - try { - const raw = sessionStorage.getItem("navitaire.digital.token"); - if (!raw) return ""; - const parsed = JSON.parse(raw); - return (parsed && parsed.token) || ""; - } catch (_) { return ""; } - }; - let token = readToken(); - if (!token) { - const deadline = Date.now() + 3000; - while (Date.now() < deadline) { - await new Promise(r => setTimeout(r, 200)); - token = readToken(); - if (token) break; - } - } - return JSON.stringify({ ok: !!token, token: token || "" }); - })(); - """) - let token = (tokenResult?["token"] as? String) ?? "" - if token.isEmpty { - print("[JSX] │ action: no auth token in sessionStorage after 3s wait") - let elapsed = String(format: "%.2fs", Date().timeIntervalSince(start)) - print("[JSX] └─ \(label) FAIL (\(elapsed))") - return - } - print("[JSX] │ action.token: \(token.prefix(24))…") - - // 2. Pull all cookies out of the WKWebView cookie store. This - // includes HttpOnly cookies that `document.cookie` can't see — - // which is critical because Akamai's session cookies are HttpOnly. - guard let webView = self.webView else { - print("[JSX] │ action: webView is nil") - print("[JSX] └─ \(label) FAIL") - return - } - let allCookies: [HTTPCookie] = await webView.configuration - .websiteDataStore.httpCookieStore.allCookies() - // Filter to cookies that would actually be sent to api.jsx.com. - // HTTPCookie.domain can be "jsx.com" (host and all subdomains), - // ".jsx.com" (same meaning, older style), or "api.jsx.com". - let jsxCookies = allCookies.filter { cookie in - let d = cookie.domain.lowercased() - return d == "api.jsx.com" - || d == "jsx.com" || d == ".jsx.com" - || d.hasSuffix(".jsx.com") - } - let cookieHeader = jsxCookies.map { "\($0.name)=\($0.value)" }.joined(separator: "; ") - print("[JSX] │ action.cookies: \(jsxCookies.count) from WKWebView store — \(jsxCookies.map(\.name).sorted().joined(separator: ", "))") - - // 3. Build the request. Headers mirror what the JSX SPA sends, so - // Akamai has no reason to flag us. User-Agent matches the UA we - // set on the WKWebView in step 01. - guard let url = URL(string: "https://api.jsx.com/api/nsk/v4/availability/search/simple") else { - print("[JSX] │ action: invalid URL") - print("[JSX] └─ \(label) FAIL") - return - } - var request = URLRequest(url: url) - request.httpMethod = "POST" - request.setValue("application/json", forHTTPHeaderField: "Content-Type") - request.setValue("application/json, text/plain, */*", forHTTPHeaderField: "Accept") - request.setValue(token, forHTTPHeaderField: "Authorization") - request.setValue("https://www.jsx.com", forHTTPHeaderField: "Origin") - request.setValue("https://www.jsx.com/home/search", forHTTPHeaderField: "Referer") - request.setValue( - "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 " - + "(KHTML, like Gecko) Version/17.4 Safari/605.1.15", - forHTTPHeaderField: "User-Agent" - ) - if !cookieHeader.isEmpty { - request.setValue(cookieHeader, forHTTPHeaderField: "Cookie") - } - - let bodyDict: [String: Any] = [ - "beginDate": self.date, - "destination": self.destination, - "origin": self.origin, - "passengers": ["types": [["count": 1, "type": "ADT"]]], - "taxesAndFees": 2, - "filters": [ - "maxConnections": 4, - "compressionType": 1, - "sortOptions": [4], - "fareTypes": ["R"], - "exclusionType": 2 - ], - "numberOfFaresPerJourney": 10, - "codes": ["currencyCode": "USD"], - "ssrCollectionsMode": 1 - ] - guard let bodyData = try? JSONSerialization.data(withJSONObject: bodyDict) else { - print("[JSX] │ action: failed to serialize request body") - print("[JSX] └─ \(label) FAIL") - return - } - request.httpBody = bodyData - - // 4. Fire via URLSession.shared. URLSession's default ephemeral - // session uses iOS's native HTTPS stack — same TLS fingerprint as - // Safari — which is what Akamai is happy to serve. - let session = URLSession.shared - do { - let (data, response) = try await session.data(for: request) - guard let http = response as? HTTPURLResponse else { - print("[JSX] │ action: non-HTTP response") - print("[JSX] └─ \(label) FAIL") - return - } - let bodyText = String(data: data, encoding: .utf8) ?? "" - print("[JSX] │ action: URLSession status=\(http.statusCode), body=\(bodyText.count) bytes") - - let statusOk = (200..<300).contains(http.statusCode) - let bodyOk = bodyText.count > 100 - let parseOk: Bool - if let d = bodyText.data(using: .utf8), - let root = try? JSONSerialization.jsonObject(with: d) as? [String: Any], - let payload = root["data"] as? [String: Any], - payload["results"] is [[String: Any]] { - parseOk = true - } else { - parseOk = false - } - - let g1 = statusOk ? "✓" : "✗" - let g2 = bodyOk ? "✓" : "✗" - let g3 = parseOk ? "✓" : "✗" - print("[JSX] │ verify \(g1) status is 2xx — status=\(http.statusCode)") - print("[JSX] │ verify \(g2) body is non-empty — \(bodyText.count) bytes") - print("[JSX] │ verify \(g3) body parses as JSON with data.results") - - if statusOk && bodyOk && parseOk { - self.capturedBody = bodyText - } else { - // Surface a snippet of whatever we got back so we can see - // what Akamai / Navitaire sent instead of the expected - // payload. - let preview = String(bodyText.prefix(500)) - print("[JSX] │ response preview: \(preview)") - } - - let elapsed = String(format: "%.2fs", Date().timeIntervalSince(start)) - let status = (statusOk && bodyOk && parseOk) ? "OK" : "FAIL" - print("[JSX] └─ \(label) \(status) (\(elapsed))") - } catch { - let nsErr = error as NSError - print("[JSX] │ action: URLSession error: \(error.localizedDescription) [domain=\(nsErr.domain) code=\(nsErr.code)]") - let elapsed = String(format: "%.2fs", Date().timeIntervalSince(start)) - print("[JSX] └─ \(label) FAIL (\(elapsed))") - } - } - // MARK: - JS snippet builders private func selectStationActionJS(indexIsDestination: Bool) -> String { diff --git a/JSX_NOTES.md b/JSX_NOTES.md index 6872750..247feb5 100644 --- a/JSX_NOTES.md +++ b/JSX_NOTES.md @@ -14,20 +14,25 @@ hardware against the live production site in April 2026. 2. You **cannot** call that endpoint from outside a loaded `jsx.com` page — Akamai will reject the request with an HTTP/2 protocol error based on the TLS fingerprint of whatever's making the call. -3. You **can** call it from inside a loaded `jsx.com` page, using the - browser's own `fetch()` with the anonymous token the SPA stashes in - `sessionStorage["navitaire.digital.token"]`. Same-origin + browser TLS + - browser cookies means Akamai sees it as a normal user request. -4. Driving the on-page UI to submit the search form is a dead end in - **WKWebView** (but works in Playwright) because of a subtle trusted-event - issue described below. +3. Real Chrome succeeds when you actually drive the full one-way flow: + select `One Way`, fill origin and destination, pick the depart date, + click `DONE`, then click `FIND FLIGHTS`. That fires + `POST /api/nsk/v4/availability/search/simple` and lands on + `/booking/select`. +4. In WKWebView, the safest runtime strategy is layered: drive the same UI + flow first, try the real `FIND FLIGHTS` button, then fall back to the + component's `search()` method, then finally to a direct in-page + `fetch()` if page state still does not materialize. The working pattern is therefore: Navigate browser → jsx.com (real page load) Wait for SPA bootstrap (station buttons exist, token call finishes) - Read token from sessionStorage - POST /api/nsk/v4/availability/search/simple ← from inside the page + Select One Way / route / date + Click DONE + Click FIND FLIGHTS + Wait for booking/select or Angular availability state + Fallback: component.search() or direct in-page POST if needed Parse the response --- @@ -281,70 +286,40 @@ won't surface any error to the DOM. --- -## WKWebView vs Playwright — the trusted-events trap +## Browser validation and WKWebView strategy -This is the single most important finding from this session. +The earlier "WKWebView cannot submit the form" theory was too strong. The +browser probe that only failed `POST /search/simple` had not actually driven +the same successful user flow Chrome uses. -### The symptom +### What is confirmed -In WKWebView, after driving the entire UI (one-way, origin, destination, -day cell, DONE button), the depart-date input visually shows `"Sat, Apr 11"` -and the Find Flights button is visually enabled. Clicking it fires the click -handler (you can prove it with a capture listener), but no POST to -`/availability/search/simple` happens — ever. The only network call that -fires after the click is the token refresh that was already scheduled. +- Real Chrome does succeed when the automation performs the whole flow: + `One Way` -> origin -> destination -> depart date -> `DONE` -> + `FIND FLIGHTS`. +- That path produces a live `POST /api/nsk/v4/availability/search/simple` + with HTTP `200` and advances the page to `https://www.jsx.com/booking/select`. +- The response contains per-flight availability counts that the app can map + back to `XE` flights. -### The cause +### What remains true in WKWebView -WKWebView's synthetic DOM events produced by -`element.dispatchEvent(new MouseEvent('click', {...}))` have -`event.isTrusted === false`. JSX's custom datepicker only commits its -day-cell selection into its Angular `FormControl` on a **trusted** user -gesture. So the synthetic click on a day cell visually highlights the cell, -lets DONE close the picker, and updates the input's display value — but the -underlying FormControl stays `null`. +Synthetic events can still be brittle. A visually-filled form is not enough; +the page may still reject the search if the component's internal state is not +fully committed. Because of that, the iOS fetcher should not rely on exactly +one trigger path. -When Find Flights is then clicked, the handler runs `search()`, which does: +### Current iOS runtime strategy -```ts -search() { - if (this.form.invalid) { - this.form.markAllAsTouched(); - return; - } - this.api.post('/availability/search/simple', this.buildBody()); -} -``` +`Flights/Services/JSXWebViewFetcher.swift` step 17 now does this: -Form is invalid because `departDate` FormControl is `null`, so the method -returns early. No POST. Silent failure. +1. Prime the Angular search component with the target date. +2. Click the real `FIND FLIGHTS` button and wait for availability state. +3. If that does not materialize data, call `component.search()`. +4. If that still fails, issue the direct in-page `fetch()` POST as the last fallback. -### Why Playwright doesn't hit this - -Playwright's `page.click()` and `locator.click()` don't produce synthetic -DOM events — they go through CDP's `Input.dispatchMouseEvent`, which -produces events indistinguishable from real user input, including -`isTrusted === true`. JSX's picker accepts those and commits the date. - -### Why Angular's `markAllAsTouched` workaround doesn't help - -You can walk `__ngContext__` on every element looking for `FormControl` -instances and call `markAllAsTouched()` + `updateValueAndValidity()`. This -does trigger revalidation and reveals all the currently-invalid fields, but -it doesn't populate the empty date control — it just marks it dirty. The -underlying value is still `null` because nothing wrote to it. - -### The WKWebView workaround - -Don't click Find Flights. Instead, call -`/api/nsk/v4/availability/search/simple` directly via `fetch()` from the -page context after reading the token out of `sessionStorage`. You still do -the UI-driving steps (for page warm-up, session establishment, and as a -smoke test that the site is functional), but the actual data fetch happens -via a direct API call whose request shape matches exactly what -`search()` would have posted. - -This is what `Flights/Services/JSXWebViewFetcher.swift` step 17 does. +That keeps the app aligned with the proven Chrome behavior without betting the +entire integration on one fragile DOM event path. --- @@ -357,8 +332,8 @@ JSX fronts `api.jsx.com` with Akamai Bot Manager. Observed behavior: | Plain `curl`, `fetch` from Node, any external HTTP client | Blocked. Almost all endpoints return HTML challenge page or Akamai error. | | Playwright's built-in `chromium.launch()` (both bundled chromium and `channel: "chrome"`) | GET requests succeed, but `POST /availability/search/simple` specifically returns `ERR_HTTP2_PROTOCOL_ERROR`. Playwright injects enough automation bits for Akamai to flag the TLS/H2 fingerprint. | | Real Chrome spawned as a plain process + Playwright attached via `chromium.connectOverCDP()` | **Works reliably.** Chrome has the expected fingerprint and Playwright is only driving it via CDP, not altering it. | -| WKWebView on macOS / iOS | GET requests succeed. Direct `POST /availability/search/simple` from inside a loaded `jsx.com` page via `fetch()` also succeeds. The browser session's cookies and TLS fingerprint are trusted. | -| WKWebView with UI-driven Find Flights click | Fails — but for an unrelated reason (the trusted-events trap above). Angular never fires the POST in the first place, so Akamai never sees it. | +| WKWebView on macOS / iOS | Same-origin traffic from a real loaded `jsx.com` page can work, but the most robust app strategy is still layered because DOM-driven submission can be sensitive to page state and timing. | +| WKWebView with the current app flow | Try real `FIND FLIGHTS` first, then `component.search()`, then direct in-page `fetch()`. This is the runtime path the app now uses. | Observations: @@ -368,25 +343,20 @@ Observations: --- -## Network interceptor pattern +## Network observation -If you want to capture JSX traffic programmatically (e.g. in WKWebView or -Playwright), override `window.fetch` and `XMLHttpRequest` to tee every -request/response to a probe object. Two things to track separately: +For the app runtime, prefer passive observation over wrapping `fetch()` or +`XMLHttpRequest`. The current iOS flow uses a `PerformanceObserver` to record +`api.jsx.com` resource entries without touching the request pipeline. -1. **Initiated calls** — every URL passed to `fetch()` or - `XMLHttpRequest.send()`, recorded *before* awaiting the response. -2. **Completed calls** — every call that returned a response (any status), - plus an error marker on network failure. +That gives enough signal to answer: -This lets you tell apart "Angular's `search()` never fired a POST" (nothing -in initiated calls) from "Angular fired a POST but the network rejected it" -(initiated but not completed, error flag set). This distinction was critical -for diagnosing the WKWebView trusted-events issue — without it, both failure -modes look like "no searchSimple response seen". +1. Did the page attempt `/availability/search/simple` at all? +2. Did the page advance to `/booking/select`? +3. Did Angular availability state appear after the search trigger? See the `window.__jsxProbe` setup in -`Flights/Services/JSXWebViewFetcher.swift` step 4 for a working +`Flights/Services/JSXWebViewFetcher.swift` step 4 for the current implementation. --- diff --git a/api_docs/airlines_request.md b/api_docs/airlines_request.md new file mode 100644 index 0000000..e0ae24d --- /dev/null +++ b/api_docs/airlines_request.md @@ -0,0 +1,1230 @@ +# Airlines API Reverse Engineering — Complete Findings + +Everything I know from reverse-engineering 9 airline mobile apps (Android APKs and one decrypted iOS IPA) for flight loads, standby lists, and flight status data. Last updated 2026-04-11. + +--- + +## TL;DR — Status by airline + +| Airline | Flight status | Loads / standby | Auth | +|---|---|---|---| +| **United Airlines** | yes (curl-able via Playwright) | **yes — full per-cabin loads + standby list** | anonymous token | +| **American Airlines** | yes | **yes — waitlist + seats per class** | none (mobile UA only) | +| **Spirit** | yes (curl direct) | no (ULCC, no standby) | static APIM key | +| **JetBlue** | yes (curl direct) | yes via PNR | API key + check-in session | +| **Korean Air** | yes | partial (`flightSeatCount` returns 0 for far-out dates) | none | +| **Emirates** | yes (curl direct) | staff travel only via PNR | none for status | +| **Delta** | yes (mobile API curl-able with mobile UA) | **no public path** — all gated by PNR or auth | mixed | +| **Alaska** | yes | requires confirmation code | mobile API | +| **Frontier** | not analyzed | — | — | +| **British Airways** | not deeply analyzed | — | — | + +**Bottom line on loads:** United and American expose true seat counts and standby lists with no PNR. Everyone else either requires a PNR, an authenticated session, or doesn't have the data at all. + +--- + +## Architecture overview + +### Three access tiers across all airlines + +1. **Plain HTTP (curl-able):** Spirit, JetBlue, Emirates, Korean Air, Delta `flight-status-mobile/details` +2. **Playwright with mobile User-Agent:** American (`cdn.flyaa.aa.com`), Delta `flight-status/details` (web variant) +3. **Playwright with full browser session + Akamai cookies:** United (`united.com`), Delta `offers/shop` (still gated by auth on top) + +### Anti-bot protection by airline + +| Airline | WAF/CDN | Bot detection | Bypass strategy | +|---|---|---|---| +| United | Akamai | Akamai BMP | Playwright session token from page load | +| American | Akamai | Akamai ACF sensor | Mobile UA `Android/2025.31 Pixel 7|14|...|AmericanAirlines` passes validation | +| Delta | Dynatrace + Akamai BMP | `AkamaiBMP.framework` (confirmed in iOS bundle) | Mobile UA `FlyDelta/24.10.1 (Pixel 7; Android 14; Build/UQ1A.240205.004)` for `mobile-api`; shop endpoints fail without sensor data | +| Spirit | Akamai | CyberFend BMP | Static APIM key works for GET; POST blocked without sensor data | +| JetBlue | Azure APIM | Static API key | Just send `apikey` header | +| Korean Air | minimal | minimal | `channel: app` header | +| Emirates | none on flight-status | — | Just curl | +| Alaska | minimal | minimal | mobile API path `/1/guestservices/customermobile/` | + +--- + +## 1. UNITED AIRLINES — fully working + +**Domain:** `https://www.united.com` +**Auth:** anonymous token (~30 min lifetime) +**Method:** Playwright → navigate to united.com → `page.evaluate(fetch())` + +### Step 1 — get token +``` +GET /api/auth/anonymous-token +``` +Response: +```json +{ "data": { "token": { "hash": "DAAAA...", "expiresAt": "..." } } } +``` + +### Step 2 — flight loads (the prize) +``` +GET /api/flightstatus/upgradeListExtended?flightNumber={NUM}&flightDate={YYYY-MM-DD}&fromAirportCode={ORIGIN} +Headers: + x-authorization-api: bearer {token.hash} + Accept: application/json +``` + +Response (full per-cabin loads + standby + cleared upgrades): +```json +{ + "segment": { + "airlineCode": "UA", + "flightNumber": 2238, + "flightDate": "20260408", + "departureAirportCode": "EWR", + "arrivalAirportCode": "LAX", + "equipmentDescriptionLong": "Boeing 777-200ER", + "departed": false + }, + "pbts": [ + { "cabin": "Front", "capacity": 50, "authorized": 50, "booked": 50, + "held": 0, "reserved": 0, "revenueStandby": 0, "waitList": 0, + "jump": 0, "group": 0, "ps": 1, "sa": 5 }, + { "cabin": "Middle", "capacity": 24, "booked": 16, ... }, + { "cabin": "Rear", "capacity": 202, "booked": 164, "revenueStandby": 2, "sa": 4 } + ], + "checkInSummaries": [ + { "cabin": "Front", "capacity": 50, "total": 50, + "etktPassengersCheckedIn": 50, "revStandbyCheckedInWithoutSeats": 0, + "nonRevStandbyCheckedInWithoutSeats": 0, "children": 0, "infants": 0, "bags": 0 } + ], + "front": { + "cleared": [ + { "currentCabin": "Front", "bookedCabin": "Rear", + "firstName": "T", "lastName": "JEN", "passengerName": "T/JEN", + "seatNumber": "1G", "clearanceType": "Upgrade", "skipped": false } + ], + "standby": [] + } +} +``` + +### Field reference +| Field | Meaning | +|---|---| +| `pbts[].cabin` | "Front" (Polaris/First), "Middle" (Premium Plus), "Rear" (Economy) | +| `pbts[].capacity` | Total cabin seats | +| `pbts[].booked` | Sold/assigned | +| `pbts[].revenueStandby` | Revenue standby pax | +| `pbts[].sa` | Space available (non-rev standby) | +| `pbts[].ps` | Positive space | +| `pbts[].waitList` | Waitlisted | +| `front.cleared[]` | Cleared upgrades with name + seat | +| `front.standby[]` | Standby list ordered | + +Derived: `availableSeats = capacity - booked`, `loadFactor = booked / capacity`. + +### Other working United endpoints +- `GET /api/flightstatus/status/{NUM}/{DATE}/{ORIGIN}/{DEST}?carrierCode=UA&useLegDestDate=true` — gates, times, delays, aircraft type, tail +- `GET /api/flightstatus/seatmap/{NUM}/{DATE}/{ORIGIN}/{DEST}?carrierCode=UA` — interactive seat map +- `POST /api/flight/FetchSSENestedFlights` — full flight search (SSE stream) returning 40 itineraries with pricing per cabin and booking class codes (RBDs). Booking class only available = nearly full. +- `POST /api/FlexPricer/CalendarPricing` — low-fare calendar across dates + +### Mobile API (legacy, less reliable) +Base URLs (loaded from runtime URL catalog): +- Production: `https://smartphone.united.com/UnitedMobileDataServices/api` +- Preview: `https://smartphone-preview.united.com/UnitedMobileDataServices/api` + +Endpoints (all require MileagePlus session): +- `POST /Shopping/Shop` — main flight search +- `POST /SeatEngine/PreviewSeatMap` — seat map with availability +- `GET /StandByList/GetStandbyList` — standby list (load data) +- `GET /UpgradeList/GetUpgradeList` — upgrade waitlist +- `POST /Shopping/GetONTimePerformence` — on-time performance +- `POST /EmployeeReservation/GetFlightAvailability` — employee flight availability + +Note: smartphone.united.com times out from non-mobile networks. Web API via Playwright is the working path. + +### Quirks +- Token expires in ~30 min — cache and refresh +- Token bound to browser session, not portable to curl (TLS fingerprinting) +- `x-authorization-api: bearer ...` not `Authorization` +- Token starts with `DAAAA...` + +--- + +## 2. AMERICAN AIRLINES — fully working + +**Domain:** `https://cdn.flyaa.aa.com` +**Auth:** none (mobile UA only) +**Method:** Playwright with mobile UA headers → navigate → `page.evaluate(fetch())` + +### Required headers (set on context) +``` +User-Agent: Android/2025.31 Pixel 7|14|1080|2400|1.0|AmericanAirlines +x-clientid: MOBILE +Accept: application/json +Content-Type: application/json +Device-ID: {any-uuid} +``` + +**Critical:** the User-Agent format is `Android/{version} {device}|{osVersion}|{width}|{height}|1.0|AmericanAirlines`. Without this exact format, Akamai returns `{"error":["Invalid user-agent header"]}`. + +### Step 1 — search flights by route +``` +GET /apiv2/mobile-flifo/flightSchedules/v1.0 + ?origin={ORIGIN} + &destination={DEST} + &departureDay={DAY} + &departureMonth={MONTH} + &searchType=schedule + &noOfFlightsToDisplay=20 +``` +Returns flight list with flight numbers, times, carrier info, `showUpgradeStandbyList`, `allowFSN`. + +### Step 2 — waitlist + available seats (the prize) +``` +GET /api/mobile/loyalty/waitlist/v1.2 + ?carrierCode=AA + &flightNumber={NUM} + &departureDate={YYYY-MM-DD} + &originAirportCode={ORIGIN} + &destinationAirportCode={DEST} +Headers: + x-referrer: fs +``` +Response: +```json +{ + "relevantList": "First", + "waitList": [ + { + "listName": "First", + "seatsAvailableLabel": "Available seats", + "seatsAvailableValue": 1, + "seatsAvailableSemanticColor": "failure", + "passengers": [ + { "order": 1, "displayName": "BRI, K", "cleared": false, "seat": null }, + { "order": 2, "displayName": "MAT, R", "cleared": false } + ] + }, + { + "listName": "Standby", + "seatsAvailableValue": 45, + "seatsAvailableSemanticColor": "success", + "passengers": [...] + } + ] +} +``` + +### Field reference +| Field | Meaning | +|---|---| +| `waitList[].listName` | "First", "Standby", etc. | +| `waitList[].seatsAvailableValue` | Open seats for that class | +| `waitList[].seatsAvailableSemanticColor` | "success" (many), "warning" (few), "failure" (≤1) | +| `passengers[].displayName` | "LAST, F" | +| `passengers[].order` | 1-based position | +| `passengers[].cleared` | true if cleared | +| `passengers[].seat` | Seat if cleared | + +### Other AA endpoints (all require mobile UA) +| Method | Path | Description | +|---|---|---| +| POST | `/apiv2/mobile-booking/search/itinerary/v2.0` | Flight search itinerary | +| POST | `/apiv2/mobile-booking/search/summary/v2.0` | Flight search summary | +| POST | `/apiv2/mobile-booking/search/weekly/v2.0` | Weekly fare calendar | +| GET | `/api/mobile-fly/flybff/flightstatus` | Flight status | +| GET | `/apiv2/mobile-flifo/flightstatus/v1.0` | Flight status (FLIFO) | +| GET | `/api/mobilemanage/manage_v1/seatInventory` | Seat inventory | +| POST | `/apiv2/mobile-ancillary-bff/seats/availability/v1.0` | Seat availability | +| GET | `/apiv2/mobile-manage/seatsLayout/v1.0/aircraftConfig` | Aircraft seat layouts | + +### Auth-gated endpoints +- OAuth2 via `login.aa.com/loyalty/as/token.oauth2` +- Booking endpoints require `x-acf-sensor-data` (Akamai bot protection sensor) — 403 without it +- 90s connect timeout, 180s read timeout + +### Other base URLs (env-specific) +| Env | URL | +|---|---| +| Production | `https://cdn.flyaa.aa.com` | +| QA | `https://cdn.kqa1.flyaa.aa.com` | +| Stage | `https://cdn.kiqa.flyaa.aa.com` | +| SSO | `https://login.aa.com` | + +### Quirks +- The `/api/mobile/loyalty/waitlist/v1.2` endpoint is the waitlist data — note `loyalty` in the path +- Add `x-referrer: fs` header on the waitlist call (fs = flight status) +- Direct curl gets blocked by TLS fingerprinting; must use Playwright +- The Android APK confirmed the User-Agent format passes Akamai's validation + +--- + +## 3. SPIRIT AIRLINES — partial (status only) + +**Domain:** `https://api.spirit.com` +**Auth:** Static APIM key (decrypted from native lib) +**Method:** Plain curl/HTTP — no browser needed + +### Production base URLs +| Env | URL | +|---|---| +| Production | `https://api.spirit.com/customermobileprod/2.8.0/` | +| Stage | `https://api.spirit.com/stage-customermobileapi/` | +| UAT | `https://apiqa.spirit.com/qa01-customermobileapi/` | +| CMS | `https://content.spirit.com/api/content/` | + +### Required header +``` +Ocp-Apim-Subscription-Key: c6567af50d544dfbb3bc5dd99c6bb177 +``` + +### Working endpoints + +#### Flight status (no token) +``` +POST /v3/GetFlightInfoBI +Content-Type: application/json +Ocp-Apim-Subscription-Key: c6567af50d544dfbb3bc5dd99c6bb177 +Platform: Android + +{ + "departureStation": "FLL", + "arrivalStation": "ATL", + "departureDate": "2026-04-08" +} +``` +Response includes: flight number, gates, terminals, status, times, scheduled vs actual. + +#### Stations / route network (no token) +``` +GET /v1/stations +Ocp-Apim-Subscription-Key: c6567af50d544dfbb3bc5dd99c6bb177 +``` +Returns all Spirit stations with coordinates, markets, route connections. + +#### Dynamic content (no token) +``` +GET /v1/getdynamiccontent +Ocp-Apim-Subscription-Key: c6567af50d544dfbb3bc5dd99c6bb177 +``` + +#### Anonymous token (needs Akamai bypass) +``` +POST /v2/Token +Ocp-Apim-Subscription-Key: c6567af50d544dfbb3bc5dd99c6bb177 +{} +``` +Returns JWT token (~15 min lifetime). Required for most authenticated endpoints. **Blocked by Akamai BMP from curl/Playwright** — needs CyberFend sensor data. + +### Auth-gated endpoints (need JWT + Akamai bypass) +| Method | Path | Description | +|---|---|---| +| POST | `/v5/Flight/Search` | Flight search with fares by cabin | +| POST | `/v1/booking/seatmap` | Seat map | +| GET | `/v3/booking/seatmaps/journey/{journeyKey}` | Journey seat map | +| POST | `/v1/calendar/availabledates` | Available dates calendar | +| POST | `/v1/booking/flightdetails` | Flight details | +| GET | `/v3/bundle/ssrs` | Bundle availability | +| GET | `/v1/bundle/UpsellAvailability` | Upsell availability | +| POST | `/v3/mytrips` | My trips | +| GET | `/v1/OnD/Countries` | Countries (only needs APIM key) | + +### Decrypted APIM keys +| Environment | Encrypted | Decrypted | +|---|---|---| +| Production | `bD+Vg9tjmK4h19uwfGdl...` | **`c6567af50d544dfbb3bc5dd99c6bb177`** | +| Dev/UAT | `G123dLr8BDvwfr8fkHds...` | `81ffe172c5c741cdac0a2cc13ab19b54` | +| Stage | `Jh7I2ohTGkMoaQ9VDcu8...` | `daa76fa3c25d423f880b939d56992553` | + +### Encryption details +- Algorithm: AES/CBC/PKCS5Padding +- Key derivation: SHA-512("1983Miramar"), first 16 bytes +- IV: `Aw@#EDfTGec3Rtd!` +- Native library: `libspirit-lib.so` + +### Notes +- Spirit is a ULCC — no standby lists or upgrade waitlists exist in the system +- Seat-level data is in the seat map, but seat map needs auth + Akamai bypass +- POST endpoints blocked by Akamai BMP from curl/Playwright (needs CyberFend sensor data from real device) +- A real Android device or Frida on a rooted device can bypass CyberFend + +--- + +## 4. JETBLUE — partial (status works, loads need PNR) + +**API domain:** `https://az-api.jetblue.com` +**Check-in domain:** `https://mobilecheckin.jetblue.com/checkin/` +**Auth:** API key (no login) +**Method:** Plain curl/HTTP + +### Static API keys (extracted) +- Main: **`49fc015f1ba44abf892d2b8961612378`** +- Seat map / logging: `a5ee654e981b4577a58264fed9b1669c` + +### Step 1 — flight status by number (curl works) +``` +GET https://az-api.jetblue.com/flight-status/get-by-number?number={NUM}&date={YYYY-MM-DD} +Headers: + apikey: 49fc015f1ba44abf892d2b8961612378 + Accept: application/json +``` +Response: +```json +{ + "flights": [{ + "tripOrigin": "LAX", "tripDestination": "JFK", + "isConnecting": false, "isThroughFlight": false, + "legs": [{ + "flightNo": "524", + "flightStatus": "IN FLIGHT", + "flightStatusGroup": "standardPostDeparture", + "originAirport": "LAX", "originGate": "16", "originTerminal": "1", + "actualDeparture": "...", "scheduledDeparture": "...", + "doorCloseTime": "...", "boardingTime": "...", + "destinationAirport": "JFK", "destinationGate": "518", "destinationTerminal": "5", + "actualArrival": "...", "scheduledArrival": "...", + "baggageClaim": "4", "equipmentType": "3NL", "tailNumber": "4074" + }] + }] +} +``` + +### Step 2 — priority list / loads (REQUIRES PNR) +``` +Flow: + POST registerClient → returns session cookie + POST identifyPNR (with confirmation) → validates PNR + name + POST retrievePriorityList → returns full load + standby data +``` + +`RetrievePriorityListResponse`: +```json +{ + "numberOfCapacityJ": 16, + "numberOfCapacityY": 144, + "numberOfAvailableSeatsJ": 3, + "numberOfAvailableSeatsY": 22, + "numberOfConfirmedPassengersJ": 13, + "numberOfConfirmedPassengersY": 120, + "numberOfAuthorizedSeatsJ": 16, + "numberOfAuthorizedSeatsY": 144, + "numberOfAuthorizedSeatsTotal": 160, + "numberOfConfirmedPassengersTotal": 133, + "numberOfStandbyPassengers": 4, + "numberOfWaitListedPassengers": 2, + "priorityListPassengers": [ + { "shortLastName": "DOE", "shortFirstName": "J", "code": "SA", "order": 1, "hasSeat": false }, + { "shortLastName": "SMI", "shortFirstName": "A", "code": "SA", "order": 2, "hasSeat": false } + ], + "flight": { ... } +} +``` + +This is JetBlue's equivalent of United's `upgradeListExtended` — full capacity/booked/available per cabin (J = Mint, Y = Core), plus the standby passenger list. + +### Step 3 — seat map +``` +POST https://az-api.jetblue.com/mobile_seatmap +Headers: + Ocp-Apim-Subscription-Key: a5ee654e981b4577a58264fed9b1669c + Content-Type: application/json +``` + +### Notes +- `registerClient` works with just an airport code; the gate is `identifyPNR` which validates PNR +- API keys captured from web traffic via Playwright +- No Akamai involvement on the API endpoints — this is Azure APIM with key-based auth + +--- + +## 5. KOREAN AIR — partial + +**Domain:** `https://www.koreanair.com` +**Auth:** none for flight status +**Method:** Playwright → navigate → `page.evaluate(fetch())` + +### Step 1 — flight search (by number or route) +``` +POST /api/fs/scheduleFlightSearch/flight/status/app +Content-Type: application/json +Accept: application/json +channel: app + +# By flight number +{ + "departureDate": "20260408", + "departureLocationCode": "", + "arrivalLocationCode": "", + "flightNumber": "017", + "searchOption": "FLTNUM" +} + +# By route +{ + "departureDate": "20260408", + "departureLocationCode": "ICN", + "arrivalLocationCode": "LAX", + "flightNumber": "", + "searchOption": "ROUTE" +} +``` +Response: flight detail list with departure/arrival times, status, cabin classes available. + +### Step 2 — seat count (often returns 0) +``` +POST /api/et/ibeSupport/flightSeatCount +Content-Type: application/json +channel: pc + +{ + "carrierCode": "KE", + "flightNumber": "017", + "departureAirport": "ICN", + "arrivalAirport": "LAX", + "departureDate": "20260409" +} +``` +Response: `{ "seatCount": 0, "carrierCode": "KE", "flightNumber": "017" }` + +`seatCount` is the number of available seats. **Returns 0 for far-out dates** — works best within 24-48 hours of departure. May need to call `removeGarbageSession` first to establish IBE session. + +### Step 3 — full availability +``` +POST /api/fs/scheduleFlightSearch/sdcAirMultiAvailability +Content-Type: application/json +channel: pc + +{ + "departureDate": "20260409", + "departureLocationCode": "ICN", + "arrivalLocationCode": "LAX", + "flightNumber": "001", + "searchOption": "FLTNUM" +} +``` + +### Notes +- `channel` header required: `app` for flight search, `pc` for seat count +- `flightSeatCount` is real but only useful close to departure +- Try with `departureDate` as int to test date-too-far behavior + +--- + +## 6. EMIRATES — flight status only + +**Domain:** `https://www.emirates.com` +**Mobile API:** `https://mobileapp.emirates.com/` +**Auth:** none for flight status +**Method:** Plain curl + +### Flight status (curl works) +``` +GET https://www.emirates.com/service/flight-status?departureDate={YYYY-MM-DD}&flight={NUM} +``` +Response: +```json +{ + "results": [{ + "airlineDesignator": "EK", + "flightNumber": "0221", + "flightId": "2026040700221DXB", + "flightDate": "2026-04-07", + "flightRoute": [{ + "legNumber": "1", + "originActualAirportCode": "DXB", + "destinationActualAirportCode": "DFW", + "statusCode": "ARVD", + "flightPosition": 100, + "totalTravelDuration": "17:30", + "departureTime": { "schedule": "...", "estimated": "...", "actual": "..." }, + "arrivalTime": { "schedule": "...", "estimated": "...", "actual": "..." }, + "departureTerminal": "Terminal 3", + "arrivalTerminal": "Terminal D" + }] + }] +} +``` + +### Staff travel / flight load (requires PNR) +``` +GET https://mobileapp.emirates.com/olci/v1/checkin/staffinformation/{PNR}/{LASTNAME} +``` +Returns `FlightLoadResponse`: +- `isStaffSubLoadTableAvl` — whether subload table is available +- `staffPax.passengers[]` — staff passenger list with check-in status +- `flights[]` — per-flight load data +- Per passenger: `currentPriority`, `totalPriority`, `status`, `flightNumber` + +### Notes +- Flight status is the simplest of all airlines — pure curl, zero auth, zero headers +- Staff standby/flight load data is for staff travel only and requires PNR + last name +- Internal backend leaked in response: `business-services-cache-bex-prod.dub.prd01.digitalattract.aws.emirates.prd` +- Mobile app has full staff travel system: standby priority tracking, class downgrade acceptance, subload questionnaires + +--- + +## 7. DELTA — extensive deep dive (this session) + +**Status:** flight status works without PNR. **Loads do NOT have a public path** — every endpoint that returns seat/standby data requires either a SkyMiles login or a valid PNR + name on the flight. + +### Working endpoint — flight-status-mobile/details (no PNR, no auth) + +``` +POST https://mobile-api.delta.com/flight-status-mobile/details +Content-Type: application/json +Accept: application/json +User-Agent: FlyDelta/24.10.1 (Pixel 7; Android 14; Build/UQ1A.240205.004) + +{ + "airlineCode": "DL", + "flightNumber": "996", + "flightOriginDate": "2026-04-12" +} +``` + +**3 fields. That's the entire body.** The APK class `m3/a.java` (FlightStatusAirlineRequest) defines this. Domain `aws_mobile_public` (no auth interceptor). Endpoint is on the network whitelist `u3/d.java`. + +**Critical:** The User-Agent must look like the Delta mobile app. Without it: 444 from Akamai. With it: 200 OK with full response. + +Returns (~26KB JSON): +- Flight number, ship number (tail), aircraft code/name (e.g. "Airbus A321neo"), industry code +- Departure: gate, terminal, scheduled/estimated/actual times (local + GMT), ICAO code, station coords +- Arrival: same fields +- Performance stats (`a15InTimeStatPct`, `a30DelayedStatPct`, `cancellationStatPct`) +- Inbound flight info (the flight bringing the aircraft in) +- `productsByBrands[]` — for each cabin (BE/MAIN/DCP/FIRST), the amenities (Wi-Fi, USB, Studio, etc.) and meals + +**What it does NOT include:** `seatsRemaining`, `standbyPriorityInfo`, `upgradeStandbyModel`, any seat counts. Verified by reading the entire response and the `DatedOperatingLeg.java` model which has zero seat fields. + +### Working endpoint — flight-status/schedules (route lookup, no PNR) + +``` +POST https://flightinformation-api.delta.com/flight-status/schedules +Content-Type: application/json +Accept: application/json +User-Agent: FlyDelta/24.10.1 (Pixel 7; Android 14; Build/UQ1A.240205.004) + +{ + "flightSegments": [{ + "flightOriginDate": "2026-04-12", + "originAirportCode": "ATL", + "destinationAirportCode": "LAX", + "airlineCode": "DL" + }], + "filterOptions": { + "schedule": { + "directOnlyIndicator": false, + "includeElapsedOrAccumulatedTime": true, + "flightStops": [], + "departureTimeRanges": [], + "excludeOtherAirlineInd": true, + "connections": [{ "connectionPointNum": "", "connectionCity": "", "minConnectionTime": "" }], + "startRecord": 1, + "endRecord": 30 + }, + "availability": { "indicator": false, "seatTypeCode": "A", "onlyRevenueClassInd": false } + } +} +``` + +Returns trip list for the route: every flight number, aircraft code, scheduled vs estimated times, status. Confirmed 10 nonstop ATL→LAX trips for a future date. **No seat counts even with `availability.indicator: true`.** + +### Working endpoint — gate/boarding-status (no PNR) +``` +GET https://mobile-api.delta.com/gate/boarding/boarding-status/{FLIGHT}/{DATE}/{ORIGIN}/{DEST} +Accept: application/json +User-Agent: FlyDelta/24.10.1 (Pixel 7; Android 14; Build/UQ1A.240205.004) +``` +Returns boarding zones (visual UI data: name, displayName, gradients, isBoarding). No load data. Returns `{"pollInterval":0}` when flight isn't in boarding window. + +### Endpoints that return seat data BUT require auth or PNR + +#### `mytrips/getUpgradeAndStandby` (Zulu, JSON) — requires PNR +``` +POST https://mobile-api.delta.com/mytrips/getUpgradeAndStandby + +{ + "arrivalCity": "LAX", + "departCity": "ATL", + "departDate": "20260409", + "firstName": "JOHN", + "flightNumber": "996", + "lastName": "DOE", + "recordLocator": "ABC123" +} +``` +Returns `ASLResponse` with `seatsRemaining`, `totalWaitList`, `passengerStatus`, `standbyPassengers`, `upgradePassengers`, `upgradeSeatRemaining` (per cabin). **All fields required** — `{"errorMessage":"Required fields are missing."}` if any are blank. + +#### `getUpgradeAndStandby` (legacy XML) — requires PNR +``` +POST https://api.delta.com/api/mobile/getUpgradeAndStandby +Content-Type: application/xml +``` +Same data, XML wrapping with `RequestInfo` element. Domain `v2`. + +#### `trips/today` / `mytrips/today` — requires PNR +- `trips/today` (legacy XML) on `v3` domain (`api.delta.com/shim2`) +- `mytrips/today` (Zulu JSON) on `aws_mobile_private` +- Body: `TodayTripsRequest` containing `TodayTrip[]` with `confirmationNumber`, `firstName`, `lastName`, `pnrHash` +- Header: `standbySupported: true` +- Returns `MultiTripsResponse` containing `Leg[]`, each leg has `standbyPriorityInfo` of type `UpgradeStandbyModel`: + ```json + { + "seatsRemaining": "12", + "totalWaitList": "5", + "currentPosition": null, + "upgradeSeatRemaining": [ + { "classOfService": "F", "seatsRemaining": 2, "totalWaitList": 3 } + ], + "hasFourCabinConfigurationFlag": true, + "brandIdList": ["FIRST", "DCP", "MAIN", "BE"] + } + ``` +- Returns 500 "Could not process today trips request" with fake PNR + +#### `offers/shop` (booking shop) — requires SkyMiles auth +``` +POST https://mobile-api.delta.com/offers/shop +``` +Body is `ShopRequest`: +```json +{ + "segments": [{ "departureDate": "...", "origin": "ATL", "destination": "LAX", "connectionAirport": null }], + "constraints": [], + "version": "2", + "tripType": "OW", + "passenger": { "adultCount": "1" }, + "passengers": [...], + "priceType": "Revenue", + "sortBy": "customScore", + "requestType": "NATIVE_SHOP" +} +``` +Returns `FlightSearchShopResultsResponse` containing `ShoppingItinerary[]` → `ShoppingFare[]` with per-fare `seatsAvailableCount` (alt name `seatsRemaining`), `seatsRemainingLabel`, `isSoldOut`, `notOffered`, `availableForSale`, `solutionId`. **MockShopV2Response.json in iOS bundle confirms response shape.** + +Domain `aws_mobile_private` — needs SkyMiles auth interceptor. From curl: 444 from Akamai BMP. + +#### `mwsb/service/shop` — alternate shop endpoint, requires auth +``` +POST https://api.delta.com/mwsb/service/shop +Content-Type: application/json +X-Adapter: mobile +X-APP-ROUTE: SL-RSB +X-OFFER-ROUTE: SL-SHOP +``` +Same `ShopRequest` body, same response shape. Domain `shopbook`. From curl: 444 from Akamai (different host, same problem). + +Other variants: +- `/service/shop` → 403 "Missing Authentication Token" +- `/offers/shop2` → 401 "Unauthorized" + +#### `mbl-flightchange/v1/offers` — flight change shop, requires PNR +- Domain: aws_mobile_private +- Returns ShoppingFare[] with seat counts +- For users changing an existing booking — requires recordLocatorId + +#### `seatmap/lsm` — Logical Seat Map +- On the network whitelist (no-auth path), but the variants `proxy/seatmap/lsm` and `seatmap/lsm` both need session context +- Returns `SeatMapResponseModel` with cabin layouts and seat availability +- Body `SeatMapRequestPayload` requires `flightList[]`, `numberOfPassengers`, `recordLocator` (or cart context) + +### Network whitelist (`u3/d.java` — endpoints that bypass auth checks) +``` +/user/login +/mobile/login +/service/shop +/offers/shop +offers/shop2 +flight-status-mobile/schedule +flight-status-mobile/details ← confirmed working +/mobile/getFlightStatus +/mobile/getFlightStatusByLeg +mwsb/service/itinerarySearch +/pf-ws/authn/flows/ +usernameUniqueness +referenceVerification +enrollment +/payment/eDocuments/search +seatmap/lsm +``` +Excluded: `/user/loginAndGetDashBrdData` + +### Complete domain inventory (Android + iOS combined) + +| Domain identifier | URL | Used for | Auth | +|---|---|---|---| +| `aws_mobile_public` | `mobile-api.delta.com` | flight status, gate, supportedVersion, checkin/getCompUpgrade, boarding, travelinfo/inspShopOffers | none | +| `aws_mobile_private` | `mobile-api.delta.com` | offers/shop, mytrips/*, seatmap/*, checkout/*, mbl-flightchange/* | SkyMiles | +| `aws_mobile_login` | `mobile-api.delta.com` | login flows | OAuth | +| `v2` | `api.delta.com/api/mobile` | legacy XML: getFlightStatus, getUpgradeAndStandby, getFlightStatusByLeg, getUpgradeEligibilityInfo, /shop, getPNR | mixed | +| `v3` | `api.delta.com/shim2` | trips/today (legacy XML) | PNR | +| `v4` | `api.delta.com` | CDP automation, feature toggles | none | +| `shopbook` | `api.delta.com/mwsb/service` | mwsb shop, itinerarySearch | auth | +| `acl` | `api.delta.com/mwsb/service` | ACL/IROP | auth | +| `aws_payment` | `enterprisepayments-api.delta.com` | payment | auth | +| `aws_performance_stats` | `flightperfstats-api.delta.com` | flight perf stats (`/flightPerformance/v1/statistics`) | none | +| `aws_travel_policy` | `salespartnersaffiliation-api.delta.com` | corp travel policy | auth | +| `aws_travel_policy_aem` | `mobilecontent.delta.com` | AEM content | none | +| `loyaltyApi` | `loyalty-api.delta.com` | `loyaltyActivity/v2/accountActivity/dashboard` | auth | +| `loyaltyApi2` | `loyalty2-api.delta.com` | `loyaltyProgram/v2/statusTracker/medallionStatus`, `futureActivities`, choice benefits | auth | +| `catalog_api` | `catalog-api-prd.delta.com/prd` | content catalog | none | +| `content` | `content-api.delta.com` | content | none | +| `profile` | `customer-api.delta.com` | profile, save companion, addresses, preferences, GraphQL | auth | +| `assist` (Android) | `concierge-api.delta.com` | GraphQL chatbot, `endpoint=graphql` | auth | +| `assist_realtime` | `wss://concierge-api.delta.com/graphql/realtime` | WebSocket chat | auth | +| **`conversation_agent`** (iOS only) | `conversationalagent-api.delta.com` | newer GraphQL chatbot | auth | +| `conversation_agent_realtime` (iOS only) | `wss://conversationalagent-api.delta.com/graphql/realtime` | WebSocket chat | auth | +| **`choiceBenefitContent`** (iOS only) | `wcmdotcom-api.delta.com` | CMS choice benefits | none | +| `purchase_calculator` | `purchasecalculator-api.delta.com` | trip total | auth | +| `skyclub_tracker` | `loungeamexvisitreport-api.delta.com` | sky club visits | auth | +| `inflight_wifi` | `wifi.delta.com/api` | wifi-only | n/a | +| `aws_error_mapping` | `mobilecontent-dev.delta.com` | error message lookups | none | +| `encrypt_decrypt` | `encryptdecrypt-api.delta.com` | crypto helper | auth | +| `web_server` | `www.delta.com` | website | n/a | +| `cdn` | `www.delta.com/` | CDN | n/a | +| `signin` | `signin.delta.com` | OAuth login | n/a | +| `firebase_url` | `flydelta-mobile.firebaseio.com` | Firebase | n/a | +| `wrapped_deeplink_o` (iOS) | `click.o.delta.com` | deeplinks | n/a | +| `wrapped_deeplink_t` (iOS) | `click.t.delta.com` | deeplinks | n/a | +| **(website only)** `flightinformation-api.delta.com` | — | `flight-status/details`, `flight-status/schedules` | session cookie | +| (website only) `dcomaircraft-api.delta.com` | — | `/flightinformation/fleet` | none | +| (website only) `amenitiesmeals-api.delta.com` | — | `/flight-status/amenities-meals` | none | +| (website only) `predictive-api.delta.com` | — | `/getPredictiveCities/{code}` | none | +| (website only) `rcmd-api.delta.com` | — | `/register` (recommendations) | n/a | + +### Every API model with `seatsRemaining` or `totalWaitList` + +| Model | Source | Auth | Direct API model? | +|---|---|---|---| +| `ASLResponse.java` | `mytrips/getUpgradeAndStandby` (Zulu) or `getUpgradeAndStandby` (legacy XML) | PNR | yes | +| `UpgradeStandbyModel.java` | embedded as `Leg.standbyPriorityInfo` in `MultiTripsResponse` from `trips/today` | PNR | yes | +| `ShoppingFare.java` | `offers/shop`, `mwsb/service/shop`, `mbl-flightchange/v1/offers` | auth | yes | +| `FareDetailModel.java` | constructed by `FlightChangeFlightDetailsBuilder` from `NativeSearchResultsResponse` + `ShoppingFare` | auth | no — derived | +| `ASLStandby.java` | internal Parcelable, built from `ASLResponse` | PNR | no — internal | +| `ClassOfService.java` | `com.delta.mobile.services.bean.itineraries`, set programmatically (no `@Expose` on field) | PNR | no — not from wire | +| `UpgradeSeatRemaining.java` (×2 — todaymode + asl) | nested in ASLResponse / UpgradeStandbyModel | PNR | nested | +| `CabinAvailability.java` | `getUpgradeEligibilityInfo` | PNR | yes — but Y/N flags only, not counts | + +### iOS-specific findings + +iOS app: `com.delta.iphone.ver1_7.9.1_und3fined.ipa` (decrypted via und3fined). Bundle: `Payload/FlyDelta.app/`. + +Frameworks of interest: +- `FlyDeltaComms.framework` — networking layer +- `Today.framework` / `TodayMode.framework` — Today Mode (where standby data lives) +- `ShopBook.framework` — booking +- `SeatMap.framework` — seat map +- `Concierge.framework` — chatbot +- **`AkamaiBMP.framework`** — confirms Delta uses Akamai BMP with sensor data generation +- `SharedModels.framework` — shared data models with own `environments.json` + +iOS-only domain identifiers (added since the Android version was built): +- `conversation_agent` (`conversationalagent-api.delta.com`) — replaces `assist`/`concierge-api` +- `conversation_agent_realtime` — WebSocket +- `choiceBenefitContent` (`wcmdotcom-api.delta.com`) +- `wrapped_deeplink_o` / `wrapped_deeplink_t` + +iOS-specific test data files (sample API responses bundled in the app): +- `Frameworks/Today.framework/new_airport_mode.json` — sample `mytrips/today` response with `standbyPriorityInfo: { seatsRemaining: null, currentPosition: null, totalWaitList: null }` per Leg +- `Frameworks/ShopBook.framework/MockShopV2Response.json` — sample shop response with `seatsAvailableCount: 1` per fare +- `getPnrResponse_OneWay_WithInfant.json` — sample PNR response +- `seatmapbffMultipleCabins.json` / `seatmapbffUpperdeck.json` — sample seat map responses +- `check_in_success_response.json` — sample check-in response + +iOS-specific Objective-C properties: +- `coachClassSeatsAvailable` (NSString) and `firstClassSeatsAvailable` (NSString) — these match Android's `CabinAvailability.comfortClassAvailableFlag` (W) / `firstClassAvailableFlag` (F). They're Y/N flags, not counts. Sourced from `getUpgradeEligibilityInfo` (PNR-bound). +- `getFlightStatusByFlightNumber:` — Objective-C method. Calls the same legacy V2 `getFlightStatus`/`getFlightStatusByLeg` endpoints. No new wire path. +- `UpgradeStandbyListRequest` (Swift class in `_TtC8FlyDelta25UpgradeStandbyListRequest`) — same as Android's standby flow. + +### Decompilation root +``` +/Users/m4mini/Desktop/code/airlines/extracted/delta/jadx_out/sources/ (Android) +/Users/m4mini/Desktop/code/airlines/extracted/delta_ios/Payload/FlyDelta.app/ (iOS) +``` + +### Bottom line on Delta +- **`mobile-api.delta.com/flight-status-mobile/details`** is the only public-without-auth endpoint that returns rich flight data, but it has zero seat counts +- All paths to `seatsRemaining` / `totalWaitList` / `seatsAvailableCount` go through either: + - PNR-bound endpoints (`getUpgradeAndStandby`, `trips/today`, `mytrips/today`) + - Auth-bound shop endpoints (`offers/shop`, `mwsb/service/shop`) +- The Akamai BMP framework (in iOS bundle) is the gate that blocks our scripted shop calls +- Possible angles not yet pursued: extract sensor-data generation from `AkamaiBMP.framework` and reproduce in script (multi-day RE effort); search for an anonymous SkyMiles guest token endpoint (not found by name) + +--- + +## 8. ALASKA AIRLINES — partial + +**Domain:** `https://www.alaskaair.com` +**Mobile API:** `/1/guestservices/customermobile/` +**Auth:** confirmation code required for load data +**Method:** Playwright (website uses shadow DOM) or curl on mobile API paths + +### Step 1 — flight status +``` +GET /1/guestservices/customermobile/flights/status/{AIRLINE}/{NUM}/{YYYY-MM-DD} +``` +Example: `/1/guestservices/customermobile/flights/status/AS/1084/2026-04-08` + +### Step 2 — flight status v2 (by route) +``` +POST /1/guestservices/customermobile/mobileservices/reservation/flights/status + +{ + "airlineCode": "AS", + "flightNumber": "1084", + "departureDate": "2026-04-08", + "departureCityCode": "SEA", + "arrivalCityCode": "LAX" +} +``` +Response includes `showPriorityList` boolean indicating if standby list is available for that flight. + +### Step 3 — seat availability (REQUIRES confirmation code) +``` +POST /1/guestservices/customermobile/seats/SeatUpgradesByCabinRec/{CONFIRMATION_CODE} + +{ + "adobeMarketingCloudVisitorID": "{visitor_id}" +} +``` +Response: +```json +[ + { + "flightNumber": 1084, + "origin": "SEA", + "destination": "LAX", + "cabinType": "First", + "remainingSeats": 4, + "upgradePrice": 149.00, + "equipment": "Boeing 737-900ER" + } +] +``` + +### Step 4 — full FlightLoad (requires runtime APIM key) +``` +POST /seats/waitlist +``` +Returns `FlightLoad` with `authorized`, `available`, `booked`, `checkedIn` per cabin + standby/upgrade lists. The `confirmationCode` field is nullable in the request model, but the APIM key is loaded from Firebase Remote Config at runtime — not statically present in the APK. + +### Notes +- Uses Ktor HTTP client (modern Kotlin) +- Mobile API paths start with `/1/guestservices/customermobile/` +- Website uses deep shadow DOM — Playwright automation is complex +- To get the Firebase APIM key: install app on device, capture from traffic +- Alternative: `GET /viewseatmap/seatmap` to count open seats from the map + +### `remote_config_defaults.xml` (extracted from APK) +Notable feature flags (defaults — overridden by Firebase Remote Config): +```xml +min_version_code0 +show_save_to_google_paytrue +preorder_food_polling_start_days-14 +seatmap_advisory_enabledfalse +show_health_agreementtrue +health_agreement_infohttps://m.alaskaair.com/healthagreement +is_card_on_file_enabledfalse +is_new_home_page_enabledtrue +is_pay_at_airport_boarding_pass_enabledfalse +is_skip_security_line_enabledfalse +is_bag_tracking_enabledfalse +major_schedule_change_phone_numbertel:+18778624093 +``` +(Full list extracted; nothing in defaults exposes the APIM key — it's runtime only.) + +--- + +## 9. FRONTIER AIRLINES — not analyzed + +APK not available from any third-party source tested. Frontier is a ULCC like Spirit — minimal standby/upgrade features expected. Not yet pulled. + +--- + +## 10. BRITISH AIRWAYS — not deeply analyzed + +APK extracted but not deep-dived. BA is a oneworld carrier so similar to AA in structure, but the standby/upgrade flow lives in the executive club portal (auth-gated). + +--- + +## Anti-bot protection summary + +| Airline | WAF | Bot detection | Difficulty | Working bypass | +|---|---|---|---|---| +| United | Akamai | Akamai BMP | Medium | Playwright session token | +| American | Akamai | Akamai ACF sensor | Medium | Mobile UA `Android/...|AmericanAirlines` | +| Delta | Dynatrace + Akamai BMP | `AkamaiBMP.framework` | High | Mobile UA for `mobile-api`; shop endpoints have no known bypass | +| Spirit | Akamai | CyberFend BMP | Medium | APIM key for GET; POST blocked from scripts | +| JetBlue | Azure APIM | Static API key | Low | Just send the key | +| Korean Air | minimal | minimal | Low | `channel: app` header | +| Emirates | none on flight-status | — | None | Curl | +| Alaska | minimal | minimal | Low | Mobile API paths | + +--- + +## Decrypted keys & secrets + +### Spirit Azure APIM +| Env | Decrypted key | +|---|---| +| **Production** | **`c6567af50d544dfbb3bc5dd99c6bb177`** | +| Dev/UAT | `81ffe172c5c741cdac0a2cc13ab19b54` | +| Stage | `daa76fa3c25d423f880b939d56992553` | + +Decryption: AES/CBC/PKCS5Padding, SHA-512("1983Miramar")[:16] key, IV `Aw@#EDfTGec3Rtd!`. Source: native lib `libspirit-lib.so`. + +### JetBlue Azure APIM +| Use | Key | +|---|---| +| Main API (`az-api.jetblue.com`) | **`49fc015f1ba44abf892d2b8961612378`** | +| Seat map / logging | `a5ee654e981b4577a58264fed9b1669c` | + +Captured from web traffic via Playwright. + +### Other notable extracted strings +- Delta TrackJS token (front-end): `40c5d1df6a8049dfa571d3e4324bef72` (app `www-nextgen-flight-status`) +- Delta business chat ID: `6431449c-701a-432c-8a47-275b730ac559` +- Delta Adobe app ID: `launch-ENee224a00122947fdbbb787826f1099dc` + +--- + +## Reusable Playwright wrapper + +```javascript +const { chromium } = require('playwright'); + +async function queryAirline(airlineDomain, setupHeaders, apiCall) { + const browser = await chromium.launch({ headless: true }); + const context = await browser.newContext(); + if (setupHeaders) await context.setExtraHTTPHeaders(setupHeaders); + const page = await context.newPage(); + await page.goto(airlineDomain); + await page.waitForTimeout(5000); + const result = await page.evaluate(apiCall); + await browser.close(); + return result; +} + +// UNITED — get flight loads +const unitedLoads = await queryAirline( + 'https://www.united.com/en/us/flightstatus', + null, + async () => { + const tokenResp = await fetch('/api/auth/anonymous-token'); + const { data } = await tokenResp.json(); + const token = data.token.hash; + const resp = await fetch( + '/api/flightstatus/upgradeListExtended?flightNumber=2238&flightDate=2026-04-08&fromAirportCode=EWR', + { headers: { 'Accept': 'application/json', 'x-authorization-api': 'bearer ' + token } } + ); + return resp.json(); + } +); + +// AMERICAN — get waitlist + available seats +const aaLoads = await queryAirline( + 'https://cdn.flyaa.aa.com/apiv2/mobile-flifo/flightSchedules/v1.0?origin=DFW&destination=IAH&departureDay=9&departureMonth=4&searchType=schedule&noOfFlightsToDisplay=20', + { + 'User-Agent': 'Android/2025.31 Pixel 7|14|1080|2400|1.0|AmericanAirlines', + 'x-clientid': 'MOBILE', + 'Accept': 'application/json', + 'Device-ID': 'device-001' + }, + async () => { + const resp = await fetch( + 'https://cdn.flyaa.aa.com/api/mobile/loyalty/waitlist/v1.2?carrierCode=AA&flightNumber=2209&departureDate=2026-04-08&originAirportCode=DFW&destinationAirportCode=IAH', + { headers: { 'Accept': 'application/json', 'x-referrer': 'fs' } } + ); + return resp.json(); + } +); + +// KOREAN AIR — flight status +const keStatus = await queryAirline( + 'https://www.koreanair.com', + null, + async () => { + const resp = await fetch('/api/fs/scheduleFlightSearch/flight/status/app', { + method: 'POST', + headers: { 'Content-Type': 'application/json', 'Accept': 'application/json', 'channel': 'app' }, + body: JSON.stringify({ + departureDate: '20260408', + flightNumber: '017', + searchOption: 'FLTNUM', + departureLocationCode: '', + arrivalLocationCode: '' + }) + }); + return resp.json(); + } +); +``` + +## Plain HTTP examples (no Playwright) + +```bash +# SPIRIT — flight status +curl -X POST "https://api.spirit.com/customermobileprod/2.8.0/v3/GetFlightInfoBI" \ + -H "Content-Type: application/json" \ + -H "Ocp-Apim-Subscription-Key: c6567af50d544dfbb3bc5dd99c6bb177" \ + -H "Platform: Android" \ + -d '{"departureStation":"FLL","arrivalStation":"ATL","departureDate":"2026-04-08"}' + +# JETBLUE — flight status +curl "https://az-api.jetblue.com/flight-status/get-by-number?number=524&date=2026-04-08" \ + -H "apikey: 49fc015f1ba44abf892d2b8961612378" \ + -H "Accept: application/json" + +# EMIRATES — flight status (zero auth!) +curl "https://www.emirates.com/service/flight-status?departureDate=2026-04-08&flight=221" + +# DELTA — flight status (mobile UA required) +curl -X POST "https://mobile-api.delta.com/flight-status-mobile/details" \ + -H "Content-Type: application/json" \ + -H "Accept: application/json" \ + -H "User-Agent: FlyDelta/24.10.1 (Pixel 7; Android 14; Build/UQ1A.240205.004)" \ + -d '{"airlineCode":"DL","flightNumber":"996","flightOriginDate":"2026-04-12"}' + +# DELTA — gate boarding status (mobile UA required) +curl "https://mobile-api.delta.com/gate/boarding/boarding-status/996/2026-04-12/ATL/LAX" \ + -H "Accept: application/json" \ + -H "User-Agent: FlyDelta/24.10.1 (Pixel 7; Android 14; Build/UQ1A.240205.004)" + +# DELTA — schedules (mobile UA required, web variant works too) +curl -X POST "https://flightinformation-api.delta.com/flight-status/schedules" \ + -H "Content-Type: application/json" \ + -H "User-Agent: FlyDelta/24.10.1 (Pixel 7; Android 14; Build/UQ1A.240205.004)" \ + -d '{"flightSegments":[{"flightOriginDate":"2026-04-12","originAirportCode":"ATL","destinationAirportCode":"LAX","airlineCode":"DL"}],"filterOptions":{"schedule":{"directOnlyIndicator":false,"includeElapsedOrAccumulatedTime":true,"flightStops":[],"departureTimeRanges":[],"excludeOtherAirlineInd":true,"connections":[{"connectionPointNum":"","connectionCity":"","minConnectionTime":""}],"startRecord":1,"endRecord":30},"availability":{"indicator":false,"seatTypeCode":"A","onlyRevenueClassInd":false}}}' +``` + +--- + +## Rate limits & best practices + +- **United:** Token expires in ~30 min. Cache and refresh. No known rate limit. +- **American:** No token. Akamai may throttle if too many requests from same browser context. Rotate browser contexts. +- **Spirit:** APIM key shared across all app users. No known rate limit but don't abuse. +- **JetBlue:** API key never expires. No known rate limit. +- **Korean Air:** No auth. `channel` header required. +- **Delta:** No rate limit observed on `mobile-api` flight status. Shop endpoints will reject before rate-limiting. +- **Emirates:** Zero auth on flight status. No known rate limit. +- **All Playwright airlines:** Reuse browser context across queries to avoid re-establishing sessions. Close and recreate if you get 403s. + +--- + +## Known gaps and what's missing + +### Airlines with confirmed load data endpoints but blocked access + +| Airline | What exists | What's blocking | Possible path forward | +|---|---|---|---| +| **Alaska** | `POST /seats/waitlist` returns FlightLoad (authorized/available/booked/checkedIn) + standby/upgrade lists | APIM key loaded from Firebase Remote Config at runtime (not in APK) | Install app on device, capture key from traffic, OR use `GET /viewseatmap/seatmap` and count open seats | +| **JetBlue** | `retrievePriorityList` returns capacity/available/booked per cabin (J+Y) + standby count + passenger names | Requires PNR to establish check-in session via `identifyPNR` | Need a valid PNR. `registerClient` works without one but `identifyPNR` validates server-side | +| **Delta** | `getUpgradeAndStandby` returns full standby data; `offers/shop` returns `seatsAvailableCount` per fare | Standby needs PNR + name. Shop needs SkyMiles auth + Akamai BMP sensor data | Either acquire PNR/auth, OR reverse `AkamaiBMP.framework` from iOS bundle to reproduce sensor data generation | +| **Emirates** | `olci/v1/checkin/staffinformation/{pnr}/{lastName}` returns full flight load table (F/J/Y/W cabin counts) | Akamai BMP on `mobileapp.emirates.com` + requires staff travel PNR | Staff travel only — no public load data path | +| **Korean Air** | `flightSeatCount` endpoint exists | Returns 0 — likely needs IBE session (call `removeGarbageSession` first) or only works close to departure | Test with date within 24-48 hrs; call `removeGarbageSession` first | +| **Spirit** | `seatmap` endpoints with availability | Needs JWT token + Akamai bypass (CyberFend sensor data) | Real Android device with Frida hook on rooted device | + +### Airlines I haven't deeply analyzed +- **Frontier** — APK not located +- **British Airways** — APK extracted but not analyzed +- **Allegiant** — not pulled +- **Hawaiian** — not pulled +- **Sun Country** — not pulled +- **Air Canada** — not pulled +- **Lufthansa** — not pulled + +--- + +## File structure of `/Users/m4mini/Desktop/code/airlines/` + +``` +airlines/ +├── airlines_request.md ← this document +├── AIRLINE_API_SPEC.md ← integration spec for app developer +├── API_FINDINGS.md ← initial findings doc +├── FLIGHT_LOADS_API.md ← flight loads quick-reference +├── package.json / node_modules/ ← Playwright 1.58 + chromium-1208 +├── scripts/ +│ ├── united_search.js ← United Playwright flight search +│ ├── delta_flight_status_test.js ← Delta flight status endpoint test +│ ├── delta_focused.js ← Delta multi-endpoint comparison +│ ├── delta_diag.js ← Delta XHR vs fetch diagnostic +│ ├── delta_real_search.js ← Delta form interaction capture +│ ├── delta_route_form.js ← Delta route search form +│ ├── delta_form_capture.js ← Delta form capture v1 +│ ├── delta_capture_v2.js, v3.js ← capture iterations +│ ├── delta_test_correct_body.js ← Delta body format test +│ ├── delta_test_website_api.js ← Delta website API test +│ ├── delta_grep_js.js ← Delta SPA bundle grep +│ ├── delta_click_through.js ← Delta detail page click-through +│ └── delta_website_capture.js ← Delta website capture +├── extracted/ +│ ├── aa/jadx_out/sources/ ← American Airlines (Java) +│ ├── alaska/ ← Alaska Airlines +│ │ ├── apktool_out/res/xml/remote_config_defaults.xml +│ │ └── jadx_out/sources/ +│ ├── delta/jadx_out/sources/ ← Delta Android (Java) +│ ├── delta_ios/Payload/FlyDelta.app/ ← Delta iOS (decrypted) +│ │ ├── FlyDelta ← main Mach-O binary +│ │ ├── Frameworks/ +│ │ │ ├── FlyDeltaComms.framework/ +│ │ │ ├── Today.framework/ +│ │ │ ├── TodayMode.framework/ +│ │ │ ├── ShopBook.framework/ +│ │ │ ├── SeatMap.framework/ +│ │ │ ├── Concierge.framework/ +│ │ │ ├── AkamaiBMP.framework/ ← bot manager sensor lib +│ │ │ └── SharedModels.framework/ +│ │ └── Hybrid/Resources/assets/scripts/app/environments.json +│ ├── jetblue/ ← JetBlue Android +│ ├── korean/jadx_out/sources/ ← Korean Air +│ ├── spirit/ ← Spirit Android +│ │ ├── jadx_out/sources/ ← decompiled Java +│ │ └── native/lib/ ← native libraries (libspirit-lib.so) +│ ├── united/jadx_out/sources/ ← United Android +│ ├── emirates/ ← Emirates Android +│ └── ba/ ← British Airways +├── captures/ ← Screenshots and traffic captures +├── com.delta.iphone.ver1_7.9.1_und3fined.ipa ← decrypted iOS Delta app +├── com.alaskaairlines.android.apk +├── alaska_patched.apk +├── com.jetblue.JetBlueAndroid.xapk +├── com.koreanair.passenger.xapk +├── com.ba.mobile.apk +└── com.emirates.ek.android.xapk +``` + +--- + +## Open questions / next steps + +1. **Delta Akamai BMP bypass** — extract sensor data generation from `AkamaiBMP.framework` (iOS) and reproduce in Node/Python. This would unlock `offers/shop` and the website's `flight-status/details` endpoint. Multi-day reverse-engineering effort. + +2. **Delta SkyMiles guest token** — search for an anonymous SkyMiles auth flow. Searched for `guestToken`, `anonymousToken`, `guestSession` in both Android and iOS — no hits. Might be hidden under a different name. + +3. **Alaska APIM key** — install Alaska app on a real device, capture traffic to extract the Firebase Remote Config APIM key. Once obtained, the `/seats/waitlist` endpoint would return full FlightLoad data. + +4. **Frontier APK** — locate and pull. Frontier is likely similar to Spirit (ULCC, no standby). + +5. **British Airways deep dive** — pull oneworld flight inventory endpoints (similar to AA but in BA's portal). + +6. **JetBlue PNR-less path** — investigate whether `mobilecheckin.jetblue.com/checkin/registerClient` actually validates PNR or just creates a session. If session creation is enough, we might be able to call `retrievePriorityList` with crafted parameters. + +7. **Korean Air `flightSeatCount`** — test with dates within 24-48 hrs of departure to confirm whether the 0 result is date-driven or session-driven. + +8. **Spirit POST endpoints** — only path is real device with Frida hook on CyberFend. + +--- + +## Lessons learned + +- **The simplest approach beats playwright theater.** For the Delta `flight-status-mobile/details` endpoint, the answer was `curl -X POST -H "User-Agent: FlyDelta/..." -d '<3-field-body>'`. I spent multiple iterations on Playwright form interactions when the answer was just curl with the right UA. +- **The User-Agent matters more than expected.** Akamai BMP often whitelists requests by mobile UA pattern. American Airlines wouldn't return data without `Android/2025.31 Pixel 7|14|...|AmericanAirlines`. Delta wouldn't return data without `FlyDelta/24.10.1 (Pixel 7; Android 14; Build/UQ1A.240205.004)`. +- **Anonymous token beats anonymous session.** United's `/api/auth/anonymous-token` is the cleanest pattern in the industry — short-lived bearer token with no PII required. +- **iOS bundles include test data.** Apps ship sample API responses for offline development (`MockShopV2Response.json`, `new_airport_mode.json`). These reveal exact response shapes without needing to call the real API. +- **`@SerializedName` is the source of truth.** When grepping for API field names, always check `@SerializedName` annotations first — that's what comes over the wire. `@Expose` without `@SerializedName` falls back to the Java field name. +- **The "public auth whitelist" file is gold.** Delta's `u3/d.java` `NetworkSecurityConstants` lists endpoints that bypass auth checks. Every Akamai-protected airline has something similar. +- **Read both Android and iOS.** They're built from different source trees and the iOS app sometimes has newer endpoints, framework names, or domain identifiers that the Android app doesn't. + +--- + +*Document compiled 2026-04-11. Findings span multiple sessions of APK reverse engineering, Playwright traffic capture, and direct API testing. All endpoint URLs, body formats, and response shapes verified against actual decompiled source unless marked otherwise.* diff --git a/api_docs/stafftraveler_api.md b/api_docs/stafftraveler_api.md new file mode 100644 index 0000000..6e5a542 --- /dev/null +++ b/api_docs/stafftraveler_api.md @@ -0,0 +1,291 @@ +# StaffTraveler API + +Extracted from `com.stafftraveler.webview` v3.12.0 (build 1880000346). +Source artifacts: +- `apps/com.stafftraveler.webview_3.12.0-1880000346_apkcombo.com.xapk` +- `/Users/m4mini/Desktop/code/airlines/extracted/stafftraveler/` +- Hermes disassembly: `extracted/stafftraveler/hermes_out/bundle.hasm` + +## Architecture + +React Native + Hermes bytecode. All business logic lives in `assets/index.android.bundle`. Native Android is a thin RN shell (`MainActivity`, `MainApplication`). + +**Stack** +- **Firebase Auth** — user accounts, ID token issuance. +- **Firebase Remote Config** — runtime-fetched config (API base URL, Typesense host/key, feature flags, etc). +- **Firebase Firestore** — realtime store for flights, load requests, load reports, tips, user state. +- **Firebase App Check** — registered (`FirebaseAppCheckKtxRegistrar`) and Play Integrity is bundled (`com.google.android.play.core.integrity`) — but the `/v1/commands/*` fetch path does NOT attach `X-Firebase-AppCheck` (see `createFirebaseCommand` disassembly at `bundle.hasm` offset `0x017ed673`). App Check enforcement on the HTTP API is **not observed**. Firestore rules may still consult App Check. +- **Typesense** (`enhk2ji1vu6csxzrp-1.a1.typesense.net`) — flight search index. The API key is delivered via Remote Config, not hardcoded. +- **Custom "commands" HTTP API** — `POST https://api.stafftraveler.com/v1/commands/` — all mutating/reading operations go through this, auth'd with a Firebase ID token. + +## Firebase Project Config (from `res/values/strings.xml`) + +| Key | Value | +|-----|-------| +| Project ID | `stafftraveler-prod` | +| Android App ID | `1:628258099825:android:5fb976ba6ad1bb05` | +| Sender ID | `628258099825` | +| Android API Key | `AIzaSyC2zG6ArnguzzdWsLYV1qjQznma0zl1Q0s` | +| Maps API Key | `AIzaSyD2yg_WuGtrAC_fyyEwvAQgycMoP3Xf9cM` | +| Storage Bucket | `stafftraveler-prod.appspot.com` | +| Realtime DB | `https://stafftraveler-prod.firebaseio.com` | +| Firestore | (default, project `stafftraveler-prod`) | + +These are all public identifiers — Firebase security comes from rules + App Check, not from hiding them. + +## Remote Config Keys + +Fetched at startup; controls every external URL. Full shape (from `bundle.hasm` at line 140129): + +| Key | Purpose | +|-----|---------| +| `api_commands_url` | Base for the commands API (production: `https://api.stafftraveler.com/v1/commands`) | +| `search_typesense_hostname` | Typesense host | +| `search_typesense_api_key` | Typesense search-only key | +| `image_cdn_hostname` | Aircraft/airline image CDN | +| `airline_logos_hostname` | Airline logo CDN | +| `google_places_api_key`, `_details_url`, `_search_url`, `_photo_url` | Places integration | +| `weather_service_url` (`api.weatherapi.com`), `weather_service_api_key` | Weather | +| `location_service_url` (`pro.ip-api.com`), `location_service_api_key` | Geo-IP | +| `google_web_client_id` | Google Sign-In | +| `loads_jackpot_enabled_airline_ids`, `onboarding_invite_reward`, `notice_*`, `promotion_*` | Feature flags / content | + +To get the real values, call Firebase Remote Config REST with the project config above: +``` +POST https://firebaseremoteconfig.googleapis.com/v1/projects/stafftraveler-prod/namespaces/firebase:fetch?key=AIzaSyC2zG6ArnguzzdWsLYV1qjQznma0zl1Q0s +``` + +## Auth + +Standard Firebase Auth (email/password, Google, Apple, Facebook providers present in bundle strings). No custom auth flow. + +To authenticate: +1. Sign in via Firebase Auth REST with the `stafftraveler-prod` API key above, or via the Firebase iOS SDK configured for the same project. +2. `getIdToken()` produces a JWT with ~1h TTL. +3. Use the token as `Authorization: Bearer ` on every commands-API call. + +App logic in `bundle.hasm` (`createFirebaseCommand` generator, line 1827439) checks `expirationTime` and calls `getIdToken()` right before sending, so token refresh is transparent. + +## Commands API + +**Base**: `https://api.stafftraveler.com/v1/commands/user` (from Remote Config `api_commands_url` — confirmed from captured traffic, `2026-04-22`) +**Auth**: `Authorization: Bearer ` +**Method**: `POST` +**Headers**: `Content-Type: application/json`, `x-stafftraveler-client: mobile` +**Body**: JSON — shape is command-specific +**Response**: 200 OK with `{payload: {...}}` on success. Business errors raise `isError`/`isNetworkError` flags in the bundle. + +Fetch options object literally constructed in the bundle (offset `0x017ed673`): +```js +{ method: 'POST', headers: { 'Content-Type': 'application/json', 'Authorization': 'Bearer ' + idToken }, body: JSON.stringify(payload) } +``` + +Full endpoint pattern: `POST https://api.stafftraveler.com/v1/commands/user/` + +### Confirmed Commands (built via `createFirebaseCommand(name)`) + +Endpoint = `POST {api_commands_url}/` + +| Command | Purpose | +|---------|---------| +| `searchFlightsByRoute` | Flight search by origin+destination+date | +| `searchFlightsByCode` | Flight search by flight number + date | +| `createLoadsRequests` | Submit one or more load requests for selected flights (spends credits) | +| `deleteLoadsRequest` | Cancel a pending request | +| `reopenLoadsRequest` | Reopen an expired/cancelled request | +| `upgradeLoadsRequest` | Promote a request to Priority (uses extra credits) | +| `requestLockForLoadsRequest` / `unlockLoadsRequest` | Cooperative lock: while you're typing a load answer, others can't also submit | +| `submitLoadsReport` | Answer someone else's request (the reverse direction — you earn credits) | +| `reviseLoadsReport` | Edit your answer | +| `addComment` / `removeComment` / `reportComment` | Flight comments | +| `addAirlineDetails` | Provide airline employee credentials for verification | +| `addCreditsForPurchase` | IAP receipt validation → credits | +| `setAirlineStCodes` | Set user's airline ("ST code" = StaffTraveler internal airline code) | + +Command names are stored in the bundle as plain string identifiers; the full inventory is in `/tmp/st_fn_names.txt` (extracted function names). + +### `searchFlightsByRoute` — confirmed shape (captured 2026-04-22) + +Request body: +```json +{ + "originIata": "DFW", + "destinationIata": "LAS", + "dates": ["2026-04-22"], + "maxConnections": 0, + "allowNearbyDepartures": false, + "allowNearbyArrivals": false, + "payloadType": "passenger", + "includeMultipleCarriers": false +} +``` + +Field corrections from the bytecode guess: the key I thought was `stops` is actually `maxConnections`; `payloadType` takes the literal value `"passenger"` (not `"route"`); `dates` is an array of `YYYY-MM-DD` strings. + +Response: +```json +{ + "payload": { + "directFlights": [ /* array of flight objects */ ], + "connectingFlights": [], + "numberOfDiscardedFlights": 0, + "settingsFilteredCount": 0, + "messages": [] + } +} +``` + +Each flight object has three IDs (`id`, `id_v2`, `id_v3` — the `id_v3` is human-readable like `AA_2998_DFW_2026_04_22`), airline info (`airlineId`, `airlineStCode`, `flightCode`, `flightNumber`), local/UTC times, equipment (`flightEquipmentId`, `flightEquipmentIata`), `durationMinutes`, `isCargoFlight`, `seatsTotal`, and `seatsByClass: {first, business, premiumEconomy, economy}`. + +**Important:** `seatsByClass` is the **aircraft cabin configuration**, not current availability. Current load data comes from Firestore (see below), not this response. + +See `api_docs/stafftraveler_captures/searchFlightsByRoute_DFW-LAS_*.json` for the full live capture. + +### `searchFlightsByCode` — payload shape + +From caller at `bundle.hasm:1948510` (Function #38848): + +```json +{ + "flightCode": "UA123", + "dates": ["", ...] +} +``` + +Returns flights matching the flight code on each listed date. + +### `createLoadsRequests` — confirmed shape (captured 2026-04-22) + +Request body is a **bare JSON array** of flight objects (no outer wrapper). Each element is the full flight object as returned by `searchFlightsByRoute`, with one added field: `isPriorityRequest: bool`. + +```json +[ + { + "id": "a23d6f8379f5109eddeb5bbf78bdccc1", + "id_v2": "0d9d0702b203d224ace3e6eb94531dde", + "id_v3": "AA_2178_DFW_2026_04_22", + "airlineId": "AA", + "flightNumber": 2178, + "flightCode": "AA2178", + "departureAirportId": "DFW", + "arrivalAirportId": "LAS", + "departureTimeLocal": "2026-04-22T16:45:00-05:00", + "departureTimeUtc": "2026-04-22T21:45:00Z", + "arrivalTimeLocal": "2026-04-22T17:46:00-07:00", + "arrivalTimeUtc": "2026-04-23T00:46:00Z", + "flightEquipmentId": "32Q", + "durationMinutes": 181, + "isCargoFlight": false, + "airlineStCode": "st_AAL", + "departureAirportIata": "DFW", + "arrivalAirportIata": "LAS", + "flightEquipmentIata": "32Q", + "seatsTotal": 196, + "seatsByClass": {"first": 0, "business": 20, "premiumEconomy": 0, "economy": 176}, + "isPriorityRequest": false + } +] +``` + +Response: +```json +{ + "payload": { + "numberOfRequests": 0, + "numberOfRequestsPaidFor": 0, + "numberOfRequestsPaidForPriority": 0, + "hasSufficientCredits": true, + "verifiedRequests": [ + { + "flightId": "AA_2178_DFW_2026_04_22", + "isExisting": true, + "isDuplicateForUser": true, + "isRequestUpdateForUser": false, + "hasDeparted": false, + "isCancelled": false, + "isPriorityRequest": false, + "hasRecentLoads": false, + "scheduledFlight": { /* echoed full flight obj */ } + } + ] + } +} +``` + +**Idempotent per (user, flight):** on duplicate submission, `numberOfRequests: 0`, `isDuplicateForUser: true`, **no credit charged**. This makes the command safe to replay as a "what's the current state of my request for flight X" probe — you just pay for the first request on any given flight. + +**`hasRecentLoads`** is the flag the app uses to decide whether load data is already available. When true, the Firestore listener is expected to deliver load-report documents; when false, there's nothing to show until someone in the community answers. + +See `api_docs/stafftraveler_captures/createLoadsRequests_AA2178_*.json` for the full live capture. + +## Firestore Collections (realtime) + +Once a request is created, load results stream back via Firestore listeners. Listener constructors in the bundle: + +| Listener | What it subscribes to | +|----------|----------------------| +| `TrackedFlightsStoreListener` (`bundle.hasm:253969`) | The user's currently-tracked flights (including ones with pending requests) | +| `OpenRequestsStoreListener` (`bundle.hasm:443724`) | The user's open requests, filtered by `useUserAirlineStCodes()` | +| `ConnectingFlightsStoreListener` | Connecting-flight variants | +| `PinnedFlightsStoreListener` | User-pinned flights | +| `PriorityRequestCounterStoreListener` | Priority request quota counter | +| `OpenRequestsCountListener` | Open request count for UI badge | +| `DerivedLoadsReportsStoreListener` | Reports on flights the user is answering | +| `CreditsListener` / `UserSessionsListener` / `UserStoreListener` | Account state | +| `RemoteConfigListener` | Remote Config changes | + +Exact collection paths are not plain strings in the bundle — they're built from user state (e.g. `users/{uid}/flightRequests/{id}` or `users/{uid}/trackedFlights/{id}`). To get them, run Firestore in debug (iOS SDK logs every collection path) or capture with Firebase Local Emulator proxy. + +## Typesense (search infrastructure) + +Not directly hit by the client for flight search — `searchFlightsByRoute` goes through the commands API, which internally queries Typesense. However, the bundle also contains a `typesense-instantsearch-adapter`, and strings like `searchTypesenseAndAdapt`, `searchTypesenseForFacetValuesAndAdapt`, `x-typesense-api-key` (`bundle.hasm:1995183`) suggest **direct Typesense queries are used for some facets** (probably airline filtering, autocomplete on airports/airlines). + +Host: `enhk2ji1vu6csxzrp-1.a1.typesense.net` +Key: from Remote Config `search_typesense_api_key` (search-only, scoped, safe to embed). + +## Integration plan for the iOS Flights app + +The cleanest path — do not build a parallel HTTP client, just use Firebase directly: + +1. **Embed the `stafftraveler-prod` Firebase config** in a second `FirebaseApp` instance (iOS supports multiple named apps). Use the API key + app ID + sender ID from above. Name it something like `StaffTravelerFirebaseApp` so it doesn't collide with Flights' own Firebase project. +2. **Sign in** with the user's StaffTraveler credentials using `Auth.auth(app: stApp).signIn(withEmail:password:)`. Store the refresh token in Keychain. +3. **Fetch Remote Config** once on first use to get `api_commands_url`, `search_typesense_api_key`, etc. +4. **Search a route** → `POST https://api.stafftraveler.com/v1/commands/searchFlightsByRoute` with the payload shape documented above and `Authorization: Bearer `. +5. **Request loads** → `POST .../createLoadsRequests` with the flight IDs from step 4. +6. **Listen for answers** → `Firestore.firestore(app: stApp).collection("users/\(uid)/flightRequests").document(requestId).addSnapshotListener { ... }` (exact path TBD — confirm via traffic capture). + +### Firestore is the answer — schema captured (2026-04-22) + +Loads and all real-time state live in Firestore, queried via the `Listen/channel` long-poll transport. Mobile iOS uses the gRPC variant (hard to mitm); the `app.stafftraveler.com` web client uses plain HTTP long-poll, which is fully inspectable. Playwright capture + URL-decoding gave us every `addTarget` body. + +**Full schema and query recipes:** see `api_docs/stafftraveler_captures/firestore_schema.md` and the raw capture at `api_docs/stafftraveler_captures/firestore_listen_targets_and_queries.txt`. + +**The one query that renders loads:** +``` +collection: derivedLoadsReports +where: flightId == "{id_v3}" (e.g. "AA_2178_DFW_2026_04_22") +orderBy: createdAt DESC +``` + +Returns docs containing `openSeats.{first,business,premiumEconomy,eco}.count`, `staffListing.count`, `creatorName`, `createdAt`, `seatsAvailabilityScore`, etc. Example at `api_docs/stafftraveler_captures/derivedLoadsReports_AA2178_response.json`. + +**Required REST headers** (earlier runQuery attempts were 403 because the API key wasn't attached): +``` +Authorization: Bearer +X-Firebase-GMPID: 1:628258099825:web:35b20eaab4d441894041d0 +?key=AIzaSyD82Hiqx-jAbHF8faMGSveqLw8CdX8a-Uc (as URL query, web key) +``` + +### Remaining nuances + +1. **Account eligibility** — `addAirlineDetails` still required for the account to participate. Your existing account is verified (WN / `st_SWA`), so no blocker. +2. **Credits / access model** — `createLoadsRequests` charges for *new* requests only. Idempotent per `(user, flight)` — `isDuplicateForUser: true` returns current state with no charge. **Firestore `derivedLoadsReports` reads are gated by an active `trackedFlights/{flightId}` doc**, which is only created by `createLoadsRequests`. So you must spend 1 credit per *new* flight to unlock load reads for it; after that, reads are free and unlimited. You cannot peek at other flights' loads without requesting. +3. **App Check** — not enforced on commands API or Firestore for this project (confirmed: web client makes all these requests with just ID token + API key). + +### Integration for iOS Flights app (final) + +- Secondary `FirebaseApp` configured against `stafftraveler-prod` with the web API key + GMPID above. +- `signInWithEmailAndPassword` → persist refresh token. +- `Firestore.firestore(app: stApp).collection("derivedLoadsReports").whereField("flightId", isEqualTo: flightIdV3).order(by: "createdAt", descending: true).addSnapshotListener { ... }` — realtime loads for any flight you know the id_v3 of. +- Plus `trackedFlights`, `airlinesBySt`, `airportsByIata`, `flightEquipment`, `conversations/{flightId}` subscriptions — full recipes in `firestore_schema.md`. +- Writes (request loads, submit report) keep using `POST https://api.stafftraveler.com/v1/commands/user/`. diff --git a/api_docs/stafftraveler_captures/README.md b/api_docs/stafftraveler_captures/README.md new file mode 100644 index 0000000..cd70930 --- /dev/null +++ b/api_docs/stafftraveler_captures/README.md @@ -0,0 +1,108 @@ +# StaffTraveler API captures + +Real request/response pairs captured from the iOS app `com.stafftraveler.webview` v3.12.0 (build 1880000346) against `api.stafftraveler.com` on 2026-04-22. All captures are by user `3NNPesQMiMRNYnPmuQzh6w2YKyh1` (`stafftraveler@treymail.com`, WN/Southwest, airline ST code `st_SWA`). + +## Auth + +All command-API calls are authenticated with: +``` +Authorization: Bearer +``` +Token issued by `securetoken.google.com/stafftraveler-prod`, `aud=stafftraveler-prod`, ~1h TTL. The captured tokens are already expired — do not try to reuse them. To get a new one, sign in via Firebase Auth REST against API key `AIzaSyC2zG6ArnguzzdWsLYV1qjQznma0zl1Q0s` (needs `X-Android-Package` + `X-Android-Cert` headers or iOS SDK). + +Only standard headers are sent. No App Check. No SSL pinning. No device/client signing beyond the ID token. + +## Endpoint path pattern + +``` +POST https://api.stafftraveler.com/v1/commands/user/ +``` + +Note the `user/` segment — the `api_commands_url` Remote Config value is `https://api.stafftraveler.com/v1/commands/user`, and the command name is appended with `/`. I initially documented this as `/v1/commands/` which is wrong. + +## Files + +### `searchFlightsByRoute_DFW-LAS_*.json` +DFW→LAS direct-only search for 2026-04-22. + +Request body: +```json +{ + "originIata": "DFW", + "destinationIata": "LAS", + "dates": ["2026-04-22"], + "maxConnections": 0, + "allowNearbyDepartures": false, + "allowNearbyArrivals": false, + "payloadType": "passenger", + "includeMultipleCarriers": false +} +``` + +Response: `{payload: {directFlights: [...], connectingFlights: [...], numberOfDiscardedFlights, messages, settingsFilteredCount}}`. + +Each flight carries three IDs (`id`, `id_v2`, `id_v3`), airline info, local/UTC times, equipment, and a `seatsByClass` **aircraft configuration** (NOT current availability — that's a different read path entirely). + +Corrections vs the api_doc's initial guesses: +- `stops` → actually `maxConnections` +- `payloadType: "route"` → actually `"passenger"` +- No `origin`/`destination`/`date` fields — only the `*Iata` variants + `dates` array. + +### `createLoadsRequests_AA2178_*.json` +Request loads for AA2178 DFW→LAS 2026-04-22. + +**Request body** is a bare JSON array of flight objects (no outer wrapper). Each flight is the complete flight object from the search response with one added field: `isPriorityRequest: bool`. + +**Response shape:** +```json +{ + "payload": { + "numberOfRequests": 0, + "numberOfRequestsPaidFor": 0, + "numberOfRequestsPaidForPriority": 0, + "hasSufficientCredits": true, + "verifiedRequests": [ + { + "flightId": "AA_2178_DFW_2026_04_22", + "isExisting": true, + "isDuplicateForUser": true, + "isRequestUpdateForUser": false, + "hasDeparted": false, + "isCancelled": false, + "isPriorityRequest": false, + "hasRecentLoads": false, + "scheduledFlight": { /* full flight obj */ } + } + ] + } +} +``` + +### Dedup behavior (important) + +On this capture, `numberOfRequests: 0` and `isDuplicateForUser: true` — the server recognized this user had already requested this flight and **did NOT charge a credit**. Replaying the same `createLoadsRequests` payload is safe (idempotent). + +This means: +- `numberOfRequests` is the count of *newly created* requests in this call. +- `isDuplicateForUser` tells you whether the flight already had an open request for this user. +- **No credit is spent on duplicates.** Useful for polling the current request state without cost. + +### `hasRecentLoads: false` — where loads actually come from + +`hasRecentLoads` is the flag the app uses to decide whether load data is available for display. It's `false` here because nobody has submitted loads for AA2178 yet. The actual load data (when `hasRecentLoads: true`) does NOT come through the commands API — it arrives via a Firestore realtime listener on a doc that the user's account has permission to read. + +To find the exact Firestore path when a flight has loads, one more capture is needed: tap a flight that already has loads populated, and grab the `firestore.googleapis.com/.../Listen/channel` traffic. That will show the watched doc path. + +## Known error shapes + +Not captured yet: +- What happens when you send an invalid flight ID +- What `createLoadsRequests` returns when credits are insufficient (`hasSufficientCredits: false`) +- What `numberOfRequests > 0` responses look like (fresh request, credit actually spent) + +## Replay safety + +To replay any of these: +1. Grab a fresh token from the app or by re-signing-in. +2. Swap it into the curl. +3. For `createLoadsRequests`, same payload = dedup-safe. Different payload = may charge credits. diff --git a/api_docs/stafftraveler_captures/airlinesBySt_full.json b/api_docs/stafftraveler_captures/airlinesBySt_full.json new file mode 100644 index 0000000..eb51e1c --- /dev/null +++ b/api_docs/stafftraveler_captures/airlinesBySt_full.json @@ -0,0 +1,20306 @@ +[ + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_0C", + "fields": { + "name": { + "stringValue": "Cobra Aviation" + }, + "isActive": { + "booleanValue": true + }, + "__index": { + "mapValue": { + "fields": { + "digests": { + "mapValue": { + "fields": { + "logo": { + "stringValue": "44907808299a98ade82eb8c616890c8e" + }, + "data": { + "stringValue": "e8d1699f8a853c21af3ea19a99ba95a3" + } + } + } + }, + "isDirty": { + "booleanValue": false + } + } + } + }, + "memberCount": { + "integerValue": "1" + }, + "fsCode": { + "stringValue": "0Cx" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "logo": { + "mapValue": { + "fields": { + "path": { + "stringValue": "images/airline-logos/__fallback.png" + }, + "type": { + "stringValue": "fallback" + } + } + } + }, + "alliance": { + "nullValue": null + }, + "iata": { + "stringValue": "0C" + }, + "icao": { + "nullValue": null + }, + "stCode": { + "stringValue": "st_0C" + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "0cbf24b9fcd5" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:21.080837Z", + "updateTime": "2026-04-20T07:00:44.768272Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_0N", + "fields": { + "name": { + "stringValue": "North Star Air" + }, + "icao": { + "nullValue": null + }, + "iata": { + "stringValue": "0N" + }, + "isActive": { + "booleanValue": true + }, + "logo": { + "mapValue": { + "fields": { + "path": { + "stringValue": "images/airline-logos/scraped/0N.png" + }, + "type": { + "stringValue": "scraped" + } + } + } + }, + "__index": { + "mapValue": { + "fields": { + "digests": { + "mapValue": { + "fields": { + "data": { + "stringValue": "edebabb2a210798b326b4f715549f5e0" + }, + "logo": { + "stringValue": "34e580df6e1716a2f6856db889e55601" + } + } + } + }, + "isDirty": { + "booleanValue": false + } + } + } + }, + "fsCode": { + "stringValue": "0N" + }, + "stCode": { + "stringValue": "st_0N" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "memberCount": { + "integerValue": "108" + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "f5b05a6c0f0c" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:21.095557Z", + "updateTime": "2026-04-14T08:24:43.823585Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_1A", + "fields": { + "iata": { + "stringValue": "1A" + }, + "icao": { + "nullValue": null + }, + "name": { + "stringValue": "Amadeus It Group" + }, + "isActive": { + "booleanValue": true + }, + "alliance": { + "nullValue": null + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "memberCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "openRequestCount": { + "integerValue": "0" + }, + "logo": { + "mapValue": { + "fields": { + "type": { + "stringValue": "fallback" + }, + "path": { + "stringValue": "images/airline-logos/__fallback.png" + } + } + } + }, + "stCode": { + "stringValue": "st_1A" + }, + "fsCode": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "749413dacb97" + } + } + } + } + }, + "createTime": "2026-03-27T08:37:39.971153Z", + "updateTime": "2026-03-27T08:37:40.113254Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_1B", + "fields": { + "iata": { + "stringValue": "1B" + }, + "icao": { + "nullValue": null + }, + "isActive": { + "booleanValue": true + }, + "logo": { + "mapValue": { + "fields": { + "type": { + "stringValue": "fallback" + }, + "path": { + "stringValue": "images/airline-logos/__fallback.png" + } + } + } + }, + "memberCount": { + "integerValue": "0" + }, + "openRequestCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "stCode": { + "stringValue": "st_1B" + }, + "fsCode": { + "nullValue": null + }, + "name": { + "stringValue": "Sabre Asia Pacific" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "97e5ffefa847" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:21.078172Z", + "updateTime": "2026-03-20T19:01:23.528854Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_1B_2025", + "fields": { + "iata": { + "nullValue": null + }, + "icao": { + "nullValue": null + }, + "name": { + "stringValue": "British Airways Cargo" + }, + "isActive": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "memberCount": { + "integerValue": "11" + }, + "openRequestCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "logo": { + "mapValue": { + "fields": { + "type": { + "stringValue": "fallback" + }, + "path": { + "stringValue": "images/airline-logos/__fallback.png" + } + } + } + }, + "stCode": { + "stringValue": "st_1B_2025" + }, + "fsCode": { + "stringValue": "1B" + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "de263113f70f" + } + } + } + } + }, + "createTime": "2026-03-22T17:19:47.436012Z", + "updateTime": "2026-03-22T17:19:47.782201Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_1C", + "fields": { + "iata": { + "stringValue": "1C" + }, + "memberCount": { + "integerValue": "0" + }, + "icao": { + "nullValue": null + }, + "isActive": { + "booleanValue": true + }, + "logo": { + "mapValue": { + "fields": { + "path": { + "stringValue": "images/airline-logos/scraped/1C.png" + }, + "type": { + "stringValue": "scraped" + } + } + } + }, + "__index": { + "mapValue": { + "fields": { + "digests": { + "mapValue": { + "fields": { + "data": { + "stringValue": "867bb44d357c2ef45751daa1fe37c97d" + }, + "logo": { + "stringValue": "ff0c46cfacba86a4c786eff481d4c032" + } + } + } + }, + "isDirty": { + "booleanValue": false + } + } + } + }, + "fsCode": { + "stringValue": "1C" + }, + "stCode": { + "stringValue": "st_1C" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "name": { + "stringValue": "A-Ice" + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "c4ffdf3e71df" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:21.069037Z", + "updateTime": "2026-03-20T19:01:38.916090Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_1D", + "fields": { + "iata": { + "stringValue": "1D" + }, + "icao": { + "nullValue": null + }, + "isActive": { + "booleanValue": true + }, + "memberCount": { + "integerValue": "0" + }, + "openRequestCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "stCode": { + "stringValue": "st_1D" + }, + "fsCode": { + "nullValue": null + }, + "name": { + "stringValue": "Radixx Solutions International" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "logo": { + "mapValue": { + "fields": { + "path": { + "stringValue": "images/airline-logos/scraped/1D.png" + }, + "type": { + "stringValue": "scraped" + } + } + } + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "0418e6d10d86" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:21.068266Z", + "updateTime": "2026-03-27T08:37:40.211536Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_1E", + "fields": { + "iata": { + "stringValue": "1E" + }, + "icao": { + "nullValue": null + }, + "isActive": { + "booleanValue": true + }, + "memberCount": { + "integerValue": "0" + }, + "openRequestCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "stCode": { + "stringValue": "st_1E" + }, + "fsCode": { + "nullValue": null + }, + "name": { + "stringValue": "Travelsky Technology" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "logo": { + "mapValue": { + "fields": { + "path": { + "stringValue": "images/airline-logos/scraped/1E.png" + }, + "type": { + "stringValue": "scraped" + } + } + } + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "a885c2365d7b" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:21.096028Z", + "updateTime": "2026-03-27T08:37:40.106412Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_1F", + "fields": { + "iata": { + "stringValue": "1F" + }, + "memberCount": { + "integerValue": "0" + }, + "icao": { + "nullValue": null + }, + "isActive": { + "booleanValue": true + }, + "logo": { + "mapValue": { + "fields": { + "path": { + "stringValue": "images/airline-logos/scraped/1Fx.png" + }, + "type": { + "stringValue": "scraped" + } + } + } + }, + "__index": { + "mapValue": { + "fields": { + "digests": { + "mapValue": { + "fields": { + "data": { + "stringValue": "a5ccd943bb7077f3e125786e17389d63" + }, + "logo": { + "stringValue": "97bfd08c887f7ff43f28a4384f21b403" + } + } + } + }, + "isDirty": { + "booleanValue": false + } + } + } + }, + "fsCode": { + "stringValue": "1Fx" + }, + "stCode": { + "stringValue": "st_1F" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "name": { + "stringValue": "Infini Travel Information" + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "0bf3e059dbd9" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:21.101169Z", + "updateTime": "2026-03-20T19:01:42.644433Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_1G", + "fields": { + "iata": { + "stringValue": "1G" + }, + "icao": { + "nullValue": null + }, + "isActive": { + "booleanValue": true + }, + "logo": { + "mapValue": { + "fields": { + "type": { + "stringValue": "fallback" + }, + "path": { + "stringValue": "images/airline-logos/__fallback.png" + } + } + } + }, + "memberCount": { + "integerValue": "0" + }, + "openRequestCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "stCode": { + "stringValue": "st_1G" + }, + "fsCode": { + "nullValue": null + }, + "name": { + "stringValue": "Travelport Services" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "bde0767a4177" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:21.102276Z", + "updateTime": "2026-03-20T19:01:22.808405Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_1G_2025", + "fields": { + "iata": { + "nullValue": null + }, + "icao": { + "nullValue": null + }, + "name": { + "stringValue": "Eva Airways Cargo" + }, + "isActive": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "memberCount": { + "integerValue": "4" + }, + "openRequestCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "logo": { + "mapValue": { + "fields": { + "type": { + "stringValue": "fallback" + }, + "path": { + "stringValue": "images/airline-logos/__fallback.png" + } + } + } + }, + "stCode": { + "stringValue": "st_1G_2025" + }, + "fsCode": { + "stringValue": "1G" + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "fbf4a985c425" + } + } + } + } + }, + "createTime": "2026-03-22T17:19:49.362533Z", + "updateTime": "2026-03-22T17:19:49.603932Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_1H", + "fields": { + "iata": { + "stringValue": "1H" + }, + "icao": { + "nullValue": null + }, + "isActive": { + "booleanValue": true + }, + "logo": { + "mapValue": { + "fields": { + "type": { + "stringValue": "fallback" + }, + "path": { + "stringValue": "images/airline-logos/__fallback.png" + } + } + } + }, + "memberCount": { + "integerValue": "0" + }, + "openRequestCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "stCode": { + "stringValue": "st_1H" + }, + "fsCode": { + "nullValue": null + }, + "name": { + "stringValue": "JSC \"Sirena-Travel\"" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "644be5e1cca9" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:21.080072Z", + "updateTime": "2026-03-20T19:01:24.530925Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_1H_2025", + "fields": { + "iata": { + "nullValue": null + }, + "icao": { + "nullValue": null + }, + "name": { + "stringValue": "Asiana Airways Cargo" + }, + "isActive": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "memberCount": { + "integerValue": "1" + }, + "openRequestCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "logo": { + "mapValue": { + "fields": { + "type": { + "stringValue": "fallback" + }, + "path": { + "stringValue": "images/airline-logos/__fallback.png" + } + } + } + }, + "stCode": { + "stringValue": "st_1H_2025" + }, + "fsCode": { + "stringValue": "1H" + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "6b087f9b84cc" + } + } + } + } + }, + "createTime": "2026-03-22T17:19:48.147388Z", + "updateTime": "2026-03-22T17:19:48.463507Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_1J", + "fields": { + "iata": { + "stringValue": "1J" + }, + "memberCount": { + "integerValue": "0" + }, + "name": { + "stringValue": "PT. Navios Evolusi Solusindo" + }, + "icao": { + "nullValue": null + }, + "isActive": { + "booleanValue": true + }, + "__index": { + "mapValue": { + "fields": { + "isDirty": { + "booleanValue": true + }, + "digests": { + "mapValue": { + "fields": { + "data": { + "stringValue": "9f45b77290309fb3b203c0b8920d2891" + }, + "logo": { + "stringValue": "c81aa80a79612ede8eabc22d44fc434d" + } + } + } + } + } + } + }, + "logo": { + "mapValue": { + "fields": { + "path": { + "stringValue": "images/airline-logos/scraped/1AJ.png" + }, + "type": { + "stringValue": "scraped" + } + } + } + }, + "fsCode": { + "stringValue": "1AJ" + }, + "stCode": { + "stringValue": "st_1J" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "22ac408e8703" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:20.854060Z", + "updateTime": "2026-03-20T19:01:36.858855Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_1J_2025", + "fields": { + "iata": { + "nullValue": null + }, + "icao": { + "nullValue": null + }, + "name": { + "stringValue": "JAL Cargo" + }, + "isActive": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "memberCount": { + "integerValue": "1" + }, + "openRequestCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "logo": { + "mapValue": { + "fields": { + "type": { + "stringValue": "fallback" + }, + "path": { + "stringValue": "images/airline-logos/__fallback.png" + } + } + } + }, + "stCode": { + "stringValue": "st_1J_2025" + }, + "fsCode": { + "stringValue": "1J" + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "087c6ae76368" + } + } + } + } + }, + "createTime": "2026-03-22T17:19:47.528355Z", + "updateTime": "2026-03-22T17:19:47.767222Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_1K", + "fields": { + "iata": { + "stringValue": "1K" + }, + "memberCount": { + "integerValue": "0" + }, + "icao": { + "nullValue": null + }, + "isActive": { + "booleanValue": true + }, + "logo": { + "mapValue": { + "fields": { + "path": { + "stringValue": "images/airline-logos/scraped/1KA.png" + }, + "type": { + "stringValue": "scraped" + } + } + } + }, + "__index": { + "mapValue": { + "fields": { + "digests": { + "mapValue": { + "fields": { + "logo": { + "stringValue": "d7fa376830a2cd53851be1465d8908fc" + }, + "data": { + "stringValue": "b6f8c9a6fe9ec542c52fa5921ebc5a7f" + } + } + } + }, + "isDirty": { + "booleanValue": false + } + } + } + }, + "fsCode": { + "stringValue": "1KA" + }, + "stCode": { + "stringValue": "st_1K" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "name": { + "stringValue": "Mixvel" + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "53b3295fe79b" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:21.076694Z", + "updateTime": "2026-03-20T19:01:40.237360Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_1K_2025", + "fields": { + "iata": { + "nullValue": null + }, + "icao": { + "nullValue": null + }, + "name": { + "stringValue": "Korean Air Cargo" + }, + "isActive": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "memberCount": { + "integerValue": "7" + }, + "openRequestCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "logo": { + "mapValue": { + "fields": { + "type": { + "stringValue": "fallback" + }, + "path": { + "stringValue": "images/airline-logos/__fallback.png" + } + } + } + }, + "stCode": { + "stringValue": "st_1K_2025" + }, + "fsCode": { + "stringValue": "1K" + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "3ed59172bfe0" + } + } + } + } + }, + "createTime": "2026-03-22T17:19:41.676678Z", + "updateTime": "2026-03-22T17:19:42.023686Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_1L", + "fields": { + "iata": { + "stringValue": "1L" + }, + "icao": { + "nullValue": null + }, + "isActive": { + "booleanValue": true + }, + "logo": { + "mapValue": { + "fields": { + "type": { + "stringValue": "fallback" + }, + "path": { + "stringValue": "images/airline-logos/__fallback.png" + } + } + } + }, + "memberCount": { + "integerValue": "0" + }, + "openRequestCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "stCode": { + "stringValue": "st_1L" + }, + "fsCode": { + "nullValue": null + }, + "name": { + "stringValue": "Citizenplane" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "c7a812fc38a6" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:21.079569Z", + "updateTime": "2026-03-20T19:01:21.995975Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_1L_2026", + "fields": { + "iata": { + "nullValue": null + }, + "icao": { + "nullValue": null + }, + "name": { + "stringValue": "Dragonair Cargo" + }, + "isActive": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "memberCount": { + "integerValue": "0" + }, + "openRequestCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "logo": { + "mapValue": { + "fields": { + "type": { + "stringValue": "fallback" + }, + "path": { + "stringValue": "images/airline-logos/__fallback.png" + } + } + } + }, + "stCode": { + "stringValue": "st_1L_2026" + }, + "fsCode": { + "stringValue": "1L" + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "dffe247ee47f" + } + } + } + } + }, + "createTime": "2026-04-13T09:09:21.661137Z", + "updateTime": "2026-04-13T09:09:22.079317Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_1M", + "fields": { + "iata": { + "stringValue": "1M" + }, + "memberCount": { + "integerValue": "0" + }, + "icao": { + "nullValue": null + }, + "isActive": { + "booleanValue": true + }, + "logo": { + "mapValue": { + "fields": { + "path": { + "stringValue": "images/airline-logos/scraped/1Mx.png" + }, + "type": { + "stringValue": "scraped" + } + } + } + }, + "__index": { + "mapValue": { + "fields": { + "digests": { + "mapValue": { + "fields": { + "data": { + "stringValue": "73469bece4decfd0d9efc19127f34284" + }, + "logo": { + "stringValue": "617a7bce6079650336447610fafafa0f" + } + } + } + }, + "isDirty": { + "booleanValue": false + } + } + } + }, + "fsCode": { + "stringValue": "1Mx" + }, + "stCode": { + "stringValue": "st_1M" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "name": { + "stringValue": "Online Reservation System" + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "1c915b00c20b" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:21.094341Z", + "updateTime": "2026-03-20T19:01:40.188329Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_1M_2025", + "fields": { + "iata": { + "nullValue": null + }, + "icao": { + "nullValue": null + }, + "name": { + "stringValue": "China Airlines Cargo" + }, + "isActive": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "memberCount": { + "integerValue": "2" + }, + "openRequestCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "logo": { + "mapValue": { + "fields": { + "type": { + "stringValue": "fallback" + }, + "path": { + "stringValue": "images/airline-logos/__fallback.png" + } + } + } + }, + "stCode": { + "stringValue": "st_1M_2025" + }, + "fsCode": { + "stringValue": "1M" + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "9db7f45ba945" + } + } + } + } + }, + "createTime": "2026-03-22T17:19:43.497612Z", + "updateTime": "2026-03-22T17:19:43.845102Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_1N", + "fields": { + "iata": { + "stringValue": "1N" + }, + "icao": { + "nullValue": null + }, + "isActive": { + "booleanValue": true + }, + "logo": { + "mapValue": { + "fields": { + "type": { + "stringValue": "fallback" + }, + "path": { + "stringValue": "images/airline-logos/__fallback.png" + } + } + } + }, + "memberCount": { + "integerValue": "0" + }, + "openRequestCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "stCode": { + "stringValue": "st_1N" + }, + "fsCode": { + "nullValue": null + }, + "name": { + "stringValue": "Navitaire" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "ed7089b0af77" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:21.080605Z", + "updateTime": "2026-03-20T19:01:21.879848Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_1N_2026", + "fields": { + "iata": { + "nullValue": null + }, + "icao": { + "nullValue": null + }, + "name": { + "stringValue": "ANA Cargo" + }, + "isActive": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "memberCount": { + "integerValue": "0" + }, + "openRequestCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "logo": { + "mapValue": { + "fields": { + "type": { + "stringValue": "fallback" + }, + "path": { + "stringValue": "images/airline-logos/__fallback.png" + } + } + } + }, + "stCode": { + "stringValue": "st_1N_2026" + }, + "fsCode": { + "stringValue": "1N" + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "60511967a7f8" + } + } + } + } + }, + "createTime": "2026-04-13T09:09:19.247526Z", + "updateTime": "2026-04-13T09:09:19.813956Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_1P", + "fields": { + "iata": { + "stringValue": "1P" + }, + "icao": { + "nullValue": null + }, + "isActive": { + "booleanValue": true + }, + "memberCount": { + "integerValue": "0" + }, + "openRequestCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "stCode": { + "stringValue": "st_1P" + }, + "fsCode": { + "nullValue": null + }, + "name": { + "stringValue": "Travelport" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "logo": { + "mapValue": { + "fields": { + "path": { + "stringValue": "images/airline-logos/scraped/1P.png" + }, + "type": { + "stringValue": "scraped" + } + } + } + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "c3a37a145069" + } + } + } + } + }, + "createTime": "2026-03-22T02:32:33.584574Z", + "updateTime": "2026-03-27T08:37:41.389954Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_1Q", + "fields": { + "iata": { + "stringValue": "1Q" + }, + "icao": { + "nullValue": null + }, + "isActive": { + "booleanValue": true + }, + "memberCount": { + "integerValue": "0" + }, + "openRequestCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "stCode": { + "stringValue": "st_1Q" + }, + "fsCode": { + "nullValue": null + }, + "name": { + "stringValue": "Intelisys Aviation Systems (2013) I" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "logo": { + "mapValue": { + "fields": { + "path": { + "stringValue": "images/airline-logos/scraped/1Q.png" + }, + "type": { + "stringValue": "scraped" + } + } + } + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "95e7abf0b6ee" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:21.080062Z", + "updateTime": "2026-03-27T08:37:40.178989Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_1R", + "fields": { + "iata": { + "stringValue": "1R" + }, + "icao": { + "nullValue": null + }, + "name": { + "stringValue": "My Sky" + }, + "isActive": { + "booleanValue": true + }, + "alliance": { + "nullValue": null + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "memberCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "openRequestCount": { + "integerValue": "0" + }, + "logo": { + "mapValue": { + "fields": { + "type": { + "stringValue": "fallback" + }, + "path": { + "stringValue": "images/airline-logos/__fallback.png" + } + } + } + }, + "stCode": { + "stringValue": "st_1R" + }, + "fsCode": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "b604cf26ea0d" + } + } + } + } + }, + "createTime": "2026-03-27T08:37:40.061068Z", + "updateTime": "2026-03-27T08:37:40.263650Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_1S", + "fields": { + "iata": { + "stringValue": "1S" + }, + "icao": { + "nullValue": null + }, + "name": { + "stringValue": "SABRE GLBL INC." + }, + "isActive": { + "booleanValue": true + }, + "memberCount": { + "integerValue": "0" + }, + "openRequestCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "stCode": { + "stringValue": "st_1S" + }, + "fsCode": { + "nullValue": null + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "logo": { + "mapValue": { + "fields": { + "path": { + "stringValue": "images/airline-logos/scraped/1S.png" + }, + "type": { + "stringValue": "scraped" + } + } + } + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "91785c435530" + } + } + } + } + }, + "createTime": "2026-03-22T02:31:00.204736Z", + "updateTime": "2026-03-22T02:31:00.328891Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_1T", + "fields": { + "iata": { + "stringValue": "1T" + }, + "icao": { + "nullValue": null + }, + "isActive": { + "booleanValue": true + }, + "memberCount": { + "integerValue": "0" + }, + "openRequestCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "stCode": { + "stringValue": "st_1T" + }, + "fsCode": { + "nullValue": null + }, + "name": { + "stringValue": "Hitit Bilgisayar Hizmetleri A.S" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "logo": { + "mapValue": { + "fields": { + "path": { + "stringValue": "images/airline-logos/scraped/1T.png" + }, + "type": { + "stringValue": "scraped" + } + } + } + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "72b7ff1d1cef" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:20.758233Z", + "updateTime": "2026-03-27T08:37:40.193874Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_1U", + "fields": { + "iata": { + "stringValue": "1U" + }, + "icao": { + "nullValue": null + }, + "isActive": { + "booleanValue": true + }, + "memberCount": { + "integerValue": "0" + }, + "openRequestCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "stCode": { + "stringValue": "st_1U" + }, + "fsCode": { + "nullValue": null + }, + "name": { + "stringValue": "Ita Software" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "logo": { + "mapValue": { + "fields": { + "path": { + "stringValue": "images/airline-logos/scraped/1U.png" + }, + "type": { + "stringValue": "scraped" + } + } + } + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "5d1eb8ff0d99" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:20.729865Z", + "updateTime": "2026-03-27T08:37:40.229725Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_1V", + "fields": { + "iata": { + "stringValue": "1V" + }, + "icao": { + "nullValue": null + }, + "isActive": { + "booleanValue": true + }, + "memberCount": { + "integerValue": "0" + }, + "openRequestCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "stCode": { + "stringValue": "st_1V" + }, + "fsCode": { + "nullValue": null + }, + "name": { + "stringValue": "Travelport / DBA" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "logo": { + "mapValue": { + "fields": { + "path": { + "stringValue": "images/airline-logos/scraped/1V.png" + }, + "type": { + "stringValue": "scraped" + } + } + } + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "a0c4aa94df71" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:20.744291Z", + "updateTime": "2026-03-27T08:37:41.363783Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_1X", + "fields": { + "iata": { + "nullValue": null + }, + "icao": { + "nullValue": null + }, + "name": { + "stringValue": "Branson Air Express" + }, + "isActive": { + "booleanValue": true + }, + "alliance": { + "nullValue": null + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "memberCount": { + "integerValue": "0" + }, + "openRequestCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "logo": { + "mapValue": { + "fields": { + "type": { + "stringValue": "fallback" + }, + "path": { + "stringValue": "images/airline-logos/__fallback.png" + } + } + } + }, + "stCode": { + "stringValue": "st_1X" + }, + "fsCode": { + "stringValue": "1X" + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "a7d2e518bc1d" + } + } + } + } + }, + "createTime": "2026-04-13T08:43:17.798997Z", + "updateTime": "2026-04-13T08:43:18.194002Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_1Y", + "fields": { + "iata": { + "stringValue": "1Y" + }, + "icao": { + "nullValue": null + }, + "isActive": { + "booleanValue": true + }, + "memberCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "openRequestCount": { + "integerValue": "0" + }, + "logo": { + "mapValue": { + "fields": { + "path": { + "stringValue": "images/airline-logos/scraped/1Y.png" + }, + "type": { + "stringValue": "scraped" + } + } + } + }, + "name": { + "stringValue": "DXC Technology Services" + }, + "fsCode": { + "stringValue": "1Y" + }, + "stCode": { + "stringValue": "st_1Y" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "eec69db44336" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:20.745532Z", + "updateTime": "2026-03-20T19:01:40.777101Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_1Z", + "fields": { + "iata": { + "stringValue": "1Z" + }, + "icao": { + "nullValue": null + }, + "isActive": { + "booleanValue": true + }, + "memberCount": { + "integerValue": "0" + }, + "openRequestCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "stCode": { + "stringValue": "st_1Z" + }, + "fsCode": { + "nullValue": null + }, + "name": { + "stringValue": "Bird Information Systems" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "logo": { + "mapValue": { + "fields": { + "path": { + "stringValue": "images/airline-logos/scraped/1Z.png" + }, + "type": { + "stringValue": "scraped" + } + } + } + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "c0fd6ba331a0" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:20.734785Z", + "updateTime": "2026-03-27T08:37:40.283946Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_2A_2025", + "fields": { + "iata": { + "nullValue": null + }, + "icao": { + "nullValue": null + }, + "name": { + "stringValue": "Deutsche Bahn" + }, + "isActive": { + "booleanValue": true + }, + "alliance": { + "nullValue": null + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "memberCount": { + "integerValue": "1" + }, + "openRequestCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "logo": { + "mapValue": { + "fields": { + "type": { + "stringValue": "fallback" + }, + "path": { + "stringValue": "images/airline-logos/__fallback.png" + } + } + } + }, + "stCode": { + "stringValue": "st_2A_2025" + }, + "fsCode": { + "stringValue": "2A" + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "addb7686931b" + } + } + } + } + }, + "createTime": "2026-03-22T17:19:53.798193Z", + "updateTime": "2026-03-22T17:19:54.118636Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_2E", + "fields": { + "iata": { + "stringValue": "2E" + }, + "name": { + "stringValue": "Smokey Bay Air" + }, + "icao": { + "nullValue": null + }, + "logo": { + "mapValue": { + "fields": { + "path": { + "stringValue": "images/airline-logos/scraped/2E.png" + }, + "type": { + "stringValue": "scraped" + } + } + } + }, + "isActive": { + "booleanValue": true + }, + "memberCount": { + "integerValue": "1" + }, + "__index": { + "mapValue": { + "fields": { + "digests": { + "mapValue": { + "fields": { + "logo": { + "stringValue": "b0fa0ac5d2265e21cfb9cda1b58c49cc" + }, + "data": { + "stringValue": "f0d175a33e8b37f5e290f60d6b55c6da" + } + } + } + }, + "isDirty": { + "booleanValue": false + } + } + } + }, + "fsCode": { + "stringValue": "2E" + }, + "stCode": { + "stringValue": "st_2E" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "8dfd8a092598" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:21.065761Z", + "updateTime": "2026-03-20T19:01:40.423883Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_2E_cd", + "fields": { + "iata": { + "stringValue": "2E" + }, + "icao": { + "nullValue": null + }, + "name": { + "stringValue": "ETF Airways D.O.O." + }, + "isActive": { + "booleanValue": true + }, + "memberCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "openRequestCount": { + "integerValue": "0" + }, + "logo": { + "mapValue": { + "fields": { + "type": { + "stringValue": "fallback" + }, + "path": { + "stringValue": "images/airline-logos/__fallback.png" + } + } + } + }, + "stCode": { + "stringValue": "st_2E_cd" + }, + "fsCode": { + "nullValue": null + }, + "isControlledDuplicate": { + "booleanValue": true + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "78e88bf85ebd" + } + } + } + } + }, + "createTime": "2026-03-01T02:00:23.985102Z", + "updateTime": "2026-03-20T19:01:21.961661Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_2H", + "fields": { + "icao": { + "nullValue": null + }, + "isActive": { + "booleanValue": true + }, + "memberCount": { + "integerValue": "0" + }, + "__index": { + "mapValue": { + "fields": { + "digests": { + "mapValue": { + "fields": { + "logo": { + "stringValue": "0b8d908269adcb520f67d8a4aba6b726" + }, + "data": { + "stringValue": "6db93f9ad9ed7f06920d072b996c6402" + } + } + } + }, + "isDirty": { + "booleanValue": false + } + } + } + }, + "iata": { + "stringValue": "2H" + }, + "logo": { + "mapValue": { + "fields": { + "path": { + "stringValue": "images/airline-logos/scraped/2Hx.png" + }, + "type": { + "stringValue": "scraped" + } + } + } + }, + "fsCode": { + "stringValue": "2Hx" + }, + "stCode": { + "stringValue": "st_2H" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "name": { + "stringValue": "Thi Factory" + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "6f2c85330d36" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:20.841Z", + "updateTime": "2026-03-20T19:01:42.333673Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_2H_2026", + "fields": { + "iata": { + "nullValue": null + }, + "icao": { + "nullValue": null + }, + "name": { + "stringValue": "Amsterdam Airlines" + }, + "isActive": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "memberCount": { + "integerValue": "0" + }, + "openRequestCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "logo": { + "mapValue": { + "fields": { + "type": { + "stringValue": "fallback" + }, + "path": { + "stringValue": "images/airline-logos/__fallback.png" + } + } + } + }, + "stCode": { + "stringValue": "st_2H_2026" + }, + "fsCode": { + "stringValue": "2H" + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "6d7852cc86d7" + } + } + } + } + }, + "createTime": "2026-04-13T09:09:19.692541Z", + "updateTime": "2026-04-13T09:09:20.213642Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_2I_cd", + "fields": { + "iata": { + "stringValue": "2I" + }, + "icao": { + "nullValue": null + }, + "name": { + "stringValue": "21 Air" + }, + "isActive": { + "booleanValue": true + }, + "memberCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "openRequestCount": { + "integerValue": "0" + }, + "logo": { + "mapValue": { + "fields": { + "type": { + "stringValue": "fallback" + }, + "path": { + "stringValue": "images/airline-logos/__fallback.png" + } + } + } + }, + "stCode": { + "stringValue": "st_2I_cd" + }, + "fsCode": { + "nullValue": null + }, + "isControlledDuplicate": { + "booleanValue": true + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "b8fb168c924c" + } + } + } + } + }, + "createTime": "2026-03-01T02:00:19.355099Z", + "updateTime": "2026-03-20T19:01:23.255450Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_2L_cd", + "fields": { + "iata": { + "stringValue": "2L" + }, + "icao": { + "nullValue": null + }, + "name": { + "stringValue": "Transportes Aereos Bolivianos" + }, + "isActive": { + "booleanValue": true + }, + "memberCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "openRequestCount": { + "integerValue": "0" + }, + "logo": { + "mapValue": { + "fields": { + "type": { + "stringValue": "fallback" + }, + "path": { + "stringValue": "images/airline-logos/__fallback.png" + } + } + } + }, + "stCode": { + "stringValue": "st_2L_cd" + }, + "fsCode": { + "nullValue": null + }, + "isControlledDuplicate": { + "booleanValue": true + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "2cb345eccf31" + } + } + } + } + }, + "createTime": "2026-03-01T02:00:37.836792Z", + "updateTime": "2026-03-20T19:01:23.539819Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_2N", + "fields": { + "iata": { + "nullValue": null + }, + "icao": { + "nullValue": null + }, + "name": { + "stringValue": "NextJet" + }, + "isActive": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "memberCount": { + "integerValue": "0" + }, + "openRequestCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "logo": { + "mapValue": { + "fields": { + "type": { + "stringValue": "fallback" + }, + "path": { + "stringValue": "images/airline-logos/__fallback.png" + } + } + } + }, + "stCode": { + "stringValue": "st_2N" + }, + "fsCode": { + "stringValue": "2N" + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "997fa52cd1b0" + } + } + } + } + }, + "createTime": "2026-04-13T08:43:14.903025Z", + "updateTime": "2026-04-13T08:43:15.324858Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_2N_cd", + "fields": { + "iata": { + "stringValue": "2N" + }, + "icao": { + "nullValue": null + }, + "name": { + "stringValue": "Smartlynx Airlines Malta" + }, + "isActive": { + "booleanValue": true + }, + "memberCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "openRequestCount": { + "integerValue": "0" + }, + "logo": { + "mapValue": { + "fields": { + "type": { + "stringValue": "fallback" + }, + "path": { + "stringValue": "images/airline-logos/__fallback.png" + } + } + } + }, + "stCode": { + "stringValue": "st_2N_cd" + }, + "fsCode": { + "nullValue": null + }, + "isControlledDuplicate": { + "booleanValue": true + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "144830850208" + } + } + } + } + }, + "createTime": "2026-03-01T02:00:28.670283Z", + "updateTime": "2026-03-20T19:01:22.829639Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_2O", + "fields": { + "name": { + "stringValue": "Island Air Service" + }, + "icao": { + "nullValue": null + }, + "isActive": { + "booleanValue": true + }, + "memberCount": { + "integerValue": "0" + }, + "__index": { + "mapValue": { + "fields": { + "digests": { + "mapValue": { + "fields": { + "logo": { + "stringValue": "17ac7ddd475d4e18a7da45383bda4c56" + }, + "data": { + "stringValue": "18536998276245f1f5b4b4f7ee1b0c18" + } + } + } + }, + "isDirty": { + "booleanValue": false + } + } + } + }, + "iata": { + "stringValue": "2O" + }, + "logo": { + "mapValue": { + "fields": { + "path": { + "stringValue": "images/airline-logos/scraped/2O.png" + }, + "type": { + "stringValue": "scraped" + } + } + } + }, + "fsCode": { + "stringValue": "2O" + }, + "stCode": { + "stringValue": "st_2O" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "b33575be5c0b" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:21.094432Z", + "updateTime": "2026-03-20T19:01:41.898823Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_2S", + "fields": { + "iata": { + "nullValue": null + }, + "icao": { + "nullValue": null + }, + "name": { + "stringValue": "Satgur Air Transport" + }, + "isActive": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "memberCount": { + "integerValue": "0" + }, + "openRequestCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "logo": { + "mapValue": { + "fields": { + "type": { + "stringValue": "fallback" + }, + "path": { + "stringValue": "images/airline-logos/__fallback.png" + } + } + } + }, + "stCode": { + "stringValue": "st_2S" + }, + "fsCode": { + "stringValue": "2S" + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "bc4eb662114e" + } + } + } + } + }, + "createTime": "2026-04-13T08:43:14.531428Z", + "updateTime": "2026-04-13T08:43:14.904985Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_2V", + "fields": { + "iata": { + "stringValue": "2V" + }, + "name": { + "stringValue": "Amtrak" + }, + "icao": { + "nullValue": null + }, + "logo": { + "mapValue": { + "fields": { + "path": { + "stringValue": "images/airline-logos/scraped/2V.png" + }, + "type": { + "stringValue": "scraped" + } + } + } + }, + "isActive": { + "booleanValue": true + }, + "__index": { + "mapValue": { + "fields": { + "digests": { + "mapValue": { + "fields": { + "logo": { + "stringValue": "60a0cb111def48d8333cff3fba0a262c" + }, + "data": { + "stringValue": "3fb18506537b07fe329f379ce63db1ee" + } + } + } + }, + "isDirty": { + "booleanValue": false + } + } + } + }, + "memberCount": { + "integerValue": "1" + }, + "fsCode": { + "stringValue": "2V" + }, + "stCode": { + "stringValue": "st_2V" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "0a540ef40437" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:20.989264Z", + "updateTime": "2026-03-20T19:01:46.866772Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_2WX", + "fields": { + "iata": { + "nullValue": null + }, + "icao": { + "nullValue": null + }, + "name": { + "stringValue": "Multiple Solutions Limited" + }, + "isActive": { + "booleanValue": true + }, + "alliance": { + "nullValue": null + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "memberCount": { + "integerValue": "0" + }, + "openRequestCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "logo": { + "mapValue": { + "fields": { + "type": { + "stringValue": "fallback" + }, + "path": { + "stringValue": "images/airline-logos/__fallback.png" + } + } + } + }, + "stCode": { + "stringValue": "st_2WX" + }, + "fsCode": { + "stringValue": "2Wx" + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "c460bf970d80" + } + } + } + } + }, + "createTime": "2026-04-13T08:43:12.834329Z", + "updateTime": "2026-04-13T08:43:13.214034Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_2Z_2025", + "fields": { + "iata": { + "nullValue": null + }, + "icao": { + "nullValue": null + }, + "name": { + "stringValue": "Voronezh Aircraft" + }, + "isActive": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "memberCount": { + "integerValue": "1" + }, + "openRequestCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "logo": { + "mapValue": { + "fields": { + "type": { + "stringValue": "fallback" + }, + "path": { + "stringValue": "images/airline-logos/__fallback.png" + } + } + } + }, + "stCode": { + "stringValue": "st_2Z_2025" + }, + "fsCode": { + "stringValue": "2Z" + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "ede4abe6ffb7" + } + } + } + } + }, + "createTime": "2026-03-22T17:19:46.516050Z", + "updateTime": "2026-03-22T17:19:46.801658Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_3A", + "fields": { + "iata": { + "stringValue": "3A" + }, + "name": { + "stringValue": "Chu Kong Passenger Transport" + }, + "icao": { + "nullValue": null + }, + "logo": { + "mapValue": { + "fields": { + "path": { + "stringValue": "images/airline-logos/scraped/3AC.png" + }, + "type": { + "stringValue": "scraped" + } + } + } + }, + "isActive": { + "booleanValue": true + }, + "memberCount": { + "integerValue": "0" + }, + "__index": { + "mapValue": { + "fields": { + "digests": { + "mapValue": { + "fields": { + "logo": { + "stringValue": "a50bfb0a19b5bd2dca6b8d94e660dd17" + }, + "data": { + "stringValue": "be93413f18901bc9d7e8908190a22d57" + } + } + } + }, + "isDirty": { + "booleanValue": false + } + } + } + }, + "fsCode": { + "stringValue": "3AC" + }, + "stCode": { + "stringValue": "st_3A" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "54a3c8e707af" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:21.078112Z", + "updateTime": "2026-03-20T19:01:28.465118Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_3B", + "fields": { + "isActive": { + "booleanValue": true + }, + "memberCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "openRequestCount": { + "integerValue": "0" + }, + "fsCode": { + "stringValue": "32B" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "logo": { + "mapValue": { + "fields": { + "path": { + "stringValue": "images/airline-logos/__fallback.png" + }, + "type": { + "stringValue": "fallback" + } + } + } + }, + "alliance": { + "nullValue": null + }, + "iata": { + "stringValue": "3B" + }, + "name": { + "stringValue": "Braspress Air Cargo" + }, + "icao": { + "nullValue": null + }, + "stCode": { + "stringValue": "st_3B" + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "64e186a30875" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:20.973508Z", + "updateTime": "2026-04-20T07:00:44.671787Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_3J", + "fields": { + "iata": { + "nullValue": null + }, + "icao": { + "nullValue": null + }, + "name": { + "stringValue": "Zip Air" + }, + "isActive": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "memberCount": { + "integerValue": "0" + }, + "openRequestCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "logo": { + "mapValue": { + "fields": { + "type": { + "stringValue": "fallback" + }, + "path": { + "stringValue": "images/airline-logos/__fallback.png" + } + } + } + }, + "stCode": { + "stringValue": "st_3J" + }, + "fsCode": { + "stringValue": "3J" + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "5e7f4670c2e9" + } + } + } + } + }, + "createTime": "2026-04-13T08:43:13.071082Z", + "updateTime": "2026-04-13T08:43:13.502316Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_3L_cd", + "fields": { + "iata": { + "stringValue": "3L" + }, + "icao": { + "nullValue": null + }, + "name": { + "stringValue": "Hi Fly (Malta)" + }, + "isActive": { + "booleanValue": true + }, + "memberCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "openRequestCount": { + "integerValue": "0" + }, + "logo": { + "mapValue": { + "fields": { + "type": { + "stringValue": "fallback" + }, + "path": { + "stringValue": "images/airline-logos/__fallback.png" + } + } + } + }, + "stCode": { + "stringValue": "st_3L_cd" + }, + "fsCode": { + "nullValue": null + }, + "isControlledDuplicate": { + "booleanValue": true + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "6c01c90586f3" + } + } + } + } + }, + "createTime": "2026-03-01T02:00:25.694112Z", + "updateTime": "2026-03-20T19:01:23.427125Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_3R", + "fields": { + "iata": { + "nullValue": null + }, + "icao": { + "nullValue": null + }, + "name": { + "stringValue": "Moskovia Airlines" + }, + "isActive": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "memberCount": { + "integerValue": "0" + }, + "openRequestCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "logo": { + "mapValue": { + "fields": { + "type": { + "stringValue": "fallback" + }, + "path": { + "stringValue": "images/airline-logos/__fallback.png" + } + } + } + }, + "stCode": { + "stringValue": "st_3R" + }, + "fsCode": { + "stringValue": "3R" + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "b21824def407" + } + } + } + } + }, + "createTime": "2026-04-13T08:43:14.133370Z", + "updateTime": "2026-04-13T08:43:14.410116Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_3X", + "fields": { + "iata": { + "stringValue": "3X" + }, + "name": { + "stringValue": "Premier Trans Aire" + }, + "icao": { + "nullValue": null + }, + "logo": { + "mapValue": { + "fields": { + "path": { + "stringValue": "images/airline-logos/scraped/3Xx.png" + }, + "type": { + "stringValue": "scraped" + } + } + } + }, + "isActive": { + "booleanValue": true + }, + "memberCount": { + "integerValue": "0" + }, + "__index": { + "mapValue": { + "fields": { + "digests": { + "mapValue": { + "fields": { + "logo": { + "stringValue": "6aeff79a6f86ffd75b43432b56970eeb" + }, + "data": { + "stringValue": "2df58ec79584269761be75b5166fca7b" + } + } + } + }, + "isDirty": { + "booleanValue": false + } + } + } + }, + "fsCode": { + "stringValue": "3Xx" + }, + "stCode": { + "stringValue": "st_3X" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "f3beedeb62db" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:21.077976Z", + "updateTime": "2026-03-20T19:01:42.825576Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_4B_cd", + "fields": { + "iata": { + "stringValue": "4B" + }, + "icao": { + "nullValue": null + }, + "name": { + "stringValue": "Aviacompany Aviastar-Tu" + }, + "isActive": { + "booleanValue": true + }, + "memberCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "openRequestCount": { + "integerValue": "0" + }, + "logo": { + "mapValue": { + "fields": { + "type": { + "stringValue": "fallback" + }, + "path": { + "stringValue": "images/airline-logos/__fallback.png" + } + } + } + }, + "stCode": { + "stringValue": "st_4B_cd" + }, + "fsCode": { + "nullValue": null + }, + "isControlledDuplicate": { + "booleanValue": true + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "30f9aae119b0" + } + } + } + } + }, + "createTime": "2026-03-01T02:00:22.907372Z", + "updateTime": "2026-03-20T19:01:43.591068Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_4D", + "fields": { + "isActive": { + "booleanValue": true + }, + "__index": { + "mapValue": { + "fields": { + "digests": { + "mapValue": { + "fields": { + "logo": { + "stringValue": "f9b7589ff0d049776a89c8795c8b9586" + }, + "data": { + "stringValue": "10e92bba5dbf9d9ccf5fd08f7e9c1563" + } + } + } + }, + "isDirty": { + "booleanValue": false + } + } + } + }, + "fsCode": { + "stringValue": "4Dx" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "name": { + "stringValue": "Flyyo" + }, + "logo": { + "mapValue": { + "fields": { + "path": { + "stringValue": "images/airline-logos/__fallback.png" + }, + "type": { + "stringValue": "fallback" + } + } + } + }, + "alliance": { + "nullValue": null + }, + "memberCount": { + "integerValue": "1" + }, + "iata": { + "stringValue": "4D" + }, + "icao": { + "nullValue": null + }, + "stCode": { + "stringValue": "st_4D" + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "4a9dbd900f2a" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:21.101180Z", + "updateTime": "2026-04-20T07:00:44.959284Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_4H_2025", + "fields": { + "iata": { + "nullValue": null + }, + "icao": { + "nullValue": null + }, + "name": { + "stringValue": "United Airways (BD)" + }, + "isActive": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "memberCount": { + "integerValue": "37" + }, + "openRequestCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "logo": { + "mapValue": { + "fields": { + "type": { + "stringValue": "fallback" + }, + "path": { + "stringValue": "images/airline-logos/__fallback.png" + } + } + } + }, + "stCode": { + "stringValue": "st_4H_2025" + }, + "fsCode": { + "stringValue": "4H" + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "881824826a60" + } + } + } + } + }, + "createTime": "2026-03-22T17:19:42.086243Z", + "updateTime": "2026-03-22T17:19:42.464300Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_4R", + "fields": { + "iata": { + "stringValue": "4R" + }, + "memberCount": { + "integerValue": "0" + }, + "icao": { + "nullValue": null + }, + "isActive": { + "booleanValue": true + }, + "logo": { + "mapValue": { + "fields": { + "path": { + "stringValue": "images/airline-logos/scraped/4RR.png" + }, + "type": { + "stringValue": "scraped" + } + } + } + }, + "__index": { + "mapValue": { + "fields": { + "digests": { + "mapValue": { + "fields": { + "logo": { + "stringValue": "1004e6bc4536475ebd7e91108df6ecd1" + }, + "data": { + "stringValue": "015f94cd411acd967cf2a622996c9c3d" + } + } + } + }, + "isDirty": { + "booleanValue": false + } + } + } + }, + "fsCode": { + "stringValue": "4RR" + }, + "stCode": { + "stringValue": "st_4R" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "name": { + "stringValue": "Renfe" + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "f236c09e0514" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:21.065585Z", + "updateTime": "2026-03-20T19:01:39.364093Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_4R_2026", + "fields": { + "iata": { + "nullValue": null + }, + "icao": { + "nullValue": null + }, + "name": { + "stringValue": "HI Hamburg International" + }, + "isActive": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "memberCount": { + "integerValue": "0" + }, + "openRequestCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "logo": { + "mapValue": { + "fields": { + "type": { + "stringValue": "fallback" + }, + "path": { + "stringValue": "images/airline-logos/__fallback.png" + } + } + } + }, + "stCode": { + "stringValue": "st_4R_2026" + }, + "fsCode": { + "stringValue": "4R" + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "c7feef269c80" + } + } + } + } + }, + "createTime": "2026-04-13T09:09:21.147382Z", + "updateTime": "2026-04-13T09:09:21.762238Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_4R_cd", + "fields": { + "iata": { + "stringValue": "4R" + }, + "icao": { + "nullValue": null + }, + "name": { + "stringValue": "Star East Airline S.R.L." + }, + "isActive": { + "booleanValue": true + }, + "memberCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "openRequestCount": { + "integerValue": "0" + }, + "logo": { + "mapValue": { + "fields": { + "type": { + "stringValue": "fallback" + }, + "path": { + "stringValue": "images/airline-logos/__fallback.png" + } + } + } + }, + "stCode": { + "stringValue": "st_4R_cd" + }, + "fsCode": { + "nullValue": null + }, + "isControlledDuplicate": { + "booleanValue": true + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "42e07cfa18cc" + } + } + } + } + }, + "createTime": "2026-03-01T02:00:18.229645Z", + "updateTime": "2026-03-20T19:01:44.642940Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_4T", + "fields": { + "iata": { + "stringValue": "4T" + }, + "logo": { + "mapValue": { + "fields": { + "path": { + "stringValue": "images/airline-logos/scraped/WEW.png" + }, + "type": { + "stringValue": "scraped" + } + } + } + }, + "isActive": { + "booleanValue": true + }, + "name": { + "stringValue": "Rise Air" + }, + "__index": { + "mapValue": { + "fields": { + "digests": { + "mapValue": { + "fields": { + "logo": { + "stringValue": "78eca6f1ceec80dde25650b4bfb4fff7" + }, + "data": { + "stringValue": "7f970008b20e00d90e3442b4346ec940" + } + } + } + }, + "isDirty": { + "booleanValue": false + } + } + } + }, + "fsCode": { + "stringValue": "WEW" + }, + "stCode": { + "stringValue": "st_4T" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "icao": { + "nullValue": null + }, + "alliance": { + "nullValue": null + }, + "memberCount": { + "integerValue": "104" + }, + "openRequestCount": { + "integerValue": "0" + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "b60308121282" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:21.095620Z", + "updateTime": "2026-03-25T20:34:19.396572Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_4T_2025", + "fields": { + "iata": { + "nullValue": null + }, + "icao": { + "nullValue": null + }, + "name": { + "stringValue": "Belair Airlines" + }, + "isActive": { + "booleanValue": true + }, + "alliance": { + "nullValue": null + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "memberCount": { + "integerValue": "1" + }, + "openRequestCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "stCode": { + "stringValue": "st_4T_2025" + }, + "fsCode": { + "stringValue": "4T" + }, + "logo": { + "mapValue": { + "fields": { + "path": { + "stringValue": "images/airline-logos/custom/4T.png" + }, + "type": { + "stringValue": "custom" + } + } + } + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "08d2027d03eb" + } + } + } + } + }, + "createTime": "2026-03-22T17:19:45.095915Z", + "updateTime": "2026-03-30T07:30:20.369641Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_4X_cd", + "fields": { + "iata": { + "stringValue": "4X" + }, + "icao": { + "nullValue": null + }, + "name": { + "stringValue": "Mercury World Cargo" + }, + "isActive": { + "booleanValue": true + }, + "alliance": { + "nullValue": null + }, + "isControlledDuplicate": { + "booleanValue": true + }, + "memberCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "openRequestCount": { + "integerValue": "0" + }, + "logo": { + "mapValue": { + "fields": { + "type": { + "stringValue": "fallback" + }, + "path": { + "stringValue": "images/airline-logos/__fallback.png" + } + } + } + }, + "stCode": { + "stringValue": "st_4X_cd" + }, + "fsCode": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "9aa0f81f2e92" + } + } + } + } + }, + "createTime": "2026-03-27T08:37:40.304871Z", + "updateTime": "2026-03-27T08:37:40.392209Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_4Y_2025", + "fields": { + "iata": { + "nullValue": null + }, + "icao": { + "nullValue": null + }, + "name": { + "stringValue": "Yute Air Alaska" + }, + "isActive": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "memberCount": { + "integerValue": "3" + }, + "openRequestCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "logo": { + "mapValue": { + "fields": { + "type": { + "stringValue": "fallback" + }, + "path": { + "stringValue": "images/airline-logos/__fallback.png" + } + } + } + }, + "stCode": { + "stringValue": "st_4Y_2025" + }, + "fsCode": { + "stringValue": "4Y" + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "6186e4a92ce9" + } + } + } + } + }, + "createTime": "2026-03-22T17:19:47.114295Z", + "updateTime": "2026-03-22T17:19:47.441899Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_4Y_cd", + "fields": { + "iata": { + "stringValue": "4Y" + }, + "icao": { + "nullValue": null + }, + "name": { + "stringValue": "Airbus Beluga Transport" + }, + "isActive": { + "booleanValue": true + }, + "memberCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "openRequestCount": { + "integerValue": "0" + }, + "logo": { + "mapValue": { + "fields": { + "type": { + "stringValue": "fallback" + }, + "path": { + "stringValue": "images/airline-logos/__fallback.png" + } + } + } + }, + "stCode": { + "stringValue": "st_4Y_cd" + }, + "fsCode": { + "nullValue": null + }, + "isControlledDuplicate": { + "booleanValue": true + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "911e52e693fb" + } + } + } + } + }, + "createTime": "2026-03-01T02:00:21.566920Z", + "updateTime": "2026-03-20T19:01:25.142886Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_5G", + "fields": { + "iata": { + "nullValue": null + }, + "icao": { + "nullValue": null + }, + "name": { + "stringValue": "Skyservice Airlines" + }, + "isActive": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "memberCount": { + "integerValue": "0" + }, + "openRequestCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "logo": { + "mapValue": { + "fields": { + "type": { + "stringValue": "fallback" + }, + "path": { + "stringValue": "images/airline-logos/__fallback.png" + } + } + } + }, + "stCode": { + "stringValue": "st_5G" + }, + "fsCode": { + "stringValue": "5G" + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "0c8f45eff955" + } + } + } + } + }, + "createTime": "2026-04-13T08:43:12.954262Z", + "updateTime": "2026-04-13T08:43:13.391954Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_5I", + "fields": { + "iata": { + "stringValue": "5I" + }, + "memberCount": { + "integerValue": "0" + }, + "icao": { + "nullValue": null + }, + "isActive": { + "booleanValue": true + }, + "logo": { + "mapValue": { + "fields": { + "path": { + "stringValue": "images/airline-logos/scraped/5Ix.png" + }, + "type": { + "stringValue": "scraped" + } + } + } + }, + "__index": { + "mapValue": { + "fields": { + "digests": { + "mapValue": { + "fields": { + "data": { + "stringValue": "2dd20f4da386eb921ee599ee09f6ae9f" + }, + "logo": { + "stringValue": "6aeaab0c32b2a5299c412e5e385ed434" + } + } + } + }, + "isDirty": { + "booleanValue": false + } + } + } + }, + "fsCode": { + "stringValue": "5Ix" + }, + "stCode": { + "stringValue": "st_5I" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "name": { + "stringValue": "Alsa Grupo Slu" + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "7bcba2167d9f" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:21.128024Z", + "updateTime": "2026-03-20T19:01:43.240587Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_5K", + "fields": { + "iata": { + "nullValue": null + }, + "icao": { + "nullValue": null + }, + "name": { + "stringValue": "Odessa Airlines" + }, + "isActive": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "memberCount": { + "integerValue": "0" + }, + "openRequestCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "logo": { + "mapValue": { + "fields": { + "type": { + "stringValue": "fallback" + }, + "path": { + "stringValue": "images/airline-logos/__fallback.png" + } + } + } + }, + "stCode": { + "stringValue": "st_5K" + }, + "fsCode": { + "stringValue": "5K" + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "d84d0ce93603" + } + } + } + } + }, + "createTime": "2026-04-13T08:43:12.050238Z", + "updateTime": "2026-04-13T08:43:12.443204Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_5M_cd", + "fields": { + "iata": { + "stringValue": "5M" + }, + "icao": { + "nullValue": null + }, + "name": { + "stringValue": "Mel Air" + }, + "isActive": { + "booleanValue": true + }, + "memberCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "openRequestCount": { + "integerValue": "0" + }, + "logo": { + "mapValue": { + "fields": { + "type": { + "stringValue": "fallback" + }, + "path": { + "stringValue": "images/airline-logos/__fallback.png" + } + } + } + }, + "stCode": { + "stringValue": "st_5M_cd" + }, + "fsCode": { + "nullValue": null + }, + "isControlledDuplicate": { + "booleanValue": true + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "7e0117722b53" + } + } + } + } + }, + "createTime": "2026-03-01T02:00:29.630016Z", + "updateTime": "2026-03-20T19:01:43.596621Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_5W", + "fields": { + "iata": { + "nullValue": null + }, + "icao": { + "nullValue": null + }, + "name": { + "stringValue": "Iceland Express" + }, + "isActive": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "memberCount": { + "integerValue": "0" + }, + "openRequestCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "logo": { + "mapValue": { + "fields": { + "type": { + "stringValue": "fallback" + }, + "path": { + "stringValue": "images/airline-logos/__fallback.png" + } + } + } + }, + "stCode": { + "stringValue": "st_5W" + }, + "fsCode": { + "stringValue": "5W" + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "908b772baa9a" + } + } + } + } + }, + "createTime": "2026-04-13T08:43:12.519206Z", + "updateTime": "2026-04-13T08:43:12.905613Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_6F", + "fields": { + "iata": { + "stringValue": "6F" + }, + "memberCount": { + "integerValue": "0" + }, + "icao": { + "nullValue": null + }, + "isActive": { + "booleanValue": true + }, + "logo": { + "mapValue": { + "fields": { + "path": { + "stringValue": "images/airline-logos/scraped/6FA.png" + }, + "type": { + "stringValue": "scraped" + } + } + } + }, + "__index": { + "mapValue": { + "fields": { + "digests": { + "mapValue": { + "fields": { + "data": { + "stringValue": "8fa64566da2faab93c31664888042897" + }, + "logo": { + "stringValue": "dc6b049387e64abe178873ca71af5803" + } + } + } + }, + "isDirty": { + "booleanValue": false + } + } + } + }, + "fsCode": { + "stringValue": "6FA" + }, + "stCode": { + "stringValue": "st_6F" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "name": { + "stringValue": "Fox Air" + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "b6f9a6574276" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:21.343884Z", + "updateTime": "2026-03-20T19:01:42.174606Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_6G_cd", + "fields": { + "iata": { + "stringValue": "6G" + }, + "icao": { + "nullValue": null + }, + "name": { + "stringValue": "Go2sky, Spol S R.O." + }, + "isActive": { + "booleanValue": true + }, + "alliance": { + "nullValue": null + }, + "isControlledDuplicate": { + "booleanValue": true + }, + "memberCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "openRequestCount": { + "integerValue": "0" + }, + "logo": { + "mapValue": { + "fields": { + "type": { + "stringValue": "fallback" + }, + "path": { + "stringValue": "images/airline-logos/__fallback.png" + } + } + } + }, + "stCode": { + "stringValue": "st_6G_cd" + }, + "fsCode": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "149d66795309" + } + } + } + } + }, + "createTime": "2026-03-27T08:37:41.259051Z", + "updateTime": "2026-03-27T08:37:41.435564Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_6I_2025", + "fields": { + "iata": { + "nullValue": null + }, + "icao": { + "nullValue": null + }, + "name": { + "stringValue": "Aviast Air" + }, + "isActive": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "memberCount": { + "integerValue": "4" + }, + "openRequestCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "logo": { + "mapValue": { + "fields": { + "type": { + "stringValue": "fallback" + }, + "path": { + "stringValue": "images/airline-logos/__fallback.png" + } + } + } + }, + "stCode": { + "stringValue": "st_6I_2025" + }, + "fsCode": { + "stringValue": "6I" + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "169f030461b6" + } + } + } + } + }, + "createTime": "2026-03-22T17:19:41.016900Z", + "updateTime": "2026-03-22T17:19:41.382856Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_6Q_2025", + "fields": { + "iata": { + "nullValue": null + }, + "icao": { + "nullValue": null + }, + "name": { + "stringValue": "Cham Wings Airlines" + }, + "isActive": { + "booleanValue": true + }, + "alliance": { + "nullValue": null + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "memberCount": { + "integerValue": "1" + }, + "openRequestCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "logo": { + "mapValue": { + "fields": { + "type": { + "stringValue": "fallback" + }, + "path": { + "stringValue": "images/airline-logos/__fallback.png" + } + } + } + }, + "stCode": { + "stringValue": "st_6Q_2025" + }, + "fsCode": { + "stringValue": "6Q" + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "499c03c5e47c" + } + } + } + } + }, + "createTime": "2026-03-22T17:19:44.103676Z", + "updateTime": "2026-03-22T17:19:44.404830Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_6TX", + "fields": { + "iata": { + "nullValue": null + }, + "icao": { + "nullValue": null + }, + "name": { + "stringValue": "Almaty Aviation" + }, + "isActive": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "memberCount": { + "integerValue": "0" + }, + "openRequestCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "logo": { + "mapValue": { + "fields": { + "type": { + "stringValue": "fallback" + }, + "path": { + "stringValue": "images/airline-logos/__fallback.png" + } + } + } + }, + "stCode": { + "stringValue": "st_6TX" + }, + "fsCode": { + "stringValue": "6Tx" + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "87da7c0233f5" + } + } + } + } + }, + "createTime": "2026-04-13T08:43:15.084035Z", + "updateTime": "2026-04-13T08:43:15.368174Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_6U_2025", + "fields": { + "iata": { + "nullValue": null + }, + "icao": { + "nullValue": null + }, + "name": { + "stringValue": "ACG" + }, + "isActive": { + "booleanValue": true + }, + "alliance": { + "nullValue": null + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "memberCount": { + "integerValue": "1" + }, + "openRequestCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "logo": { + "mapValue": { + "fields": { + "type": { + "stringValue": "fallback" + }, + "path": { + "stringValue": "images/airline-logos/__fallback.png" + } + } + } + }, + "stCode": { + "stringValue": "st_6U_2025" + }, + "fsCode": { + "stringValue": "6U" + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "de9f5cc901f4" + } + } + } + } + }, + "createTime": "2026-03-22T17:19:53.719957Z", + "updateTime": "2026-03-22T17:19:54.051633Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_7A", + "fields": { + "iata": { + "nullValue": null + }, + "icao": { + "nullValue": null + }, + "name": { + "stringValue": "Air Next" + }, + "isActive": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "memberCount": { + "integerValue": "0" + }, + "openRequestCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "logo": { + "mapValue": { + "fields": { + "type": { + "stringValue": "fallback" + }, + "path": { + "stringValue": "images/airline-logos/__fallback.png" + } + } + } + }, + "stCode": { + "stringValue": "st_7A" + }, + "fsCode": { + "stringValue": "7A" + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "1783088fcef8" + } + } + } + } + }, + "createTime": "2026-04-13T08:43:12.375682Z", + "updateTime": "2026-04-13T08:43:12.658301Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_7F_2025", + "fields": { + "iata": { + "nullValue": null + }, + "icao": { + "nullValue": null + }, + "name": { + "stringValue": "First Air" + }, + "isActive": { + "booleanValue": true + }, + "alliance": { + "nullValue": null + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "memberCount": { + "integerValue": "38" + }, + "openRequestCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "logo": { + "mapValue": { + "fields": { + "type": { + "stringValue": "fallback" + }, + "path": { + "stringValue": "images/airline-logos/__fallback.png" + } + } + } + }, + "stCode": { + "stringValue": "st_7F_2025" + }, + "fsCode": { + "stringValue": "7F" + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "4d2f50dd6b07" + } + } + } + } + }, + "createTime": "2026-03-22T17:19:41.403864Z", + "updateTime": "2026-03-22T17:19:41.761932Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_7K", + "fields": { + "iata": { + "stringValue": "7K" + }, + "icao": { + "nullValue": null + }, + "isActive": { + "booleanValue": true + }, + "memberCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "openRequestCount": { + "integerValue": "0" + }, + "logo": { + "mapValue": { + "fields": { + "path": { + "stringValue": "images/airline-logos/scraped/72K.png" + }, + "type": { + "stringValue": "scraped" + } + } + } + }, + "fsCode": { + "stringValue": "72K" + }, + "stCode": { + "stringValue": "st_7K" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "name": { + "stringValue": "HK Airport Direct" + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "7365566e1d02" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:21.323764Z", + "updateTime": "2026-04-20T07:00:44.680150Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_7T", + "fields": { + "iata": { + "stringValue": "7T" + }, + "memberCount": { + "integerValue": "0" + }, + "name": { + "stringValue": "Trenitalia" + }, + "icao": { + "nullValue": null + }, + "isActive": { + "booleanValue": true + }, + "logo": { + "mapValue": { + "fields": { + "path": { + "stringValue": "images/airline-logos/scraped/7TR.png" + }, + "type": { + "stringValue": "scraped" + } + } + } + }, + "__index": { + "mapValue": { + "fields": { + "digests": { + "mapValue": { + "fields": { + "data": { + "stringValue": "ab9614190b49c87d6476420f2cdd14c0" + }, + "logo": { + "stringValue": "accf4029994b00ce8db1d54d8bfb9dc1" + } + } + } + }, + "isDirty": { + "booleanValue": false + } + } + } + }, + "fsCode": { + "stringValue": "7TR" + }, + "stCode": { + "stringValue": "st_7T" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "1fc5d84e9fd7" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:21.355973Z", + "updateTime": "2026-03-20T19:01:42.838960Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_7T_2026", + "fields": { + "iata": { + "nullValue": null + }, + "icao": { + "nullValue": null + }, + "name": { + "stringValue": "Trans North Aviation" + }, + "isActive": { + "booleanValue": true + }, + "alliance": { + "nullValue": null + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "memberCount": { + "integerValue": "0" + }, + "openRequestCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "logo": { + "mapValue": { + "fields": { + "type": { + "stringValue": "fallback" + }, + "path": { + "stringValue": "images/airline-logos/__fallback.png" + } + } + } + }, + "stCode": { + "stringValue": "st_7T_2026" + }, + "fsCode": { + "stringValue": "7T" + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "400e09aae7b5" + } + } + } + } + }, + "createTime": "2026-04-13T09:09:21.461750Z", + "updateTime": "2026-04-13T09:09:21.854889Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_7U", + "fields": { + "iata": { + "stringValue": "7U" + }, + "name": { + "stringValue": "Commercial Aviation Services" + }, + "icao": { + "nullValue": null + }, + "logo": { + "mapValue": { + "fields": { + "path": { + "stringValue": "images/airline-logos/scraped/7Ux.png" + }, + "type": { + "stringValue": "scraped" + } + } + } + }, + "isActive": { + "booleanValue": true + }, + "memberCount": { + "integerValue": "0" + }, + "__index": { + "mapValue": { + "fields": { + "digests": { + "mapValue": { + "fields": { + "logo": { + "stringValue": "77e0c65a9971ee74b061c00e87e838f7" + }, + "data": { + "stringValue": "c090cdb122ed2f116c51fe1509a27dce" + } + } + } + }, + "isDirty": { + "booleanValue": false + } + } + } + }, + "fsCode": { + "stringValue": "7Ux" + }, + "stCode": { + "stringValue": "st_7U" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "d96b3491813c" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:21.388509Z", + "updateTime": "2026-03-20T19:01:43.044337Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_7Z_cd", + "fields": { + "iata": { + "stringValue": "7Z" + }, + "icao": { + "nullValue": null + }, + "name": { + "stringValue": "Ameristar Air Cargo" + }, + "isActive": { + "booleanValue": true + }, + "alliance": { + "nullValue": null + }, + "isControlledDuplicate": { + "booleanValue": true + }, + "memberCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "openRequestCount": { + "integerValue": "0" + }, + "logo": { + "mapValue": { + "fields": { + "type": { + "stringValue": "fallback" + }, + "path": { + "stringValue": "images/airline-logos/__fallback.png" + } + } + } + }, + "stCode": { + "stringValue": "st_7Z_cd" + }, + "fsCode": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "ddd69bc688f9" + } + } + } + } + }, + "createTime": "2026-03-27T08:37:41.247960Z", + "updateTime": "2026-03-27T08:37:41.404428Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_8A", + "fields": { + "iata": { + "stringValue": "8A" + }, + "name": { + "stringValue": "Panama Airways" + }, + "icao": { + "nullValue": null + }, + "logo": { + "mapValue": { + "fields": { + "path": { + "stringValue": "images/airline-logos/scraped/8Ax.png" + }, + "type": { + "stringValue": "scraped" + } + } + } + }, + "isActive": { + "booleanValue": true + }, + "memberCount": { + "integerValue": "0" + }, + "__index": { + "mapValue": { + "fields": { + "digests": { + "mapValue": { + "fields": { + "logo": { + "stringValue": "209ac8c662dd97ff5d8022c27cafc30b" + }, + "data": { + "stringValue": "e15e67e8a78f62503249c36bb9d45843" + } + } + } + }, + "isDirty": { + "booleanValue": false + } + } + } + }, + "fsCode": { + "stringValue": "8Ax" + }, + "stCode": { + "stringValue": "st_8A" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "cee56e0e1a85" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:21.388411Z", + "updateTime": "2026-03-20T19:01:42.516513Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_8A_2025", + "fields": { + "iata": { + "nullValue": null + }, + "icao": { + "nullValue": null + }, + "name": { + "stringValue": "Atlas Blue" + }, + "isActive": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "memberCount": { + "integerValue": "1" + }, + "openRequestCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "logo": { + "mapValue": { + "fields": { + "type": { + "stringValue": "fallback" + }, + "path": { + "stringValue": "images/airline-logos/__fallback.png" + } + } + } + }, + "stCode": { + "stringValue": "st_8A_2025" + }, + "fsCode": { + "stringValue": "8A" + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "314cb053934d" + } + } + } + } + }, + "createTime": "2026-03-22T17:19:55.654235Z", + "updateTime": "2026-03-22T17:19:55.977229Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_8C_2025", + "fields": { + "iata": { + "nullValue": null + }, + "icao": { + "nullValue": null + }, + "name": { + "stringValue": "Air Horizon" + }, + "isActive": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "memberCount": { + "integerValue": "9" + }, + "openRequestCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "logo": { + "mapValue": { + "fields": { + "type": { + "stringValue": "fallback" + }, + "path": { + "stringValue": "images/airline-logos/__fallback.png" + } + } + } + }, + "stCode": { + "stringValue": "st_8C_2025" + }, + "fsCode": { + "stringValue": "8C" + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "fa8ffc5ba6ea" + } + } + } + } + }, + "createTime": "2026-03-22T17:19:40.835680Z", + "updateTime": "2026-03-22T17:19:41.195670Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_8G", + "fields": { + "iata": { + "stringValue": "8G" + }, + "memberCount": { + "integerValue": "0" + }, + "icao": { + "nullValue": null + }, + "isActive": { + "booleanValue": true + }, + "logo": { + "mapValue": { + "fields": { + "path": { + "stringValue": "images/airline-logos/scraped/8Gx.png" + }, + "type": { + "stringValue": "scraped" + } + } + } + }, + "name": { + "stringValue": "Aero Dili" + }, + "__index": { + "mapValue": { + "fields": { + "digests": { + "mapValue": { + "fields": { + "logo": { + "stringValue": "b0f1eda86cc679a1f56a8c5ca5b207a6" + }, + "data": { + "stringValue": "5df9ee23d39a99f46716d9c82396e874" + } + } + } + }, + "isDirty": { + "booleanValue": false + } + } + } + }, + "fsCode": { + "stringValue": "8Gx" + }, + "stCode": { + "stringValue": "st_8G" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "openRequestCount": { + "integerValue": "0" + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "b1f55c50826b" + } + } + } + } + }, + "createTime": "2026-04-01T02:20:27.877128Z", + "updateTime": "2026-04-12T18:31:11.596524Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_8K_2025", + "fields": { + "iata": { + "nullValue": null + }, + "icao": { + "nullValue": null + }, + "name": { + "stringValue": "EVAS Air Charters" + }, + "isActive": { + "booleanValue": true + }, + "alliance": { + "nullValue": null + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "memberCount": { + "integerValue": "1" + }, + "openRequestCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "logo": { + "mapValue": { + "fields": { + "type": { + "stringValue": "fallback" + }, + "path": { + "stringValue": "images/airline-logos/__fallback.png" + } + } + } + }, + "stCode": { + "stringValue": "st_8K_2025" + }, + "fsCode": { + "stringValue": "8K" + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "604fe55b35dd" + } + } + } + } + }, + "createTime": "2026-03-22T17:19:54.747426Z", + "updateTime": "2026-03-22T17:19:54.980818Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_8S", + "fields": { + "name": { + "stringValue": "Turbojet" + }, + "icao": { + "nullValue": null + }, + "isActive": { + "booleanValue": true + }, + "memberCount": { + "integerValue": "0" + }, + "__index": { + "mapValue": { + "fields": { + "digests": { + "mapValue": { + "fields": { + "logo": { + "stringValue": "ff769b889dcea64a983f482054cef455" + }, + "data": { + "stringValue": "5b1e4e5baf053eb37131cf7fa0ecd3af" + } + } + } + }, + "isDirty": { + "booleanValue": false + } + } + } + }, + "iata": { + "stringValue": "8S" + }, + "logo": { + "mapValue": { + "fields": { + "path": { + "stringValue": "images/airline-logos/scraped/8S.png" + }, + "type": { + "stringValue": "scraped" + } + } + } + }, + "fsCode": { + "stringValue": "8S" + }, + "stCode": { + "stringValue": "st_8S" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "7ad0f0fb766b" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:21.369526Z", + "updateTime": "2026-03-20T19:01:42.368552Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_8Z", + "fields": { + "isActive": { + "booleanValue": true + }, + "memberCount": { + "integerValue": "1" + }, + "__index": { + "mapValue": { + "fields": { + "digests": { + "mapValue": { + "fields": { + "logo": { + "stringValue": "a7ed281fe3a3d129b2505000294b2859" + }, + "data": { + "stringValue": "cab56c802f4912d6b24a3ae5cf4d784f" + } + } + } + }, + "isDirty": { + "booleanValue": false + } + } + } + }, + "fsCode": { + "stringValue": "8Zx" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "logo": { + "mapValue": { + "fields": { + "path": { + "stringValue": "images/airline-logos/__fallback.png" + }, + "type": { + "stringValue": "fallback" + } + } + } + }, + "iata": { + "stringValue": "8Z" + }, + "alliance": { + "nullValue": null + }, + "name": { + "stringValue": "Congo Airways" + }, + "icao": { + "nullValue": null + }, + "stCode": { + "stringValue": "st_8Z" + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "e7381f831ef2" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:21.375515Z", + "updateTime": "2026-03-20T19:01:42.626388Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_8Z_2025", + "fields": { + "iata": { + "nullValue": null + }, + "icao": { + "nullValue": null + }, + "name": { + "stringValue": "Wizz Air Bulgaria" + }, + "isActive": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "memberCount": { + "integerValue": "1" + }, + "openRequestCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "logo": { + "mapValue": { + "fields": { + "type": { + "stringValue": "fallback" + }, + "path": { + "stringValue": "images/airline-logos/__fallback.png" + } + } + } + }, + "stCode": { + "stringValue": "st_8Z_2025" + }, + "fsCode": { + "stringValue": "8Z" + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "361959b43f6c" + } + } + } + } + }, + "createTime": "2026-03-22T17:19:55.169194Z", + "updateTime": "2026-03-22T17:19:55.483568Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_9B", + "fields": { + "iata": { + "stringValue": "9B" + }, + "icao": { + "nullValue": null + }, + "logo": { + "mapValue": { + "fields": { + "path": { + "stringValue": "images/airline-logos/scraped/9B.png" + }, + "type": { + "stringValue": "scraped" + } + } + } + }, + "isActive": { + "booleanValue": true + }, + "__index": { + "mapValue": { + "fields": { + "digests": { + "mapValue": { + "fields": { + "logo": { + "stringValue": "0046f1a4305e941a8219735768000f0b" + }, + "data": { + "stringValue": "21910b1a0cb0bbfa34cdb1ed1d92cbc5" + } + } + } + }, + "isDirty": { + "booleanValue": false + } + } + } + }, + "memberCount": { + "integerValue": "1" + }, + "fsCode": { + "stringValue": "9B" + }, + "stCode": { + "stringValue": "st_9B" + }, + "openRequestCount": { + "integerValue": "0" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "name": { + "stringValue": "Accesrail" + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "b545b51ca02f" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:21.372530Z", + "updateTime": "2026-03-20T19:01:42.524939Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_9F", + "fields": { + "iata": { + "stringValue": "9F" + }, + "icao": { + "nullValue": null + }, + "logo": { + "mapValue": { + "fields": { + "path": { + "stringValue": "images/airline-logos/scraped/9F.png" + }, + "type": { + "stringValue": "scraped" + } + } + } + }, + "isActive": { + "booleanValue": true + }, + "__index": { + "mapValue": { + "fields": { + "digests": { + "mapValue": { + "fields": { + "logo": { + "stringValue": "1b3c09ef6cfc68183ae98c640193bae4" + }, + "data": { + "stringValue": "7844fcf41970ddaa97a09e9c7df5a4a6" + } + } + } + }, + "isDirty": { + "booleanValue": false + } + } + } + }, + "memberCount": { + "integerValue": "1" + }, + "fsCode": { + "stringValue": "9F" + }, + "stCode": { + "stringValue": "st_9F" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "name": { + "stringValue": "Eurostar International" + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "b1292a8cc777" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:21.303724Z", + "updateTime": "2026-03-20T19:01:38.654919Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_9T_2025", + "fields": { + "iata": { + "nullValue": null + }, + "icao": { + "nullValue": null + }, + "name": { + "stringValue": "Transwest Air" + }, + "isActive": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "memberCount": { + "integerValue": "16" + }, + "openRequestCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "logo": { + "mapValue": { + "fields": { + "type": { + "stringValue": "fallback" + }, + "path": { + "stringValue": "images/airline-logos/__fallback.png" + } + } + } + }, + "stCode": { + "stringValue": "st_9T_2025" + }, + "fsCode": { + "stringValue": "9T" + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "24a76a9c7564" + } + } + } + } + }, + "createTime": "2026-03-22T17:19:38.550513Z", + "updateTime": "2026-03-22T17:19:38.931677Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_9X_2025", + "fields": { + "iata": { + "nullValue": null + }, + "icao": { + "nullValue": null + }, + "name": { + "stringValue": "New Axis Airways" + }, + "isActive": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "memberCount": { + "integerValue": "8" + }, + "openRequestCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "logo": { + "mapValue": { + "fields": { + "type": { + "stringValue": "fallback" + }, + "path": { + "stringValue": "images/airline-logos/__fallback.png" + } + } + } + }, + "stCode": { + "stringValue": "st_9X_2025" + }, + "fsCode": { + "stringValue": "9X" + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "63eec3d8b535" + } + } + } + } + }, + "createTime": "2026-03-22T17:19:45.010558Z", + "updateTime": "2026-03-22T17:19:45.334331Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_9Y", + "fields": { + "iata": { + "nullValue": null + }, + "icao": { + "nullValue": null + }, + "name": { + "stringValue": "Air Kazakstan" + }, + "isActive": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "memberCount": { + "integerValue": "0" + }, + "openRequestCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "logo": { + "mapValue": { + "fields": { + "type": { + "stringValue": "fallback" + }, + "path": { + "stringValue": "images/airline-logos/__fallback.png" + } + } + } + }, + "stCode": { + "stringValue": "st_9Y" + }, + "fsCode": { + "stringValue": "9Y" + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "947983ca7dcc" + } + } + } + } + }, + "createTime": "2026-04-13T08:43:16.843372Z", + "updateTime": "2026-04-13T08:43:17.254918Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_A0_2025", + "fields": { + "iata": { + "nullValue": null + }, + "icao": { + "nullValue": null + }, + "name": { + "stringValue": "L'Avion" + }, + "isActive": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "memberCount": { + "integerValue": "1" + }, + "openRequestCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "logo": { + "mapValue": { + "fields": { + "type": { + "stringValue": "fallback" + }, + "path": { + "stringValue": "images/airline-logos/__fallback.png" + } + } + } + }, + "stCode": { + "stringValue": "st_A0_2025" + }, + "fsCode": { + "stringValue": "A0" + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "2f6cd6e54104" + } + } + } + } + }, + "createTime": "2026-03-22T17:19:40.738201Z", + "updateTime": "2026-03-22T17:19:41.144102Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_A1", + "fields": { + "iata": { + "stringValue": "A1" + }, + "icao": { + "nullValue": null + }, + "isActive": { + "booleanValue": true + }, + "memberCount": { + "integerValue": "0" + }, + "openRequestCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "stCode": { + "stringValue": "st_A1" + }, + "fsCode": { + "nullValue": null + }, + "name": { + "stringValue": "A.P.G. Distribution Systems" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "logo": { + "mapValue": { + "fields": { + "path": { + "stringValue": "images/airline-logos/scraped/A1.png" + }, + "type": { + "stringValue": "scraped" + } + } + } + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "b5f99739df50" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:21.237465Z", + "updateTime": "2026-03-27T08:37:41.378105Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_A4_cd", + "fields": { + "iata": { + "stringValue": "A4" + }, + "icao": { + "nullValue": null + }, + "name": { + "stringValue": "Aerosucre S.A." + }, + "isActive": { + "booleanValue": true + }, + "memberCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "openRequestCount": { + "integerValue": "0" + }, + "logo": { + "mapValue": { + "fields": { + "type": { + "stringValue": "fallback" + }, + "path": { + "stringValue": "images/airline-logos/__fallback.png" + } + } + } + }, + "stCode": { + "stringValue": "st_A4_cd" + }, + "fsCode": { + "nullValue": null + }, + "isControlledDuplicate": { + "booleanValue": true + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "8ab77b75d373" + } + } + } + } + }, + "createTime": "2026-03-01T02:00:40.321562Z", + "updateTime": "2026-03-20T19:01:22.861155Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_A5_2025", + "fields": { + "iata": { + "nullValue": null + }, + "icao": { + "nullValue": null + }, + "name": { + "stringValue": "HOP!-AIRLINAIR" + }, + "isActive": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "memberCount": { + "integerValue": "3" + }, + "openRequestCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "logo": { + "mapValue": { + "fields": { + "type": { + "stringValue": "fallback" + }, + "path": { + "stringValue": "images/airline-logos/__fallback.png" + } + } + } + }, + "stCode": { + "stringValue": "st_A5_2025" + }, + "fsCode": { + "stringValue": "A5" + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "de4b4b9cdf8a" + } + } + } + } + }, + "createTime": "2026-03-22T17:19:51.911081Z", + "updateTime": "2026-03-22T17:19:52.234763Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_A8", + "fields": { + "iata": { + "nullValue": null + }, + "icao": { + "nullValue": null + }, + "name": { + "stringValue": "Benin Golf Air" + }, + "isActive": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "memberCount": { + "integerValue": "0" + }, + "openRequestCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "logo": { + "mapValue": { + "fields": { + "type": { + "stringValue": "fallback" + }, + "path": { + "stringValue": "images/airline-logos/__fallback.png" + } + } + } + }, + "stCode": { + "stringValue": "st_A8" + }, + "fsCode": { + "stringValue": "A8" + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "50aa2526eb23" + } + } + } + } + }, + "createTime": "2026-04-13T08:43:10.275251Z", + "updateTime": "2026-04-13T08:43:10.647944Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_AAA", + "fields": { + "iata": { + "nullValue": null + }, + "icao": { + "stringValue": "AAA" + }, + "isActive": { + "booleanValue": true + }, + "logo": { + "mapValue": { + "fields": { + "type": { + "stringValue": "fallback" + }, + "path": { + "stringValue": "images/airline-logos/__fallback.png" + } + } + } + }, + "memberCount": { + "integerValue": "0" + }, + "openRequestCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "stCode": { + "stringValue": "st_AAA" + }, + "fsCode": { + "nullValue": null + }, + "name": { + "stringValue": "Avicon Aviation Consultants & Agents" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "b8edbca0269c" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:23.877124Z", + "updateTime": "2026-03-20T19:01:41.759524Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_AAB", + "fields": { + "iata": { + "nullValue": null + }, + "icao": { + "stringValue": "AAB" + }, + "logo": { + "mapValue": { + "fields": { + "path": { + "stringValue": "images/airline-logos/__fallback.png" + }, + "type": { + "stringValue": "fallback" + } + } + } + }, + "isActive": { + "booleanValue": true + }, + "memberCount": { + "integerValue": "0" + }, + "__index": { + "mapValue": { + "fields": { + "digests": { + "mapValue": { + "fields": { + "logo": { + "stringValue": "eaeecef837cbd2fd38d881bfe837cb7a" + }, + "data": { + "stringValue": "89ecd014bd0c53951b355974af7dd591" + } + } + } + }, + "isDirty": { + "booleanValue": false + } + } + } + }, + "fsCode": { + "stringValue": "AAB" + }, + "stCode": { + "stringValue": "st_AAB" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "name": { + "stringValue": "Abelag Aviation" + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "578e071fefe8" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:23.988593Z", + "updateTime": "2026-03-20T19:01:37.852062Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_AAC", + "fields": { + "iata": { + "nullValue": null + }, + "memberCount": { + "integerValue": "0" + }, + "name": { + "stringValue": "Army Air Corps" + }, + "icao": { + "stringValue": "AAC" + }, + "isActive": { + "booleanValue": true + }, + "logo": { + "mapValue": { + "fields": { + "path": { + "stringValue": "images/airline-logos/__fallback.png" + }, + "type": { + "stringValue": "fallback" + } + } + } + }, + "__index": { + "mapValue": { + "fields": { + "digests": { + "mapValue": { + "fields": { + "data": { + "stringValue": "74e70a9f843ffbeb7941e6f0f1b9bbdd" + }, + "logo": { + "stringValue": "eaeecef837cbd2fd38d881bfe837cb7a" + } + } + } + }, + "isDirty": { + "booleanValue": false + } + } + } + }, + "fsCode": { + "stringValue": "AAC" + }, + "stCode": { + "stringValue": "st_AAC" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "5aff86626a9a" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:23.968314Z", + "updateTime": "2026-03-20T19:01:38.845748Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_AAD", + "fields": { + "iata": { + "stringValue": "FE" + }, + "icao": { + "stringValue": "AAD" + }, + "isActive": { + "booleanValue": true + }, + "memberCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "openRequestCount": { + "integerValue": "0" + }, + "logo": { + "mapValue": { + "fields": { + "path": { + "stringValue": "images/airline-logos/scraped/AAD.png" + }, + "type": { + "stringValue": "scraped" + } + } + } + }, + "fsCode": { + "stringValue": "AAD" + }, + "stCode": { + "stringValue": "st_AAD" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "name": { + "stringValue": "Arrendamientos Aereos" + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "db03cce216ad" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:21.020438Z", + "updateTime": "2026-03-20T19:01:42.537288Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_AAE", + "fields": { + "memberCount": { + "integerValue": "0" + }, + "name": { + "stringValue": "Air Atlanta Europe" + }, + "icao": { + "stringValue": "AAE" + }, + "isActive": { + "booleanValue": true + }, + "iata": { + "stringValue": "CT" + }, + "logo": { + "mapValue": { + "fields": { + "type": { + "stringValue": "scraped" + }, + "path": { + "stringValue": "images/airline-logos/scraped/AAE.png" + } + } + } + }, + "__index": { + "mapValue": { + "fields": { + "digests": { + "mapValue": { + "fields": { + "logo": { + "stringValue": "78e74a5b7c10994e904f70aa8d5f3e26" + }, + "data": { + "stringValue": "eabf62971cfd5e1186d1364e544e40bd" + } + } + } + }, + "isDirty": { + "booleanValue": false + } + } + } + }, + "fsCode": { + "stringValue": "AAE" + }, + "stCode": { + "stringValue": "st_AAE" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "1e56025589e6" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:21.212757Z", + "updateTime": "2026-03-20T19:01:40.436136Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_AAF", + "fields": { + "isActive": { + "booleanValue": true + }, + "iata": { + "nullValue": null + }, + "name": { + "stringValue": "Aigle Azur" + }, + "icao": { + "stringValue": "AAF" + }, + "logo": { + "mapValue": { + "fields": { + "type": { + "stringValue": "fallback" + }, + "path": { + "stringValue": "images/airline-logos/__fallback.png" + } + } + } + }, + "__index": { + "mapValue": { + "fields": { + "digests": { + "mapValue": { + "fields": { + "logo": { + "stringValue": "eaeecef837cbd2fd38d881bfe837cb7a" + }, + "data": { + "stringValue": "70b4e56f6d3676ec5114b13d1bda4c1e" + } + } + } + }, + "isDirty": { + "booleanValue": false + } + } + } + }, + "fsCode": { + "stringValue": "ZI" + }, + "stCode": { + "stringValue": "st_AAF" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "memberCount": { + "integerValue": "22" + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "f5d148dfa92a" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:23.967136Z", + "updateTime": "2026-03-22T10:26:11.954427Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_AAG", + "fields": { + "memberCount": { + "integerValue": "0" + }, + "name": { + "stringValue": "Armenian Airlines" + }, + "icao": { + "stringValue": "AAG" + }, + "isActive": { + "booleanValue": true + }, + "__index": { + "mapValue": { + "fields": { + "digests": { + "mapValue": { + "fields": { + "data": { + "stringValue": "511bf0bdc6985307cf929ce328dc4f75" + }, + "logo": { + "stringValue": "958bfaf4a2326290694ec6f6dad42acc" + } + } + } + }, + "isDirty": { + "booleanValue": false + } + } + } + }, + "fsCode": { + "stringValue": "J2I" + }, + "stCode": { + "stringValue": "st_AAG" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "iata": { + "stringValue": "JI" + }, + "logo": { + "mapValue": { + "fields": { + "path": { + "stringValue": "images/airline-logos/scraped/J2I.png" + }, + "type": { + "stringValue": "scraped" + } + } + } + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "a0e6a6d16dfc" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:23.987731Z", + "updateTime": "2026-04-20T07:33:52.432470Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_AAH", + "fields": { + "iata": { + "stringValue": "KH" + }, + "name": { + "stringValue": "Aloha Air Cargo" + }, + "icao": { + "stringValue": "AAH" + }, + "logo": { + "mapValue": { + "fields": { + "path": { + "stringValue": "images/airline-logos/scraped/KH.png" + }, + "type": { + "stringValue": "scraped" + } + } + } + }, + "isActive": { + "booleanValue": true + }, + "__index": { + "mapValue": { + "fields": { + "digests": { + "mapValue": { + "fields": { + "logo": { + "stringValue": "1e5aae2ae6db800c2b96baf0b3577955" + }, + "data": { + "stringValue": "5665159caabbc4472fb785b8dab66b6b" + } + } + } + }, + "isDirty": { + "booleanValue": false + } + } + } + }, + "fsCode": { + "stringValue": "KH" + }, + "stCode": { + "stringValue": "st_AAH" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "memberCount": { + "integerValue": "30" + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "f3b1dc37c9a2" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:22.140276Z", + "updateTime": "2026-03-22T10:26:09.957645Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_AAI", + "fields": { + "iata": { + "nullValue": null + }, + "name": { + "stringValue": "Air Aurora" + }, + "icao": { + "stringValue": "AAI" + }, + "logo": { + "mapValue": { + "fields": { + "path": { + "stringValue": "images/airline-logos/__fallback.png" + }, + "type": { + "stringValue": "fallback" + } + } + } + }, + "isActive": { + "booleanValue": true + }, + "__index": { + "mapValue": { + "fields": { + "digests": { + "mapValue": { + "fields": { + "logo": { + "stringValue": "eaeecef837cbd2fd38d881bfe837cb7a" + }, + "data": { + "stringValue": "920bb7cb71ee93975cfdf61a11f8d46b" + } + } + } + }, + "isDirty": { + "booleanValue": false + } + } + } + }, + "memberCount": { + "integerValue": "2" + }, + "fsCode": { + "stringValue": "AAI" + }, + "stCode": { + "stringValue": "st_AAI" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "b63b8dfb382c" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:24.008147Z", + "updateTime": "2026-03-20T19:01:42.465521Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_AAJ", + "fields": { + "memberCount": { + "integerValue": "0" + }, + "icao": { + "stringValue": "AAJ" + }, + "isActive": { + "booleanValue": true + }, + "iata": { + "nullValue": null + }, + "logo": { + "mapValue": { + "fields": { + "path": { + "stringValue": "images/airline-logos/__fallback.png" + }, + "type": { + "stringValue": "fallback" + } + } + } + }, + "__index": { + "mapValue": { + "fields": { + "digests": { + "mapValue": { + "fields": { + "data": { + "stringValue": "fc1cf5a6bf80f9978aba6a7d6b369f6d" + }, + "logo": { + "stringValue": "eaeecef837cbd2fd38d881bfe837cb7a" + } + } + } + }, + "isDirty": { + "booleanValue": false + } + } + } + }, + "fsCode": { + "stringValue": "AAJ" + }, + "stCode": { + "stringValue": "st_AAJ" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "name": { + "stringValue": "Alfa Airlines SD" + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "d6581a07c319" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:23.987790Z", + "updateTime": "2026-03-20T19:01:38.251381Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_AAK", + "fields": { + "iata": { + "nullValue": null + }, + "icao": { + "stringValue": "AAK" + }, + "isActive": { + "booleanValue": true + }, + "logo": { + "mapValue": { + "fields": { + "type": { + "stringValue": "fallback" + }, + "path": { + "stringValue": "images/airline-logos/__fallback.png" + } + } + } + }, + "memberCount": { + "integerValue": "0" + }, + "openRequestCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "stCode": { + "stringValue": "st_AAK" + }, + "fsCode": { + "nullValue": null + }, + "name": { + "stringValue": "Alaska Island Air (Anchorage, Ak)" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "2c61530dfed7" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:24.031165Z", + "updateTime": "2026-03-20T19:01:41.574968Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_AAL", + "fields": { + "iata": { + "stringValue": "AA" + }, + "name": { + "stringValue": "American Airlines" + }, + "icao": { + "stringValue": "AAL" + }, + "logo": { + "mapValue": { + "fields": { + "path": { + "stringValue": "images/airline-logos/scraped/AA.png" + }, + "type": { + "stringValue": "scraped" + } + } + } + }, + "isActive": { + "booleanValue": true + }, + "__index": { + "mapValue": { + "fields": { + "digests": { + "mapValue": { + "fields": { + "logo": { + "stringValue": "aa03fda9b422b551b423106c9e91b5ef" + }, + "data": { + "stringValue": "204f806807226bdad617fcc0356a89e4" + } + } + } + }, + "isDirty": { + "booleanValue": false + } + } + } + }, + "hasNotes": { + "booleanValue": true + }, + "fsCode": { + "stringValue": "AA" + }, + "stCode": { + "stringValue": "st_AAL" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "alliance": { + "stringValue": "oneworld" + }, + "memberCount": { + "integerValue": "82091" + }, + "openRequestCount": { + "integerValue": "62" + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "de9cb4302c09" + } + } + } + } + }, + "createTime": "2026-01-29T14:55:56.048403Z", + "updateTime": "2026-04-22T21:02:57.514409Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_AAM", + "fields": { + "iata": { + "nullValue": null + }, + "icao": { + "stringValue": "AAM" + }, + "isActive": { + "booleanValue": true + }, + "logo": { + "mapValue": { + "fields": { + "type": { + "stringValue": "fallback" + }, + "path": { + "stringValue": "images/airline-logos/__fallback.png" + } + } + } + }, + "memberCount": { + "integerValue": "0" + }, + "openRequestCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "stCode": { + "stringValue": "st_AAM" + }, + "fsCode": { + "nullValue": null + }, + "name": { + "stringValue": "Aim Air" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "75e639bb71cb" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:24.007709Z", + "updateTime": "2026-03-20T19:01:41.466569Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_AAN", + "fields": { + "iata": { + "nullValue": null + }, + "icao": { + "stringValue": "AAN" + }, + "isActive": { + "booleanValue": true + }, + "logo": { + "mapValue": { + "fields": { + "type": { + "stringValue": "fallback" + }, + "path": { + "stringValue": "images/airline-logos/__fallback.png" + } + } + } + }, + "memberCount": { + "integerValue": "0" + }, + "openRequestCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "stCode": { + "stringValue": "st_AAN" + }, + "fsCode": { + "nullValue": null + }, + "name": { + "stringValue": "Ctr Atmospherica Aviation A.S." + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "429f9008062d" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:23.980669Z", + "updateTime": "2026-03-20T19:01:41.748216Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_AAO", + "fields": { + "iata": { + "nullValue": null + }, + "icao": { + "stringValue": "AAO" + }, + "isActive": { + "booleanValue": true + }, + "logo": { + "mapValue": { + "fields": { + "type": { + "stringValue": "fallback" + }, + "path": { + "stringValue": "images/airline-logos/__fallback.png" + } + } + } + }, + "memberCount": { + "integerValue": "0" + }, + "openRequestCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "stCode": { + "stringValue": "st_AAO" + }, + "fsCode": { + "nullValue": null + }, + "name": { + "stringValue": "Alpha Aviation S.R.O." + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "7b0e61674059" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:23.967036Z", + "updateTime": "2026-03-20T19:01:42.115639Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_AAP", + "fields": { + "iata": { + "nullValue": null + }, + "icao": { + "stringValue": "AAP" + }, + "isActive": { + "booleanValue": true + }, + "logo": { + "mapValue": { + "fields": { + "type": { + "stringValue": "fallback" + }, + "path": { + "stringValue": "images/airline-logos/__fallback.png" + } + } + } + }, + "memberCount": { + "integerValue": "0" + }, + "openRequestCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "stCode": { + "stringValue": "st_AAP" + }, + "fsCode": { + "nullValue": null + }, + "name": { + "stringValue": "Arabasco Air Services" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "11b6f1f611ae" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:23.968672Z", + "updateTime": "2026-03-20T19:01:41.446788Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_AAQ", + "fields": { + "iata": { + "nullValue": null + }, + "icao": { + "stringValue": "AAQ" + }, + "name": { + "stringValue": "AirThailand" + }, + "isActive": { + "booleanValue": true + }, + "alliance": { + "nullValue": null + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "memberCount": { + "integerValue": "0" + }, + "openRequestCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "logo": { + "mapValue": { + "fields": { + "type": { + "stringValue": "fallback" + }, + "path": { + "stringValue": "images/airline-logos/__fallback.png" + } + } + } + }, + "stCode": { + "stringValue": "st_AAQ" + }, + "fsCode": { + "stringValue": "HBx" + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "cd9cf8fc2ad7" + } + } + } + } + }, + "createTime": "2026-03-27T16:46:00.847328Z", + "updateTime": "2026-03-27T16:46:01.226465Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_AAR", + "fields": { + "iata": { + "stringValue": "OZ" + }, + "name": { + "stringValue": "Asiana Airlines" + }, + "icao": { + "stringValue": "AAR" + }, + "logo": { + "mapValue": { + "fields": { + "path": { + "stringValue": "images/airline-logos/scraped/OZ.png" + }, + "type": { + "stringValue": "scraped" + } + } + } + }, + "isActive": { + "booleanValue": true + }, + "__index": { + "mapValue": { + "fields": { + "digests": { + "mapValue": { + "fields": { + "logo": { + "stringValue": "a989e0171c49cdbbdb54761d75f7758e" + }, + "data": { + "stringValue": "5f62b5d1d511cdf07f8188ee2a2d0d06" + } + } + } + }, + "isDirty": { + "booleanValue": false + } + } + } + }, + "hasNotes": { + "booleanValue": true + }, + "fsCode": { + "stringValue": "OZ" + }, + "stCode": { + "stringValue": "st_AAR" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "alliance": { + "stringValue": "star-alliance" + }, + "memberCount": { + "integerValue": "3244" + }, + "openRequestCount": { + "integerValue": "111" + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "fd61d4c2c995" + } + } + } + } + }, + "createTime": "2026-01-29T14:56:51.282627Z", + "updateTime": "2026-04-22T20:47:02.235381Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_AAS", + "fields": { + "iata": { + "nullValue": null + }, + "icao": { + "stringValue": "AAS" + }, + "isActive": { + "booleanValue": true + }, + "logo": { + "mapValue": { + "fields": { + "type": { + "stringValue": "fallback" + }, + "path": { + "stringValue": "images/airline-logos/__fallback.png" + } + } + } + }, + "memberCount": { + "integerValue": "0" + }, + "openRequestCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "stCode": { + "stringValue": "st_AAS" + }, + "fsCode": { + "nullValue": null + }, + "name": { + "stringValue": "Askari Aviation" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "770da93fd504" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:24.014864Z", + "updateTime": "2026-03-20T19:01:27.366992Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_AAT", + "fields": { + "iata": { + "nullValue": null + }, + "memberCount": { + "integerValue": "0" + }, + "icao": { + "stringValue": "AAT" + }, + "isActive": { + "booleanValue": true + }, + "logo": { + "mapValue": { + "fields": { + "path": { + "stringValue": "images/airline-logos/__fallback.png" + }, + "type": { + "stringValue": "fallback" + } + } + } + }, + "__index": { + "mapValue": { + "fields": { + "digests": { + "mapValue": { + "fields": { + "data": { + "stringValue": "0b2fc6198e8bf25e7f0aaf87c517bd7c" + }, + "logo": { + "stringValue": "eaeecef837cbd2fd38d881bfe837cb7a" + } + } + } + }, + "isDirty": { + "booleanValue": false + } + } + } + }, + "fsCode": { + "stringValue": "A2T" + }, + "stCode": { + "stringValue": "st_AAT" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "name": { + "stringValue": "Africa Airlines (Congo)" + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "f151e9492405" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:24.006274Z", + "updateTime": "2026-03-20T19:01:43.741705Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_AAT_2025", + "fields": { + "iata": { + "nullValue": null + }, + "icao": { + "nullValue": null + }, + "name": { + "stringValue": "Austrian Air Transport" + }, + "isActive": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "memberCount": { + "integerValue": "5" + }, + "openRequestCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "logo": { + "mapValue": { + "fields": { + "type": { + "stringValue": "fallback" + }, + "path": { + "stringValue": "images/airline-logos/__fallback.png" + } + } + } + }, + "stCode": { + "stringValue": "st_AAT_2025" + }, + "fsCode": { + "stringValue": "AAT" + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "73f704d39bae" + } + } + } + } + }, + "createTime": "2026-03-22T17:19:47.870830Z", + "updateTime": "2026-03-22T17:19:48.201084Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_AAU", + "fields": { + "iata": { + "nullValue": null + }, + "icao": { + "stringValue": "AAU" + }, + "isActive": { + "booleanValue": true + }, + "logo": { + "mapValue": { + "fields": { + "type": { + "stringValue": "fallback" + }, + "path": { + "stringValue": "images/airline-logos/__fallback.png" + } + } + } + }, + "memberCount": { + "integerValue": "0" + }, + "openRequestCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "stCode": { + "stringValue": "st_AAU" + }, + "fsCode": { + "nullValue": null + }, + "name": { + "stringValue": "Aeropa S.R.L." + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "3034c477283c" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:23.985905Z", + "updateTime": "2026-03-20T19:01:26.558134Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_AAW", + "fields": { + "name": { + "stringValue": "Afriqiyah Airways" + }, + "icao": { + "stringValue": "AAW" + }, + "isActive": { + "booleanValue": true + }, + "memberCount": { + "integerValue": "1" + }, + "__index": { + "mapValue": { + "fields": { + "digests": { + "mapValue": { + "fields": { + "logo": { + "stringValue": "529a9f7167877e21e659658cb3eb9b68" + }, + "data": { + "stringValue": "24ff65737b511cde49f22abc3a09f7d0" + } + } + } + }, + "isDirty": { + "booleanValue": false + } + } + } + }, + "fsCode": { + "stringValue": "8U" + }, + "stCode": { + "stringValue": "st_AAW" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "iata": { + "nullValue": null + }, + "logo": { + "mapValue": { + "fields": { + "path": { + "stringValue": "images/airline-logos/__fallback.png" + }, + "type": { + "stringValue": "fallback" + } + } + } + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "550d0bb529f6" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:21.373381Z", + "updateTime": "2026-04-20T07:33:35.092450Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_AAX", + "fields": { + "iata": { + "nullValue": null + }, + "memberCount": { + "integerValue": "0" + }, + "icao": { + "stringValue": "AAX" + }, + "isActive": { + "booleanValue": true + }, + "logo": { + "mapValue": { + "fields": { + "path": { + "stringValue": "images/airline-logos/__fallback.png" + }, + "type": { + "stringValue": "fallback" + } + } + } + }, + "__index": { + "mapValue": { + "fields": { + "digests": { + "mapValue": { + "fields": { + "logo": { + "stringValue": "eaeecef837cbd2fd38d881bfe837cb7a" + }, + "data": { + "stringValue": "0622b135c288490bd7f8f451194d55fc" + } + } + } + }, + "isDirty": { + "booleanValue": false + } + } + } + }, + "fsCode": { + "stringValue": "AAX" + }, + "stCode": { + "stringValue": "st_AAX" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "name": { + "stringValue": "Advance Aviation" + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "db5d914406dd" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:24.014124Z", + "updateTime": "2026-03-20T19:01:33.049698Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_AAY", + "fields": { + "iata": { + "stringValue": "G4" + }, + "name": { + "stringValue": "Allegiant Air" + }, + "icao": { + "stringValue": "AAY" + }, + "isActive": { + "booleanValue": true + }, + "logo": { + "mapValue": { + "fields": { + "path": { + "stringValue": "images/airline-logos/custom/G4.png" + }, + "type": { + "stringValue": "custom" + } + } + } + }, + "__index": { + "mapValue": { + "fields": { + "digests": { + "mapValue": { + "fields": { + "data": { + "stringValue": "7da5e8240d3e2ff433f3240df8dac2b5" + }, + "logo": { + "stringValue": "c0113e0ec9b1eff2e9cbe9722bd87d61" + } + } + } + }, + "isDirty": { + "booleanValue": false + } + } + } + }, + "hasNotes": { + "booleanValue": true + }, + "fsCode": { + "stringValue": "G4" + }, + "stCode": { + "stringValue": "st_AAY" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "memberCount": { + "integerValue": "6851" + }, + "openRequestCount": { + "integerValue": "-2" + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "ed3b69543b35" + } + } + } + } + }, + "createTime": "2026-01-29T15:09:51.843753Z", + "updateTime": "2026-04-22T21:00:24.094612Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_AAZ", + "fields": { + "iata": { + "nullValue": null + }, + "name": { + "stringValue": "Aeolus Air" + }, + "icao": { + "stringValue": "AAZ" + }, + "logo": { + "mapValue": { + "fields": { + "path": { + "stringValue": "images/airline-logos/__fallback.png" + }, + "type": { + "stringValue": "fallback" + } + } + } + }, + "isActive": { + "booleanValue": true + }, + "memberCount": { + "integerValue": "0" + }, + "__index": { + "mapValue": { + "fields": { + "digests": { + "mapValue": { + "fields": { + "logo": { + "stringValue": "eaeecef837cbd2fd38d881bfe837cb7a" + }, + "data": { + "stringValue": "ca6243e190bb2b526cd09fbad7c41b26" + } + } + } + }, + "isDirty": { + "booleanValue": false + } + } + } + }, + "fsCode": { + "stringValue": "AAZ" + }, + "stCode": { + "stringValue": "st_AAZ" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "b2c367788a2b" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:24.001815Z", + "updateTime": "2026-03-20T19:01:32.908826Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_ABA", + "fields": { + "iata": { + "nullValue": null + }, + "memberCount": { + "integerValue": "0" + }, + "icao": { + "stringValue": "ABA" + }, + "isActive": { + "booleanValue": true + }, + "logo": { + "mapValue": { + "fields": { + "path": { + "stringValue": "images/airline-logos/__fallback.png" + }, + "type": { + "stringValue": "fallback" + } + } + } + }, + "__index": { + "mapValue": { + "fields": { + "digests": { + "mapValue": { + "fields": { + "data": { + "stringValue": "1d8469b9b967d71135f79b5e4855fff3" + }, + "logo": { + "stringValue": "eaeecef837cbd2fd38d881bfe837cb7a" + } + } + } + }, + "isDirty": { + "booleanValue": false + } + } + } + }, + "fsCode": { + "stringValue": "ABA" + }, + "stCode": { + "stringValue": "st_ABA" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "name": { + "stringValue": "Aero-Beta., Stuttgart" + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "4f7d35e4bcd8" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:24.033830Z", + "updateTime": "2026-03-20T19:01:37.663197Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_ABB", + "fields": { + "name": { + "stringValue": "Air Belgium" + }, + "icao": { + "stringValue": "ABB" + }, + "isActive": { + "booleanValue": true + }, + "__index": { + "mapValue": { + "fields": { + "digests": { + "mapValue": { + "fields": { + "logo": { + "stringValue": "3a434566faf1638a1b3262cdc0b10127" + }, + "data": { + "stringValue": "863562888a5f84ed4964355b2e04c8c7" + } + } + } + }, + "isDirty": { + "booleanValue": false + } + } + } + }, + "iata": { + "stringValue": "CB" + }, + "logo": { + "mapValue": { + "fields": { + "path": { + "stringValue": "images/airline-logos/scraped/ABB.png" + }, + "type": { + "stringValue": "scraped" + } + } + } + }, + "fsCode": { + "stringValue": "ABB" + }, + "stCode": { + "stringValue": "st_ABB" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "memberCount": { + "integerValue": "17" + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "d21619dc5cb9" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:21.291028Z", + "updateTime": "2026-03-22T10:25:55.805736Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_ABD", + "fields": { + "iata": { + "stringValue": "CC" + }, + "icao": { + "stringValue": "ABD" + }, + "logo": { + "mapValue": { + "fields": { + "path": { + "stringValue": "images/airline-logos/scraped/CC.png" + }, + "type": { + "stringValue": "scraped" + } + } + } + }, + "isActive": { + "booleanValue": true + }, + "__index": { + "mapValue": { + "fields": { + "digests": { + "mapValue": { + "fields": { + "logo": { + "stringValue": "8f43dbc066fa98f33a919e8d7365f8f2" + }, + "data": { + "stringValue": "682f89bc3f4141a2208592433c1778f7" + } + } + } + }, + "isDirty": { + "booleanValue": false + } + } + } + }, + "fsCode": { + "stringValue": "CC" + }, + "stCode": { + "stringValue": "st_ABD" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "name": { + "stringValue": "Air Atlanta" + }, + "alliance": { + "nullValue": null + }, + "memberCount": { + "integerValue": "51" + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "7aa4c824f328" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:21.329608Z", + "updateTime": "2026-04-11T20:22:30.453038Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_ABE", + "fields": { + "iata": { + "nullValue": null + }, + "name": { + "stringValue": "Aban Air" + }, + "icao": { + "stringValue": "ABE" + }, + "logo": { + "mapValue": { + "fields": { + "type": { + "stringValue": "fallback" + }, + "path": { + "stringValue": "images/airline-logos/__fallback.png" + } + } + } + }, + "__index": { + "mapValue": { + "fields": { + "digests": { + "mapValue": { + "fields": { + "logo": { + "stringValue": "eaeecef837cbd2fd38d881bfe837cb7a" + }, + "data": { + "stringValue": "b28be4b15db842968c6621f0d47d02c5" + } + } + } + }, + "isDirty": { + "booleanValue": false + } + } + } + }, + "fsCode": { + "stringValue": "K5x" + }, + "stCode": { + "stringValue": "st_ABE" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "isActive": { + "booleanValue": true + }, + "alliance": { + "nullValue": null + }, + "memberCount": { + "integerValue": "0" + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "4df0c47621b7" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:24.007097Z", + "updateTime": "2026-03-22T10:26:07.844631Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_ABF", + "fields": { + "iata": { + "nullValue": null + }, + "memberCount": { + "integerValue": "0" + }, + "icao": { + "stringValue": "ABF" + }, + "isActive": { + "booleanValue": true + }, + "logo": { + "mapValue": { + "fields": { + "path": { + "stringValue": "images/airline-logos/__fallback.png" + }, + "type": { + "stringValue": "fallback" + } + } + } + }, + "__index": { + "mapValue": { + "fields": { + "digests": { + "mapValue": { + "fields": { + "data": { + "stringValue": "8ad07bf797826c02ee63cd19e4b83df4" + }, + "logo": { + "stringValue": "eaeecef837cbd2fd38d881bfe837cb7a" + } + } + } + }, + "isDirty": { + "booleanValue": false + } + } + } + }, + "fsCode": { + "stringValue": "ABF" + }, + "stCode": { + "stringValue": "st_ABF" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "name": { + "stringValue": "Scanwings, Finland" + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "7fdf99315605" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:24.021154Z", + "updateTime": "2026-03-20T19:01:38.635073Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_ABG", + "fields": { + "icao": { + "stringValue": "ABG" + }, + "isActive": { + "booleanValue": true + }, + "iata": { + "nullValue": null + }, + "logo": { + "mapValue": { + "fields": { + "path": { + "stringValue": "images/airline-logos/__fallback.png" + }, + "type": { + "stringValue": "fallback" + } + } + } + }, + "name": { + "stringValue": "Royal Flight" + }, + "__index": { + "mapValue": { + "fields": { + "digests": { + "mapValue": { + "fields": { + "logo": { + "stringValue": "eaeecef837cbd2fd38d881bfe837cb7a" + }, + "data": { + "stringValue": "781c6224a0eb85e7ac84fc0efdbe3657" + } + } + } + }, + "isDirty": { + "booleanValue": false + } + } + } + }, + "fsCode": { + "stringValue": "4Rx" + }, + "stCode": { + "stringValue": "st_ABG" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "memberCount": { + "integerValue": "0" + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "9b4f0befa76b" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:24.009003Z", + "updateTime": "2026-03-22T10:25:53.694488Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_ABH", + "fields": { + "iata": { + "nullValue": null + }, + "icao": { + "stringValue": "ABH" + }, + "isActive": { + "booleanValue": true + }, + "logo": { + "mapValue": { + "fields": { + "type": { + "stringValue": "fallback" + }, + "path": { + "stringValue": "images/airline-logos/__fallback.png" + } + } + } + }, + "memberCount": { + "integerValue": "0" + }, + "openRequestCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "stCode": { + "stringValue": "st_ABH" + }, + "fsCode": { + "nullValue": null + }, + "name": { + "stringValue": "Hokuriku-Koukuu" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "3712628ad93e" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:24.001906Z", + "updateTime": "2026-03-20T19:01:42.527248Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_ABI", + "fields": { + "iata": { + "nullValue": null + }, + "icao": { + "stringValue": "ABI" + }, + "isActive": { + "booleanValue": true + }, + "logo": { + "mapValue": { + "fields": { + "type": { + "stringValue": "fallback" + }, + "path": { + "stringValue": "images/airline-logos/__fallback.png" + } + } + } + }, + "memberCount": { + "integerValue": "0" + }, + "openRequestCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "stCode": { + "stringValue": "st_ABI" + }, + "fsCode": { + "nullValue": null + }, + "name": { + "stringValue": "Alba-Air Aviacion, S.L." + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "02b0f1039d1c" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:24.018314Z", + "updateTime": "2026-03-20T19:01:41.699043Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_ABJ", + "fields": { + "iata": { + "stringValue": "E4" + }, + "memberCount": { + "integerValue": "0" + }, + "icao": { + "stringValue": "ABJ" + }, + "isActive": { + "booleanValue": true + }, + "logo": { + "mapValue": { + "fields": { + "path": { + "stringValue": "images/airline-logos/scraped/ABJ.png" + }, + "type": { + "stringValue": "scraped" + } + } + } + }, + "__index": { + "mapValue": { + "fields": { + "digests": { + "mapValue": { + "fields": { + "data": { + "stringValue": "6e294e452cfbf63434f31f280e80fb48" + }, + "logo": { + "stringValue": "2047fea67de01b6d376099659664f045" + } + } + } + }, + "isDirty": { + "booleanValue": false + } + } + } + }, + "fsCode": { + "stringValue": "ABJ" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "name": { + "stringValue": "Abaet\u00e9 Avia\u00e7\u00e3o" + }, + "alliance": { + "nullValue": null + }, + "stCode": { + "stringValue": "st_ABJ" + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "76c24ac54099" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:21.315303Z", + "updateTime": "2026-03-20T19:01:42.030375Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_ABK", + "fields": { + "iata": { + "nullValue": null + }, + "name": { + "stringValue": "Airbus Canada" + }, + "icao": { + "stringValue": "ABK" + }, + "isActive": { + "booleanValue": true + }, + "logo": { + "mapValue": { + "fields": { + "path": { + "stringValue": "images/airline-logos/__fallback.png" + }, + "type": { + "stringValue": "fallback" + } + } + } + }, + "__index": { + "mapValue": { + "fields": { + "digests": { + "mapValue": { + "fields": { + "data": { + "stringValue": "f30be8ef735f7736df9be8504fd8c6b0" + }, + "logo": { + "stringValue": "eaeecef837cbd2fd38d881bfe837cb7a" + } + } + } + }, + "isDirty": { + "booleanValue": false + } + } + } + }, + "memberCount": { + "integerValue": "2" + }, + "fsCode": { + "stringValue": "ABK" + }, + "stCode": { + "stringValue": "st_ABK" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "f77684649831" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:24.045765Z", + "updateTime": "2026-03-20T19:01:38.046087Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_ABL", + "fields": { + "iata": { + "stringValue": "BX" + }, + "name": { + "stringValue": "Air Busan" + }, + "icao": { + "stringValue": "ABL" + }, + "logo": { + "mapValue": { + "fields": { + "path": { + "stringValue": "images/airline-logos/scraped/BX.png" + }, + "type": { + "stringValue": "scraped" + } + } + } + }, + "isActive": { + "booleanValue": true + }, + "__index": { + "mapValue": { + "fields": { + "digests": { + "mapValue": { + "fields": { + "logo": { + "stringValue": "7a2a649070bb0bfaeda9d9747ed9029b" + }, + "data": { + "stringValue": "21a859965bcee2386fbb946b4f72654a" + } + } + } + }, + "isDirty": { + "booleanValue": false + } + } + } + }, + "fsCode": { + "stringValue": "BX" + }, + "stCode": { + "stringValue": "st_ABL" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "memberCount": { + "integerValue": "137" + }, + "openRequestCount": { + "integerValue": "1" + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "a9e53ed1c5c1" + } + } + } + } + }, + "createTime": "2026-01-29T15:09:43.245760Z", + "updateTime": "2026-04-22T11:41:15.447239Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_ABM", + "fields": { + "iata": { + "nullValue": null + }, + "icao": { + "stringValue": "ABM" + }, + "isActive": { + "booleanValue": true + }, + "logo": { + "mapValue": { + "fields": { + "type": { + "stringValue": "fallback" + }, + "path": { + "stringValue": "images/airline-logos/__fallback.png" + } + } + } + }, + "memberCount": { + "integerValue": "0" + }, + "openRequestCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "stCode": { + "stringValue": "st_ABM" + }, + "fsCode": { + "nullValue": null + }, + "name": { + "stringValue": "Aero Albatros" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "251d6506b7d6" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:24.036905Z", + "updateTime": "2026-03-20T19:01:41.174151Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_ABN", + "fields": { + "iata": { + "stringValue": "ZB" + }, + "name": { + "stringValue": "Air Albania" + }, + "icao": { + "stringValue": "ABN" + }, + "logo": { + "mapValue": { + "fields": { + "path": { + "stringValue": "images/airline-logos/scraped/ZBx.png" + }, + "type": { + "stringValue": "scraped" + } + } + } + }, + "isActive": { + "booleanValue": true + }, + "__index": { + "mapValue": { + "fields": { + "digests": { + "mapValue": { + "fields": { + "logo": { + "stringValue": "a68118a65fdcf99617c771b372920111" + }, + "data": { + "stringValue": "02d9215902372a3daacaaffd38daa91e" + } + } + } + }, + "isDirty": { + "booleanValue": false + } + } + } + }, + "memberCount": { + "integerValue": "4" + }, + "fsCode": { + "stringValue": "ZBx" + }, + "stCode": { + "stringValue": "st_ABN" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "openRequestCount": { + "integerValue": "0" + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "f1b57d3d1d46" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:24.036270Z", + "updateTime": "2026-03-05T08:51:03.908380Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_ABO", + "fields": { + "iata": { + "nullValue": null + }, + "icao": { + "stringValue": "ABO" + }, + "isActive": { + "booleanValue": true + }, + "logo": { + "mapValue": { + "fields": { + "type": { + "stringValue": "fallback" + }, + "path": { + "stringValue": "images/airline-logos/__fallback.png" + } + } + } + }, + "memberCount": { + "integerValue": "0" + }, + "openRequestCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "stCode": { + "stringValue": "st_ABO" + }, + "fsCode": { + "nullValue": null + }, + "name": { + "stringValue": "Aeroexpreso Bogota" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "de97ee061eae" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:24.013438Z", + "updateTime": "2026-03-20T19:01:36.600756Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_ABP", + "fields": { + "iata": { + "nullValue": null + }, + "memberCount": { + "integerValue": "0" + }, + "icao": { + "stringValue": "ABP" + }, + "isActive": { + "booleanValue": true + }, + "logo": { + "mapValue": { + "fields": { + "path": { + "stringValue": "images/airline-logos/__fallback.png" + }, + "type": { + "stringValue": "fallback" + } + } + } + }, + "__index": { + "mapValue": { + "fields": { + "digests": { + "mapValue": { + "fields": { + "data": { + "stringValue": "4a74bd94a6005457ed7ce46980eac586" + }, + "logo": { + "stringValue": "eaeecef837cbd2fd38d881bfe837cb7a" + } + } + } + }, + "isDirty": { + "booleanValue": false + } + } + } + }, + "fsCode": { + "stringValue": "ABP" + }, + "stCode": { + "stringValue": "st_ABP" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "name": { + "stringValue": "Abs Jets" + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "3cafafb2581f" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:24.014083Z", + "updateTime": "2026-03-20T19:01:43.562273Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_ABQ", + "fields": { + "icao": { + "stringValue": "ABQ" + }, + "isActive": { + "booleanValue": true + }, + "iata": { + "stringValue": "PA" + }, + "logo": { + "mapValue": { + "fields": { + "path": { + "stringValue": "images/airline-logos/scraped/ABQ.png" + }, + "type": { + "stringValue": "scraped" + } + } + } + }, + "__index": { + "mapValue": { + "fields": { + "digests": { + "mapValue": { + "fields": { + "data": { + "stringValue": "04b8e5a4bde163b1a4369fc304a6eed4" + }, + "logo": { + "stringValue": "85663eb40b1de7b253b32660728dcb52" + } + } + } + }, + "isDirty": { + "booleanValue": false + } + } + } + }, + "memberCount": { + "integerValue": "5" + }, + "fsCode": { + "stringValue": "ABQ" + }, + "stCode": { + "stringValue": "st_ABQ" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "name": { + "stringValue": "airblue" + }, + "alliance": { + "nullValue": null + }, + "openRequestCount": { + "integerValue": "0" + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "a38d7f07e9ac" + } + } + } + } + }, + "createTime": "2026-01-29T16:05:23.005541Z", + "updateTime": "2026-04-07T13:34:38.811156Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_ABR", + "fields": { + "icao": { + "stringValue": "ABR" + }, + "isActive": { + "booleanValue": true + }, + "iata": { + "stringValue": "5H" + }, + "logo": { + "mapValue": { + "fields": { + "path": { + "stringValue": "images/airline-logos/scraped/AG.png" + }, + "type": { + "stringValue": "scraped" + } + } + } + }, + "__index": { + "mapValue": { + "fields": { + "digests": { + "mapValue": { + "fields": { + "data": { + "stringValue": "456c9f83aa954ad72f13d19aec7f2fe8" + }, + "logo": { + "stringValue": "3ce4470f43a56359e51964e9e3a2f18e" + } + } + } + }, + "isDirty": { + "booleanValue": false + } + } + } + }, + "fsCode": { + "stringValue": "AG" + }, + "stCode": { + "stringValue": "st_ABR" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "name": { + "stringValue": "Air Contractors" + }, + "alliance": { + "nullValue": null + }, + "memberCount": { + "integerValue": "93" + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "5c013b570b47" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:21.107029Z", + "updateTime": "2026-03-22T10:25:56.434071Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_ABS", + "fields": { + "iata": { + "stringValue": "J7" + }, + "icao": { + "stringValue": "ABS" + }, + "logo": { + "mapValue": { + "fields": { + "path": { + "stringValue": "images/airline-logos/scraped/J7x.png" + }, + "type": { + "stringValue": "scraped" + } + } + } + }, + "isActive": { + "booleanValue": true + }, + "memberCount": { + "integerValue": "0" + }, + "__index": { + "mapValue": { + "fields": { + "digests": { + "mapValue": { + "fields": { + "logo": { + "stringValue": "cd17bad994d29ed99c548f7a74c3dadb" + }, + "data": { + "stringValue": "edffa844fcf840e0b73626ecb496fc8d" + } + } + } + }, + "isDirty": { + "booleanValue": false + } + } + } + }, + "fsCode": { + "stringValue": "J7x" + }, + "stCode": { + "stringValue": "st_ABS" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "name": { + "stringValue": "FlyGabon" + }, + "alliance": { + "nullValue": null + }, + "openRequestCount": { + "integerValue": "0" + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "a6902ad257c3" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:22.004726Z", + "updateTime": "2026-03-29T06:30:20.014126Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_ABT", + "fields": { + "icao": { + "stringValue": "ABT" + }, + "isActive": { + "booleanValue": true + }, + "memberCount": { + "integerValue": "0" + }, + "__index": { + "mapValue": { + "fields": { + "digests": { + "mapValue": { + "fields": { + "data": { + "stringValue": "8a764c2a9491be097e6c474002a011e0" + }, + "logo": { + "stringValue": "6567714d4ede713f885881f816dc506d" + } + } + } + }, + "isDirty": { + "booleanValue": false + } + } + } + }, + "fsCode": { + "stringValue": "ABT" + }, + "stCode": { + "stringValue": "st_ABT" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "iata": { + "stringValue": "PL" + }, + "logo": { + "mapValue": { + "fields": { + "path": { + "stringValue": "images/airline-logos/scraped/ABT.png" + }, + "type": { + "stringValue": "scraped" + } + } + } + }, + "name": { + "stringValue": "Amazone Airlines" + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "f356414f738f" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:24.026820Z", + "updateTime": "2026-04-13T07:00:25.846419Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_ABU", + "fields": { + "iata": { + "nullValue": null + }, + "icao": { + "stringValue": "ABU" + }, + "isActive": { + "booleanValue": true + }, + "logo": { + "mapValue": { + "fields": { + "type": { + "stringValue": "fallback" + }, + "path": { + "stringValue": "images/airline-logos/__fallback.png" + } + } + } + }, + "memberCount": { + "integerValue": "0" + }, + "openRequestCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "stCode": { + "stringValue": "st_ABU" + }, + "fsCode": { + "nullValue": null + }, + "name": { + "stringValue": "Eagle Aviation Services (Ft. Worth, Tx)" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "baa546d844b7" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:24.007031Z", + "updateTime": "2026-03-20T19:01:27.006834Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_ABV", + "fields": { + "iata": { + "nullValue": null + }, + "memberCount": { + "integerValue": "0" + }, + "icao": { + "stringValue": "ABV" + }, + "isActive": { + "booleanValue": true + }, + "logo": { + "mapValue": { + "fields": { + "path": { + "stringValue": "images/airline-logos/__fallback.png" + }, + "type": { + "stringValue": "fallback" + } + } + } + }, + "__index": { + "mapValue": { + "fields": { + "digests": { + "mapValue": { + "fields": { + "data": { + "stringValue": "c814d3769b494a4dda046306f0056594" + }, + "logo": { + "stringValue": "eaeecef837cbd2fd38d881bfe837cb7a" + } + } + } + }, + "isDirty": { + "booleanValue": false + } + } + } + }, + "fsCode": { + "stringValue": "ABV" + }, + "stCode": { + "stringValue": "st_ABV" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "name": { + "stringValue": "Antrak Air" + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "b135e62e284a" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:24.033056Z", + "updateTime": "2026-03-20T19:01:43.795213Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_ABW", + "fields": { + "iata": { + "stringValue": "RU" + }, + "icao": { + "stringValue": "ABW" + }, + "isActive": { + "booleanValue": true + }, + "__index": { + "mapValue": { + "fields": { + "digests": { + "mapValue": { + "fields": { + "logo": { + "stringValue": "997b3cfceb3911fa2c287ea4e923d22e" + }, + "data": { + "stringValue": "936c4232baed003e0ac3b505c2271015" + } + } + } + }, + "isDirty": { + "booleanValue": false + } + } + } + }, + "memberCount": { + "integerValue": "6" + }, + "fsCode": { + "stringValue": "ABW" + }, + "stCode": { + "stringValue": "st_ABW" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "name": { + "stringValue": "Airbridgecargo" + }, + "alliance": { + "nullValue": null + }, + "logo": { + "mapValue": { + "fields": { + "path": { + "stringValue": "images/airline-logos/scraped/ABW.png" + }, + "type": { + "stringValue": "scraped" + } + } + } + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "fa0976076641" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:22.754248Z", + "updateTime": "2026-04-20T07:31:59.257864Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_ABX", + "fields": { + "iata": { + "stringValue": "GB" + }, + "icao": { + "stringValue": "ABX" + }, + "logo": { + "mapValue": { + "fields": { + "path": { + "stringValue": "images/airline-logos/scraped/GB.png" + }, + "type": { + "stringValue": "scraped" + } + } + } + }, + "isActive": { + "booleanValue": true + }, + "__index": { + "mapValue": { + "fields": { + "digests": { + "mapValue": { + "fields": { + "logo": { + "stringValue": "e731a720886e37852ce23846cdcf7f11" + }, + "data": { + "stringValue": "09fdb544275316e098ea1ffd9a3fc2a9" + } + } + } + }, + "isDirty": { + "booleanValue": false + } + } + } + }, + "fsCode": { + "stringValue": "GB" + }, + "stCode": { + "stringValue": "st_ABX" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "name": { + "stringValue": "Abx Air" + }, + "alliance": { + "nullValue": null + }, + "memberCount": { + "integerValue": "148" + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "b9b6712b4897" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:21.367782Z", + "updateTime": "2026-04-15T06:52:19.974209Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_ABX_2026", + "fields": { + "iata": { + "nullValue": null + }, + "icao": { + "nullValue": null + }, + "name": { + "stringValue": "Airborne Express" + }, + "isActive": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "memberCount": { + "integerValue": "0" + }, + "openRequestCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "logo": { + "mapValue": { + "fields": { + "type": { + "stringValue": "fallback" + }, + "path": { + "stringValue": "images/airline-logos/__fallback.png" + } + } + } + }, + "stCode": { + "stringValue": "st_ABX_2026" + }, + "fsCode": { + "stringValue": "ABX" + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "bef03e6d16ec" + } + } + } + } + }, + "createTime": "2026-04-13T09:09:19.796170Z", + "updateTime": "2026-04-13T09:09:20.283821Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_ABY", + "fields": { + "iata": { + "stringValue": "G9" + }, + "icao": { + "stringValue": "ABY" + }, + "logo": { + "mapValue": { + "fields": { + "path": { + "stringValue": "images/airline-logos/scraped/G9.png" + }, + "type": { + "stringValue": "scraped" + } + } + } + }, + "isActive": { + "booleanValue": true + }, + "name": { + "stringValue": "Air Arabia" + }, + "__index": { + "mapValue": { + "fields": { + "digests": { + "mapValue": { + "fields": { + "logo": { + "stringValue": "015f438b6b76afeaadd5049dfd57099c" + }, + "data": { + "stringValue": "e4b39fc7603b8f8ddf0fdc2dd12d40ec" + } + } + } + }, + "isDirty": { + "booleanValue": false + } + } + } + }, + "hasNotes": { + "booleanValue": true + }, + "fsCode": { + "stringValue": "G9" + }, + "stCode": { + "stringValue": "st_ABY" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "memberCount": { + "integerValue": "1213" + }, + "openRequestCount": { + "integerValue": "1" + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "4ced8af873ac" + } + } + } + } + }, + "createTime": "2026-01-29T16:49:58.935358Z", + "updateTime": "2026-04-22T19:20:17.866280Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_ABZ", + "fields": { + "iata": { + "nullValue": null + }, + "icao": { + "stringValue": "ABZ" + }, + "isActive": { + "booleanValue": true + }, + "logo": { + "mapValue": { + "fields": { + "type": { + "stringValue": "fallback" + }, + "path": { + "stringValue": "images/airline-logos/__fallback.png" + } + } + } + }, + "memberCount": { + "integerValue": "0" + }, + "openRequestCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "stCode": { + "stringValue": "st_ABZ" + }, + "fsCode": { + "nullValue": null + }, + "name": { + "stringValue": "Air Ambulance Services" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "6cce83aa75e0" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:24.036097Z", + "updateTime": "2026-03-20T19:01:36.522661Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_AB_2025", + "fields": { + "iata": { + "nullValue": null + }, + "icao": { + "nullValue": null + }, + "name": { + "stringValue": "Air Berlin" + }, + "isActive": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "memberCount": { + "integerValue": "21" + }, + "openRequestCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "logo": { + "mapValue": { + "fields": { + "type": { + "stringValue": "fallback" + }, + "path": { + "stringValue": "images/airline-logos/__fallback.png" + } + } + } + }, + "stCode": { + "stringValue": "st_AB_2025" + }, + "fsCode": { + "stringValue": "AB" + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "cd96b3acec26" + } + } + } + } + }, + "createTime": "2026-03-22T17:19:38.128914Z", + "updateTime": "2026-03-22T17:19:38.511076Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_ACA", + "fields": { + "iata": { + "stringValue": "AC" + }, + "name": { + "stringValue": "Air Canada" + }, + "icao": { + "stringValue": "ACA" + }, + "logo": { + "mapValue": { + "fields": { + "path": { + "stringValue": "images/airline-logos/scraped/AC.png" + }, + "type": { + "stringValue": "scraped" + } + } + } + }, + "isActive": { + "booleanValue": true + }, + "__index": { + "mapValue": { + "fields": { + "digests": { + "mapValue": { + "fields": { + "logo": { + "stringValue": "a67f204515c4bfa464094044b82cf562" + }, + "data": { + "stringValue": "ea56a494c1a2d04e84d51722c679fd21" + } + } + } + }, + "isDirty": { + "booleanValue": false + } + } + } + }, + "hasNotes": { + "booleanValue": true + }, + "fsCode": { + "stringValue": "AC" + }, + "stCode": { + "stringValue": "st_ACA" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "alliance": { + "stringValue": "star-alliance" + }, + "memberCount": { + "integerValue": "27735" + }, + "openRequestCount": { + "integerValue": "6" + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "3b16e1c282f7" + } + } + } + } + }, + "createTime": "2026-01-29T14:55:47.237975Z", + "updateTime": "2026-04-22T21:01:46.739969Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_ACB", + "fields": { + "iata": { + "nullValue": null + }, + "icao": { + "stringValue": "ACB" + }, + "isActive": { + "booleanValue": true + }, + "logo": { + "mapValue": { + "fields": { + "type": { + "stringValue": "fallback" + }, + "path": { + "stringValue": "images/airline-logos/__fallback.png" + } + } + } + }, + "memberCount": { + "integerValue": "0" + }, + "openRequestCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "stCode": { + "stringValue": "st_ACB" + }, + "fsCode": { + "nullValue": null + }, + "name": { + "stringValue": "Air Continental Africa" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "009f3cdaf3f5" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:24.045894Z", + "updateTime": "2026-03-20T19:01:41.549040Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_ACC", + "fields": { + "iata": { + "nullValue": null + }, + "icao": { + "stringValue": "ACC" + }, + "isActive": { + "booleanValue": true + }, + "logo": { + "mapValue": { + "fields": { + "type": { + "stringValue": "fallback" + }, + "path": { + "stringValue": "images/airline-logos/__fallback.png" + } + } + } + }, + "memberCount": { + "integerValue": "0" + }, + "openRequestCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "stCode": { + "stringValue": "st_ACC" + }, + "fsCode": { + "nullValue": null + }, + "name": { + "stringValue": "Airspeed Charter" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "365d08fda909" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:24.036194Z", + "updateTime": "2026-03-20T19:01:41.170465Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_ACD", + "fields": { + "iata": { + "nullValue": null + }, + "icao": { + "stringValue": "ACD" + }, + "isActive": { + "booleanValue": true + }, + "logo": { + "mapValue": { + "fields": { + "type": { + "stringValue": "fallback" + }, + "path": { + "stringValue": "images/airline-logos/__fallback.png" + } + } + } + }, + "memberCount": { + "integerValue": "0" + }, + "openRequestCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "stCode": { + "stringValue": "st_ACD" + }, + "fsCode": { + "nullValue": null + }, + "name": { + "stringValue": "Academy Airlines (Griffin, Ga)" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "62792637df78" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:24.087402Z", + "updateTime": "2026-03-20T19:01:41.771318Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_ACE", + "fields": { + "iata": { + "nullValue": null + }, + "icao": { + "stringValue": "ACE" + }, + "isActive": { + "booleanValue": true + }, + "logo": { + "mapValue": { + "fields": { + "type": { + "stringValue": "fallback" + }, + "path": { + "stringValue": "images/airline-logos/__fallback.png" + } + } + } + }, + "memberCount": { + "integerValue": "0" + }, + "openRequestCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "stCode": { + "stringValue": "st_ACE" + }, + "fsCode": { + "nullValue": null + }, + "name": { + "stringValue": "Aviation Aces" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "20685353f66d" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:24.035888Z", + "updateTime": "2026-03-20T19:01:27.219781Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_ACF", + "fields": { + "iata": { + "nullValue": null + }, + "icao": { + "stringValue": "ACF" + }, + "isActive": { + "booleanValue": true + }, + "logo": { + "mapValue": { + "fields": { + "type": { + "stringValue": "fallback" + }, + "path": { + "stringValue": "images/airline-logos/__fallback.png" + } + } + } + }, + "memberCount": { + "integerValue": "0" + }, + "openRequestCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "stCode": { + "stringValue": "st_ACF" + }, + "fsCode": { + "nullValue": null + }, + "name": { + "stringValue": "Centro de Formacion Aeronautica de Canarias" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "3201230169c6" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:24.036711Z", + "updateTime": "2026-03-20T19:01:42.560828Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_ACG", + "fields": { + "iata": { + "nullValue": null + }, + "icao": { + "stringValue": "ACG" + }, + "isActive": { + "booleanValue": true + }, + "logo": { + "mapValue": { + "fields": { + "type": { + "stringValue": "fallback" + }, + "path": { + "stringValue": "images/airline-logos/__fallback.png" + } + } + } + }, + "memberCount": { + "integerValue": "0" + }, + "openRequestCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "stCode": { + "stringValue": "st_ACG" + }, + "fsCode": { + "nullValue": null + }, + "name": { + "stringValue": "Aosac - Airline Operations Support and Aviation Consultant" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "176c1944fe7d" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:24.082214Z", + "updateTime": "2026-03-20T19:01:42.474291Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_ACH", + "fields": { + "iata": { + "nullValue": null + }, + "icao": { + "stringValue": "ACH" + }, + "isActive": { + "booleanValue": true + }, + "logo": { + "mapValue": { + "fields": { + "type": { + "stringValue": "fallback" + }, + "path": { + "stringValue": "images/airline-logos/__fallback.png" + } + } + } + }, + "memberCount": { + "integerValue": "0" + }, + "openRequestCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "stCode": { + "stringValue": "st_ACH" + }, + "fsCode": { + "nullValue": null + }, + "name": { + "stringValue": "Africa's Connection STP" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "f871818b893a" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:24.027318Z", + "updateTime": "2026-03-20T19:01:27.525499Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_ACI", + "fields": { + "iata": { + "stringValue": "SB" + }, + "name": { + "stringValue": "Aircalin" + }, + "icao": { + "stringValue": "ACI" + }, + "logo": { + "mapValue": { + "fields": { + "path": { + "stringValue": "images/airline-logos/scraped/SB.png" + }, + "type": { + "stringValue": "scraped" + } + } + } + }, + "isActive": { + "booleanValue": true + }, + "__index": { + "mapValue": { + "fields": { + "digests": { + "mapValue": { + "fields": { + "logo": { + "stringValue": "21f867c1775cdb98342643205b46ffbd" + }, + "data": { + "stringValue": "6b294aa8e9a7095456a1ee3d01bf3c16" + } + } + } + }, + "isDirty": { + "booleanValue": false + } + } + } + }, + "hasNotes": { + "booleanValue": true + }, + "fsCode": { + "stringValue": "SB" + }, + "stCode": { + "stringValue": "st_ACI" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "memberCount": { + "integerValue": "238" + }, + "openRequestCount": { + "integerValue": "8" + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "eb9e853f490a" + } + } + } + } + }, + "createTime": "2026-01-29T18:12:08.250043Z", + "updateTime": "2026-04-22T02:10:11.047251Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_ACJ", + "fields": { + "iata": { + "nullValue": null + }, + "icao": { + "stringValue": "ACJ" + }, + "isActive": { + "booleanValue": true + }, + "logo": { + "mapValue": { + "fields": { + "type": { + "stringValue": "fallback" + }, + "path": { + "stringValue": "images/airline-logos/__fallback.png" + } + } + } + }, + "memberCount": { + "integerValue": "0" + }, + "openRequestCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "stCode": { + "stringValue": "st_ACJ" + }, + "fsCode": { + "nullValue": null + }, + "name": { + "stringValue": "Ac Aviation" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "86a79a60b40f" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:24.081796Z", + "updateTime": "2026-03-20T19:01:41.165885Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_ACK", + "fields": { + "iata": { + "nullValue": null + }, + "icao": { + "stringValue": "ACK" + }, + "isActive": { + "booleanValue": true + }, + "logo": { + "mapValue": { + "fields": { + "type": { + "stringValue": "fallback" + }, + "path": { + "stringValue": "images/airline-logos/__fallback.png" + } + } + } + }, + "memberCount": { + "integerValue": "0" + }, + "openRequestCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "stCode": { + "stringValue": "st_ACK" + }, + "fsCode": { + "nullValue": null + }, + "name": { + "stringValue": "Nantucket Airlines" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "aec6fabecb47" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:24.082477Z", + "updateTime": "2026-03-20T19:01:27.247223Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_ACL", + "fields": { + "iata": { + "stringValue": "JK" + }, + "logo": { + "mapValue": { + "fields": { + "path": { + "stringValue": "images/airline-logos/scraped/JKx.png" + }, + "type": { + "stringValue": "scraped" + } + } + } + }, + "isActive": { + "booleanValue": true + }, + "memberCount": { + "integerValue": "1" + }, + "icao": { + "stringValue": "ACL" + }, + "__index": { + "mapValue": { + "fields": { + "digests": { + "mapValue": { + "fields": { + "logo": { + "stringValue": "d4921e869b76757ef07f0f96e3887212" + }, + "data": { + "stringValue": "4761053c6abb39407a9b5abde5ccf251" + } + } + } + }, + "isDirty": { + "booleanValue": false + } + } + } + }, + "fsCode": { + "stringValue": "JKx" + }, + "stCode": { + "stringValue": "st_ACL" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "name": { + "stringValue": "Aerolinea del Caribe S.A." + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "769faafda5b3" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:22.128397Z", + "updateTime": "2026-03-20T19:01:35.160369Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_ACM", + "fields": { + "iata": { + "nullValue": null + }, + "icao": { + "stringValue": "ACM" + }, + "isActive": { + "booleanValue": true + }, + "logo": { + "mapValue": { + "fields": { + "type": { + "stringValue": "fallback" + }, + "path": { + "stringValue": "images/airline-logos/__fallback.png" + } + } + } + }, + "memberCount": { + "integerValue": "0" + }, + "openRequestCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "stCode": { + "stringValue": "st_ACM" + }, + "fsCode": { + "nullValue": null + }, + "name": { + "stringValue": "Aviac S.A. de C.V. (Aereo Vias Centroamericanas Sociedad Anonima de Capital Variable)" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "808e7e9f0f0e" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:24.086243Z", + "updateTime": "2026-03-20T19:01:41.172883Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_ACN", + "fields": { + "isActive": { + "booleanValue": true + }, + "iata": { + "stringValue": "2F" + }, + "logo": { + "mapValue": { + "fields": { + "type": { + "stringValue": "scraped" + }, + "path": { + "stringValue": "images/airline-logos/scraped/OWT.png" + } + } + } + }, + "name": { + "stringValue": "Azul Conecta" + }, + "icao": { + "stringValue": "ACN" + }, + "__index": { + "mapValue": { + "fields": { + "digests": { + "mapValue": { + "fields": { + "logo": { + "stringValue": "1160b8613de5b35a3e58c62af4dc69b9" + }, + "data": { + "stringValue": "56174bea896ae739bd7c64a6febcb0bf" + } + } + } + }, + "isDirty": { + "booleanValue": false + } + } + } + }, + "memberCount": { + "integerValue": "3" + }, + "fsCode": { + "stringValue": "OWT" + }, + "stCode": { + "stringValue": "st_ACN" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "7764ab23159f" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:21.067434Z", + "updateTime": "2026-03-20T19:01:40.502345Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_ACN_2025", + "fields": { + "iata": { + "nullValue": null + }, + "icao": { + "nullValue": null + }, + "name": { + "stringValue": "Azul Conecta" + }, + "isActive": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "memberCount": { + "integerValue": "12" + }, + "openRequestCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "logo": { + "mapValue": { + "fields": { + "type": { + "stringValue": "fallback" + }, + "path": { + "stringValue": "images/airline-logos/__fallback.png" + } + } + } + }, + "stCode": { + "stringValue": "st_ACN_2025" + }, + "fsCode": { + "stringValue": "ACN" + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "dfaff8bde5cb" + } + } + } + } + }, + "createTime": "2026-03-22T17:19:50.143441Z", + "updateTime": "2026-03-22T17:19:50.455077Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_ACO", + "fields": { + "icao": { + "stringValue": "ACO" + }, + "isActive": { + "booleanValue": true + }, + "iata": { + "nullValue": null + }, + "logo": { + "mapValue": { + "fields": { + "path": { + "stringValue": "images/airline-logos/__fallback.png" + }, + "type": { + "stringValue": "fallback" + } + } + } + }, + "__index": { + "mapValue": { + "fields": { + "digests": { + "mapValue": { + "fields": { + "data": { + "stringValue": "c5daee83966d0606d004d6d9eabae202" + }, + "logo": { + "stringValue": "eaeecef837cbd2fd38d881bfe837cb7a" + } + } + } + }, + "isDirty": { + "booleanValue": false + } + } + } + }, + "fsCode": { + "stringValue": "3E" + }, + "stCode": { + "stringValue": "st_ACO" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "name": { + "stringValue": "Air Choice One (St. Louis, Mo)" + }, + "alliance": { + "nullValue": null + }, + "memberCount": { + "integerValue": "12" + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "8531d903d05e" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:24.088082Z", + "updateTime": "2026-03-22T10:25:55.539204Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_ACP", + "fields": { + "iata": { + "stringValue": "8V" + }, + "icao": { + "stringValue": "ACP" + }, + "logo": { + "mapValue": { + "fields": { + "path": { + "stringValue": "images/airline-logos/scraped/ACP.png" + }, + "type": { + "stringValue": "scraped" + } + } + } + }, + "isActive": { + "booleanValue": true + }, + "name": { + "stringValue": "Astral Aviation" + }, + "__index": { + "mapValue": { + "fields": { + "digests": { + "mapValue": { + "fields": { + "logo": { + "stringValue": "d15f16e9d8a1963f6591fff61c901c70" + }, + "data": { + "stringValue": "4e8fd2fee0403dc3538e0d435e93db36" + } + } + } + }, + "isDirty": { + "booleanValue": false + } + } + } + }, + "fsCode": { + "stringValue": "ACP" + }, + "isControlledDuplicate": { + "booleanValue": true + }, + "alliance": { + "nullValue": null + }, + "stCode": { + "stringValue": "st_ACP" + }, + "memberCount": { + "integerValue": "3" + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "707f9a84644a" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:21.334444Z", + "updateTime": "2026-03-22T10:25:55.790434Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_ACQ", + "fields": { + "iata": { + "nullValue": null + }, + "icao": { + "stringValue": "ACQ" + }, + "isActive": { + "booleanValue": true + }, + "logo": { + "mapValue": { + "fields": { + "type": { + "stringValue": "fallback" + }, + "path": { + "stringValue": "images/airline-logos/__fallback.png" + } + } + } + }, + "memberCount": { + "integerValue": "0" + }, + "openRequestCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "stCode": { + "stringValue": "st_ACQ" + }, + "fsCode": { + "nullValue": null + }, + "name": { + "stringValue": "Aryan Cargo Express" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "1ad15ae137aa" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:24.087602Z", + "updateTime": "2026-03-20T19:01:41.769510Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_ACR", + "fields": { + "iata": { + "nullValue": null + }, + "icao": { + "stringValue": "ACR" + }, + "isActive": { + "booleanValue": true + }, + "logo": { + "mapValue": { + "fields": { + "type": { + "stringValue": "fallback" + }, + "path": { + "stringValue": "images/airline-logos/__fallback.png" + } + } + } + }, + "memberCount": { + "integerValue": "0" + }, + "openRequestCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "stCode": { + "stringValue": "st_ACR" + }, + "fsCode": { + "nullValue": null + }, + "name": { + "stringValue": "Aerocenter, Escuela de Formacion de Pilotos Privados de Avion" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "cf7aaf65f558" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:24.089304Z", + "updateTime": "2026-03-20T19:01:41.559850Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_ACS", + "fields": { + "iata": { + "nullValue": null + }, + "icao": { + "stringValue": "ACS" + }, + "logo": { + "mapValue": { + "fields": { + "path": { + "stringValue": "images/airline-logos/__fallback.png" + }, + "type": { + "stringValue": "fallback" + } + } + } + }, + "isActive": { + "booleanValue": true + }, + "memberCount": { + "integerValue": "0" + }, + "__index": { + "mapValue": { + "fields": { + "digests": { + "mapValue": { + "fields": { + "logo": { + "stringValue": "eaeecef837cbd2fd38d881bfe837cb7a" + }, + "data": { + "stringValue": "cab962dca6b232a0d759a000982a8ab4" + } + } + } + }, + "isDirty": { + "booleanValue": false + } + } + } + }, + "fsCode": { + "stringValue": "ACS" + }, + "stCode": { + "stringValue": "st_ACS" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "name": { + "stringValue": "Aircraft Sales and Services" + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "50928086948a" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:24.074817Z", + "updateTime": "2026-03-20T19:01:43.159556Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_ACT", + "fields": { + "iata": { + "nullValue": null + }, + "icao": { + "stringValue": "ACT" + }, + "logo": { + "mapValue": { + "fields": { + "path": { + "stringValue": "images/airline-logos/__fallback.png" + }, + "type": { + "stringValue": "fallback" + } + } + } + }, + "isActive": { + "booleanValue": true + }, + "__index": { + "mapValue": { + "fields": { + "digests": { + "mapValue": { + "fields": { + "logo": { + "stringValue": "eaeecef837cbd2fd38d881bfe837cb7a" + }, + "data": { + "stringValue": "345b072580a55df5e97bf8e53a73916b" + } + } + } + }, + "isDirty": { + "booleanValue": false + } + } + } + }, + "memberCount": { + "integerValue": "1" + }, + "fsCode": { + "stringValue": "ACT" + }, + "stCode": { + "stringValue": "st_ACT" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "name": { + "stringValue": "Flight Line (Denver, Co)" + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "986a63524a1b" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:24.079831Z", + "updateTime": "2026-03-20T19:01:38.240593Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_ACU", + "fields": { + "iata": { + "nullValue": null + }, + "icao": { + "stringValue": "ACU" + }, + "isActive": { + "booleanValue": true + }, + "logo": { + "mapValue": { + "fields": { + "type": { + "stringValue": "fallback" + }, + "path": { + "stringValue": "images/airline-logos/__fallback.png" + } + } + } + }, + "memberCount": { + "integerValue": "0" + }, + "openRequestCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "stCode": { + "stringValue": "st_ACU" + }, + "fsCode": { + "nullValue": null + }, + "name": { + "stringValue": "Air Cargo Transportation System" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "7a71364db372" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:24.074652Z", + "updateTime": "2026-03-20T19:01:27.263565Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_ACV", + "fields": { + "iata": { + "nullValue": null + }, + "icao": { + "stringValue": "ACV" + }, + "name": { + "stringValue": "Air Carnival" + }, + "isActive": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "memberCount": { + "integerValue": "0" + }, + "openRequestCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "logo": { + "mapValue": { + "fields": { + "type": { + "stringValue": "fallback" + }, + "path": { + "stringValue": "images/airline-logos/__fallback.png" + } + } + } + }, + "stCode": { + "stringValue": "st_ACV" + }, + "fsCode": { + "stringValue": "22S" + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "53a944fe01b4" + } + } + } + } + }, + "createTime": "2026-03-27T16:46:00.281825Z", + "updateTime": "2026-03-27T16:46:00.480597Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_ACW", + "fields": { + "iata": { + "nullValue": null + }, + "memberCount": { + "integerValue": "0" + }, + "icao": { + "stringValue": "ACW" + }, + "isActive": { + "booleanValue": true + }, + "logo": { + "mapValue": { + "fields": { + "path": { + "stringValue": "images/airline-logos/__fallback.png" + }, + "type": { + "stringValue": "fallback" + } + } + } + }, + "__index": { + "mapValue": { + "fields": { + "digests": { + "mapValue": { + "fields": { + "data": { + "stringValue": "14435ba3cdb841f8845ca88c507f2953" + }, + "logo": { + "stringValue": "eaeecef837cbd2fd38d881bfe837cb7a" + } + } + } + }, + "isDirty": { + "booleanValue": false + } + } + } + }, + "fsCode": { + "stringValue": "ACW" + }, + "stCode": { + "stringValue": "st_ACW" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "name": { + "stringValue": "Servicios Aereos Across, S.A. de C.V." + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "cacfc66828e6" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:24.088354Z", + "updateTime": "2026-03-20T19:01:38.782597Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_ACY", + "fields": { + "iata": { + "nullValue": null + }, + "icao": { + "stringValue": "ACY" + }, + "isActive": { + "booleanValue": true + }, + "logo": { + "mapValue": { + "fields": { + "type": { + "stringValue": "fallback" + }, + "path": { + "stringValue": "images/airline-logos/__fallback.png" + } + } + } + }, + "memberCount": { + "integerValue": "0" + }, + "openRequestCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "stCode": { + "stringValue": "st_ACY" + }, + "fsCode": { + "nullValue": null + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "name": { + "stringValue": "Alpha Crux" + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "cfb5d0724b7e" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:24.094350Z", + "updateTime": "2026-03-20T19:01:41.769538Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_ACY_2025", + "fields": { + "iata": { + "nullValue": null + }, + "icao": { + "nullValue": null + }, + "name": { + "stringValue": "Fly Arna" + }, + "isActive": { + "booleanValue": true + }, + "alliance": { + "nullValue": null + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "memberCount": { + "integerValue": "19" + }, + "openRequestCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "logo": { + "mapValue": { + "fields": { + "type": { + "stringValue": "fallback" + }, + "path": { + "stringValue": "images/airline-logos/__fallback.png" + } + } + } + }, + "stCode": { + "stringValue": "st_ACY_2025" + }, + "fsCode": { + "stringValue": "ACY" + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "17365084f132" + } + } + } + } + }, + "createTime": "2026-03-22T17:19:40.626434Z", + "updateTime": "2026-03-22T17:19:41.040435Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_ADA", + "fields": { + "iata": { + "nullValue": null + }, + "memberCount": { + "integerValue": "0" + }, + "icao": { + "stringValue": "ADA" + }, + "isActive": { + "booleanValue": true + }, + "logo": { + "mapValue": { + "fields": { + "path": { + "stringValue": "images/airline-logos/__fallback.png" + }, + "type": { + "stringValue": "fallback" + } + } + } + }, + "__index": { + "mapValue": { + "fields": { + "digests": { + "mapValue": { + "fields": { + "logo": { + "stringValue": "eaeecef837cbd2fd38d881bfe837cb7a" + }, + "data": { + "stringValue": "3c2a7d2df047da258ce9dae02e734cba" + } + } + } + }, + "isDirty": { + "booleanValue": false + } + } + } + }, + "fsCode": { + "stringValue": "ADA" + }, + "stCode": { + "stringValue": "st_ADA" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "name": { + "stringValue": "Airservices Australia, Flight Inspection Unit" + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "e829ae0ac473" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:24.074754Z", + "updateTime": "2026-03-20T19:01:39.196933Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_ADB", + "fields": { + "iata": { + "nullValue": null + }, + "icao": { + "stringValue": "ADB" + }, + "logo": { + "mapValue": { + "fields": { + "path": { + "stringValue": "images/airline-logos/__fallback.png" + }, + "type": { + "stringValue": "fallback" + } + } + } + }, + "isActive": { + "booleanValue": true + }, + "memberCount": { + "integerValue": "0" + }, + "__index": { + "mapValue": { + "fields": { + "digests": { + "mapValue": { + "fields": { + "logo": { + "stringValue": "eaeecef837cbd2fd38d881bfe837cb7a" + }, + "data": { + "stringValue": "c2de66b7ed1ee78aaa51a3089136907e" + } + } + } + }, + "isDirty": { + "booleanValue": false + } + } + } + }, + "fsCode": { + "stringValue": "ADB" + }, + "stCode": { + "stringValue": "st_ADB" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "name": { + "stringValue": "Antonov Design Bureau" + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "ced08b65319f" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:24.093744Z", + "updateTime": "2026-03-20T19:01:39.192648Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_ADC", + "fields": { + "iata": { + "nullValue": null + }, + "icao": { + "stringValue": "ADC" + }, + "isActive": { + "booleanValue": true + }, + "logo": { + "mapValue": { + "fields": { + "type": { + "stringValue": "fallback" + }, + "path": { + "stringValue": "images/airline-logos/__fallback.png" + } + } + } + }, + "memberCount": { + "integerValue": "0" + }, + "openRequestCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "stCode": { + "stringValue": "st_ADC" + }, + "fsCode": { + "nullValue": null + }, + "name": { + "stringValue": "Ad Astra Executive Charter SP.Z.O.O." + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "a60c589a1f7a" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:24.074680Z", + "updateTime": "2026-03-20T19:01:41.168509Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_ADD", + "fields": { + "iata": { + "nullValue": null + }, + "icao": { + "stringValue": "ADD" + }, + "isActive": { + "booleanValue": true + }, + "logo": { + "mapValue": { + "fields": { + "type": { + "stringValue": "fallback" + }, + "path": { + "stringValue": "images/airline-logos/__fallback.png" + } + } + } + }, + "memberCount": { + "integerValue": "0" + }, + "openRequestCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "stCode": { + "stringValue": "st_ADD" + }, + "fsCode": { + "nullValue": null + }, + "name": { + "stringValue": "Advanced Air" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "6049ccf23398" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:24.080279Z", + "updateTime": "2026-03-20T19:01:41.898115Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_ADF", + "fields": { + "iata": { + "nullValue": null + }, + "icao": { + "stringValue": "ADF" + }, + "isActive": { + "booleanValue": true + }, + "logo": { + "mapValue": { + "fields": { + "type": { + "stringValue": "fallback" + }, + "path": { + "stringValue": "images/airline-logos/__fallback.png" + } + } + } + }, + "memberCount": { + "integerValue": "0" + }, + "openRequestCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "stCode": { + "stringValue": "st_ADF" + }, + "fsCode": { + "nullValue": null + }, + "name": { + "stringValue": "Adefa, S.A." + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "97b260a28a9b" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:24.092669Z", + "updateTime": "2026-03-20T19:01:41.273381Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_ADG", + "fields": { + "iata": { + "nullValue": null + }, + "icao": { + "stringValue": "ADG" + }, + "isActive": { + "booleanValue": true + }, + "logo": { + "mapValue": { + "fields": { + "type": { + "stringValue": "fallback" + }, + "path": { + "stringValue": "images/airline-logos/__fallback.png" + } + } + } + }, + "memberCount": { + "integerValue": "0" + }, + "openRequestCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "stCode": { + "stringValue": "st_ADG" + }, + "fsCode": { + "nullValue": null + }, + "name": { + "stringValue": "Aerea Flying Training Organization, S.A." + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "bbf0c104d782" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:24.093845Z", + "updateTime": "2026-03-20T19:01:41.156580Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_ADI", + "fields": { + "iata": { + "nullValue": null + }, + "icao": { + "stringValue": "ADI" + }, + "logo": { + "mapValue": { + "fields": { + "path": { + "stringValue": "images/airline-logos/__fallback.png" + }, + "type": { + "stringValue": "fallback" + } + } + } + }, + "isActive": { + "booleanValue": true + }, + "__index": { + "mapValue": { + "fields": { + "digests": { + "mapValue": { + "fields": { + "logo": { + "stringValue": "eaeecef837cbd2fd38d881bfe837cb7a" + }, + "data": { + "stringValue": "07dce6bf9b34ab5f65c93aff0ab8f675" + } + } + } + }, + "isDirty": { + "booleanValue": false + } + } + } + }, + "memberCount": { + "integerValue": "1" + }, + "fsCode": { + "stringValue": "ADI" + }, + "stCode": { + "stringValue": "st_ADI" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "name": { + "stringValue": "Audeli" + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "349800af34bc" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:24.091481Z", + "updateTime": "2026-03-20T19:01:38.366698Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_ADJ", + "fields": { + "iata": { + "nullValue": null + }, + "icao": { + "stringValue": "ADJ" + }, + "isActive": { + "booleanValue": true + }, + "logo": { + "mapValue": { + "fields": { + "type": { + "stringValue": "fallback" + }, + "path": { + "stringValue": "images/airline-logos/__fallback.png" + } + } + } + }, + "memberCount": { + "integerValue": "0" + }, + "openRequestCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "stCode": { + "stringValue": "st_ADJ" + }, + "fsCode": { + "nullValue": null + }, + "name": { + "stringValue": "Aladdin Jet" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "b9514227530b" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:24.088411Z", + "updateTime": "2026-03-20T19:01:42.144054Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_ADK", + "fields": { + "iata": { + "nullValue": null + }, + "icao": { + "stringValue": "ADK" + }, + "isActive": { + "booleanValue": true + }, + "logo": { + "mapValue": { + "fields": { + "type": { + "stringValue": "fallback" + }, + "path": { + "stringValue": "images/airline-logos/__fallback.png" + } + } + } + }, + "memberCount": { + "integerValue": "0" + }, + "openRequestCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "stCode": { + "stringValue": "st_ADK" + }, + "fsCode": { + "nullValue": null + }, + "name": { + "stringValue": "Aviation Development Nigeria" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "eaadba1326ee" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:24.074381Z", + "updateTime": "2026-03-20T19:01:42.308674Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_ADL", + "fields": { + "iata": { + "nullValue": null + }, + "icao": { + "stringValue": "ADL" + }, + "isActive": { + "booleanValue": true + }, + "logo": { + "mapValue": { + "fields": { + "type": { + "stringValue": "fallback" + }, + "path": { + "stringValue": "images/airline-logos/__fallback.png" + } + } + } + }, + "memberCount": { + "integerValue": "0" + }, + "openRequestCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "stCode": { + "stringValue": "st_ADL" + }, + "fsCode": { + "nullValue": null + }, + "name": { + "stringValue": "Aero Dynamics" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "a3908968d434" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:24.079836Z", + "updateTime": "2026-03-20T19:01:41.772124Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_ADM", + "fields": { + "iata": { + "nullValue": null + }, + "memberCount": { + "integerValue": "0" + }, + "name": { + "stringValue": "Air Dream College" + }, + "icao": { + "stringValue": "ADM" + }, + "isActive": { + "booleanValue": true + }, + "logo": { + "mapValue": { + "fields": { + "path": { + "stringValue": "images/airline-logos/__fallback.png" + }, + "type": { + "stringValue": "fallback" + } + } + } + }, + "__index": { + "mapValue": { + "fields": { + "digests": { + "mapValue": { + "fields": { + "data": { + "stringValue": "03eabc1b96cfb464043dbedbfd097e80" + }, + "logo": { + "stringValue": "eaeecef837cbd2fd38d881bfe837cb7a" + } + } + } + }, + "isDirty": { + "booleanValue": false + } + } + } + }, + "fsCode": { + "stringValue": "ADM" + }, + "stCode": { + "stringValue": "st_ADM" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "51e358e369ff" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:24.083145Z", + "updateTime": "2026-03-20T19:01:39.001148Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_ADN", + "fields": { + "iata": { + "nullValue": null + }, + "icao": { + "stringValue": "ADN" + }, + "logo": { + "mapValue": { + "fields": { + "path": { + "stringValue": "images/airline-logos/__fallback.png" + }, + "type": { + "stringValue": "fallback" + } + } + } + }, + "isActive": { + "booleanValue": true + }, + "__index": { + "mapValue": { + "fields": { + "digests": { + "mapValue": { + "fields": { + "logo": { + "stringValue": "eaeecef837cbd2fd38d881bfe837cb7a" + }, + "data": { + "stringValue": "9a336874afe28c501d3ffbc4054bfef9" + } + } + } + }, + "isDirty": { + "booleanValue": false + } + } + } + }, + "memberCount": { + "integerValue": "1" + }, + "fsCode": { + "stringValue": "ADN" + }, + "stCode": { + "stringValue": "st_ADN" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "name": { + "stringValue": "Aerodienst, Nuernberg" + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "3b3650e690a1" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:24.087116Z", + "updateTime": "2026-03-20T19:01:38.980494Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_ADO", + "fields": { + "iata": { + "stringValue": "HD" + }, + "name": { + "stringValue": "Air Do" + }, + "icao": { + "stringValue": "ADO" + }, + "logo": { + "mapValue": { + "fields": { + "path": { + "stringValue": "images/airline-logos/scraped/HD.png" + }, + "type": { + "stringValue": "scraped" + } + } + } + }, + "isActive": { + "booleanValue": true + }, + "memberCount": { + "integerValue": "0" + }, + "__index": { + "mapValue": { + "fields": { + "digests": { + "mapValue": { + "fields": { + "logo": { + "stringValue": "9e25852dc1c067fb71a0a414ab2dfcdf" + }, + "data": { + "stringValue": "042bcd8c86cb16ceb8dbfe1188dde43f" + } + } + } + }, + "isDirty": { + "booleanValue": false + } + } + } + }, + "fsCode": { + "stringValue": "HD" + }, + "stCode": { + "stringValue": "st_ADO" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "openRequestCount": { + "integerValue": "0" + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "8f7b968e321d" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:21.377385Z", + "updateTime": "2026-04-21T21:20:11.082553Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_ADP", + "fields": { + "iata": { + "nullValue": null + }, + "icao": { + "stringValue": "ADP" + }, + "isActive": { + "booleanValue": true + }, + "logo": { + "mapValue": { + "fields": { + "type": { + "stringValue": "fallback" + }, + "path": { + "stringValue": "images/airline-logos/__fallback.png" + } + } + } + }, + "memberCount": { + "integerValue": "0" + }, + "openRequestCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "stCode": { + "stringValue": "st_ADP" + }, + "fsCode": { + "nullValue": null + }, + "name": { + "stringValue": "Aerodiplomatic, S.A. de C.V." + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "fc4a11fd17db" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:24.104791Z", + "updateTime": "2026-03-20T19:01:41.165390Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_ADR", + "fields": { + "isActive": { + "booleanValue": false + }, + "iata": { + "nullValue": null + }, + "name": { + "stringValue": "Adria Airways" + }, + "icao": { + "stringValue": "ADR" + }, + "logo": { + "mapValue": { + "fields": { + "type": { + "stringValue": "fallback" + }, + "path": { + "stringValue": "images/airline-logos/__fallback.png" + } + } + } + }, + "__index": { + "mapValue": { + "fields": { + "digests": { + "mapValue": { + "fields": { + "logo": { + "stringValue": "eaeecef837cbd2fd38d881bfe837cb7a" + }, + "data": { + "stringValue": "b21334573097a3f97eec6ba4f47f30de" + } + } + } + }, + "isDirty": { + "booleanValue": false + } + } + } + }, + "hasNotes": { + "booleanValue": false + }, + "fsCode": { + "stringValue": "JP" + }, + "stCode": { + "stringValue": "st_ADR" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "memberCount": { + "integerValue": "141" + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "70baa225badd" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:24.095122Z", + "updateTime": "2026-03-22T10:26:09.103444Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_ADS", + "fields": { + "iata": { + "nullValue": null + }, + "memberCount": { + "integerValue": "0" + }, + "name": { + "stringValue": "Anderson Air" + }, + "icao": { + "stringValue": "ADS" + }, + "isActive": { + "booleanValue": true + }, + "logo": { + "mapValue": { + "fields": { + "path": { + "stringValue": "images/airline-logos/__fallback.png" + }, + "type": { + "stringValue": "fallback" + } + } + } + }, + "__index": { + "mapValue": { + "fields": { + "digests": { + "mapValue": { + "fields": { + "data": { + "stringValue": "730da33b0be2082e279c83d2a15907b4" + }, + "logo": { + "stringValue": "eaeecef837cbd2fd38d881bfe837cb7a" + } + } + } + }, + "isDirty": { + "booleanValue": false + } + } + } + }, + "fsCode": { + "stringValue": "ADS" + }, + "stCode": { + "stringValue": "st_ADS" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "f52778ea7bf7" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:24.090675Z", + "updateTime": "2026-03-20T19:01:39.027163Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_ADT", + "fields": { + "iata": { + "nullValue": null + }, + "icao": { + "stringValue": "ADT" + }, + "isActive": { + "booleanValue": true + }, + "logo": { + "mapValue": { + "fields": { + "type": { + "stringValue": "fallback" + }, + "path": { + "stringValue": "images/airline-logos/__fallback.png" + } + } + } + }, + "memberCount": { + "integerValue": "0" + }, + "openRequestCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "stCode": { + "stringValue": "st_ADT" + }, + "fsCode": { + "nullValue": null + }, + "name": { + "stringValue": "Arrendamientos y Transportes Turisticos, S.A. de C.V." + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "2f53a73dd3eb" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:24.091352Z", + "updateTime": "2026-03-20T19:01:41.173710Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_ADV", + "fields": { + "iata": { + "nullValue": null + }, + "icao": { + "stringValue": "ADV" + }, + "isActive": { + "booleanValue": true + }, + "logo": { + "mapValue": { + "fields": { + "type": { + "stringValue": "fallback" + }, + "path": { + "stringValue": "images/airline-logos/__fallback.png" + } + } + } + }, + "memberCount": { + "integerValue": "0" + }, + "openRequestCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "stCode": { + "stringValue": "st_ADV" + }, + "fsCode": { + "nullValue": null + }, + "name": { + "stringValue": "Advanced Flight Training" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "6b035c0801a2" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:24.083142Z", + "updateTime": "2026-03-20T19:01:41.581383Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_ADY", + "fields": { + "iata": { + "stringValue": "3L" + }, + "name": { + "stringValue": "Air Arabia Abu Dhabi" + }, + "isActive": { + "booleanValue": true + }, + "logo": { + "mapValue": { + "fields": { + "path": { + "stringValue": "images/airline-logos/scraped/3Lx.png" + }, + "type": { + "stringValue": "scraped" + } + } + } + }, + "icao": { + "stringValue": "ADY" + }, + "__index": { + "mapValue": { + "fields": { + "digests": { + "mapValue": { + "fields": { + "logo": { + "stringValue": "153fd8202301a7c20f6c0c86eb6b56ce" + }, + "data": { + "stringValue": "071433af3aa35701351df1284594da17" + } + } + } + }, + "isDirty": { + "booleanValue": false + } + } + } + }, + "fsCode": { + "stringValue": "3Lx" + }, + "stCode": { + "stringValue": "st_ADY" + }, + "memberCount": { + "integerValue": "85" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "openRequestCount": { + "integerValue": "0" + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "4694adaaa36a" + } + } + } + } + }, + "createTime": "2026-01-29T18:38:46.054196Z", + "updateTime": "2026-04-22T09:45:13.053824Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_ADZ", + "fields": { + "name": { + "stringValue": "Compass Cargo Airlines" + }, + "icao": { + "stringValue": "ADZ" + }, + "isActive": { + "booleanValue": true + }, + "iata": { + "stringValue": "HQ" + }, + "logo": { + "mapValue": { + "fields": { + "path": { + "stringValue": "images/airline-logos/scraped/ADZ.png" + }, + "type": { + "stringValue": "scraped" + } + } + } + }, + "__index": { + "mapValue": { + "fields": { + "digests": { + "mapValue": { + "fields": { + "data": { + "stringValue": "8321c2c6391e0bc71c8b4710b07020bb" + }, + "logo": { + "stringValue": "6f23013fc6178950096aa1ef426766ff" + } + } + } + }, + "isDirty": { + "booleanValue": false + } + } + } + }, + "memberCount": { + "integerValue": "2" + }, + "fsCode": { + "stringValue": "ADZ" + }, + "stCode": { + "stringValue": "st_ADZ" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "868c9c95ec05" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:22.005348Z", + "updateTime": "2026-03-20T19:01:42.549091Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_AEA", + "fields": { + "iata": { + "stringValue": "UX" + }, + "name": { + "stringValue": "Air Europa" + }, + "icao": { + "stringValue": "AEA" + }, + "logo": { + "mapValue": { + "fields": { + "path": { + "stringValue": "images/airline-logos/scraped/UX.png" + }, + "type": { + "stringValue": "scraped" + } + } + } + }, + "isActive": { + "booleanValue": true + }, + "__index": { + "mapValue": { + "fields": { + "digests": { + "mapValue": { + "fields": { + "logo": { + "stringValue": "94d515f91d639ed0a2d7a0b0836a82ce" + }, + "data": { + "stringValue": "5e789a896e2af43fa28c8246ddf2a482" + } + } + } + }, + "isDirty": { + "booleanValue": false + } + } + } + }, + "hasNotes": { + "booleanValue": true + }, + "fsCode": { + "stringValue": "UX" + }, + "stCode": { + "stringValue": "st_AEA" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "alliance": { + "stringValue": "skyteam" + }, + "memberCount": { + "integerValue": "1295" + }, + "openRequestCount": { + "integerValue": "175" + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "64183dd3ac3e" + } + } + } + } + }, + "createTime": "2026-01-29T15:29:51.383909Z", + "updateTime": "2026-04-22T20:31:03.151936Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_AEB", + "fields": { + "iata": { + "stringValue": "Z3" + }, + "name": { + "stringValue": "Avion Express Brasil" + }, + "isActive": { + "booleanValue": true + }, + "hasNotes": { + "booleanValue": false + }, + "openRequestCount": { + "integerValue": "0" + }, + "logo": { + "mapValue": { + "fields": { + "path": { + "stringValue": "images/airline-logos/scraped/Z23.png" + }, + "type": { + "stringValue": "scraped" + } + } + } + }, + "fsCode": { + "stringValue": "Z23" + }, + "stCode": { + "stringValue": "st_AEB" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "icao": { + "stringValue": "AEB" + }, + "alliance": { + "nullValue": null + }, + "memberCount": { + "integerValue": "2" + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "e14b1076598e" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:24.036923Z", + "updateTime": "2026-03-22T17:43:55.372858Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_AEC", + "fields": { + "iata": { + "nullValue": null + }, + "icao": { + "stringValue": "AEC" + }, + "isActive": { + "booleanValue": true + }, + "logo": { + "mapValue": { + "fields": { + "type": { + "stringValue": "fallback" + }, + "path": { + "stringValue": "images/airline-logos/__fallback.png" + } + } + } + }, + "memberCount": { + "integerValue": "0" + }, + "openRequestCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "stCode": { + "stringValue": "st_AEC" + }, + "fsCode": { + "nullValue": null + }, + "name": { + "stringValue": "Aeroservicios de Almeria 2000, S.L." + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "f0d2b015e0a2" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:24.092638Z", + "updateTime": "2026-03-20T19:01:41.770114Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_AED", + "fields": { + "iata": { + "nullValue": null + }, + "memberCount": { + "integerValue": "0" + }, + "name": { + "stringValue": "Eads Casa" + }, + "icao": { + "stringValue": "AED" + }, + "isActive": { + "booleanValue": true + }, + "logo": { + "mapValue": { + "fields": { + "path": { + "stringValue": "images/airline-logos/__fallback.png" + }, + "type": { + "stringValue": "fallback" + } + } + } + }, + "__index": { + "mapValue": { + "fields": { + "digests": { + "mapValue": { + "fields": { + "data": { + "stringValue": "5bce55e9753aa6e4ff71d2f08d1bc204" + }, + "logo": { + "stringValue": "eaeecef837cbd2fd38d881bfe837cb7a" + } + } + } + }, + "isDirty": { + "booleanValue": false + } + } + } + }, + "fsCode": { + "stringValue": "AED" + }, + "stCode": { + "stringValue": "st_AED" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "79582b40e2d0" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:24.095262Z", + "updateTime": "2026-03-20T19:01:40.107802Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_AEE", + "fields": { + "iata": { + "stringValue": "A3" + }, + "name": { + "stringValue": "Aegean Airlines" + }, + "icao": { + "stringValue": "AEE" + }, + "isActive": { + "booleanValue": true + }, + "logo": { + "mapValue": { + "fields": { + "path": { + "stringValue": "images/airline-logos/custom/A3.png" + }, + "type": { + "stringValue": "custom" + } + } + } + }, + "__index": { + "mapValue": { + "fields": { + "digests": { + "mapValue": { + "fields": { + "data": { + "stringValue": "90db4f58a307768d7658390cfdf316dd" + }, + "logo": { + "stringValue": "c1f8f64d4522d7288ce097701db3d08a" + } + } + } + }, + "isDirty": { + "booleanValue": false + } + } + } + }, + "hasNotes": { + "booleanValue": true + }, + "fsCode": { + "stringValue": "A3" + }, + "stCode": { + "stringValue": "st_AEE" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "alliance": { + "stringValue": "star-alliance" + }, + "memberCount": { + "integerValue": "623" + }, + "openRequestCount": { + "integerValue": "64" + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "b167f096d682" + } + } + } + } + }, + "createTime": "2026-01-29T17:43:52.314038Z", + "updateTime": "2026-04-22T20:41:24.270338Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_AEF", + "fields": { + "iata": { + "nullValue": null + }, + "icao": { + "stringValue": "AEF" + }, + "isActive": { + "booleanValue": true + }, + "logo": { + "mapValue": { + "fields": { + "type": { + "stringValue": "fallback" + }, + "path": { + "stringValue": "images/airline-logos/__fallback.png" + } + } + } + }, + "memberCount": { + "integerValue": "0" + }, + "openRequestCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "stCode": { + "stringValue": "st_AEF" + }, + "fsCode": { + "nullValue": null + }, + "name": { + "stringValue": "Aerea" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "4326b13dd711" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:24.071645Z", + "updateTime": "2026-03-20T19:01:41.772260Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_AEG", + "fields": { + "iata": { + "nullValue": null + }, + "name": { + "stringValue": "Airest" + }, + "icao": { + "stringValue": "AEG" + }, + "logo": { + "mapValue": { + "fields": { + "path": { + "stringValue": "images/airline-logos/__fallback.png" + }, + "type": { + "stringValue": "fallback" + } + } + } + }, + "isActive": { + "booleanValue": true + }, + "__index": { + "mapValue": { + "fields": { + "digests": { + "mapValue": { + "fields": { + "logo": { + "stringValue": "eaeecef837cbd2fd38d881bfe837cb7a" + }, + "data": { + "stringValue": "9ed9b036914161109c90186a3923bcb5" + } + } + } + }, + "isDirty": { + "booleanValue": false + } + } + } + }, + "fsCode": { + "stringValue": "AEG" + }, + "stCode": { + "stringValue": "st_AEG" + }, + "memberCount": { + "integerValue": "2" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "081a14347d3c" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:24.083291Z", + "updateTime": "2026-03-20T19:01:39.158900Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_AEH", + "fields": { + "isActive": { + "booleanValue": true + }, + "iata": { + "stringValue": "NL" + }, + "icao": { + "stringValue": "AEH" + }, + "logo": { + "mapValue": { + "fields": { + "type": { + "stringValue": "scraped" + }, + "path": { + "stringValue": "images/airline-logos/scraped/AEH.png" + } + } + } + }, + "name": { + "stringValue": "Amelia International" + }, + "__index": { + "mapValue": { + "fields": { + "digests": { + "mapValue": { + "fields": { + "logo": { + "stringValue": "20fc53fc87eec65869b5bf0c04a45f0c" + }, + "data": { + "stringValue": "02c8f8e90bcdc8f7e128a298e849a8c1" + } + } + } + }, + "isDirty": { + "booleanValue": false + } + } + } + }, + "memberCount": { + "integerValue": "21" + }, + "fsCode": { + "stringValue": "AEH" + }, + "stCode": { + "stringValue": "st_AEH" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "28c6c9ada7ac" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:22.328640Z", + "updateTime": "2026-03-20T19:01:43.995661Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_AEI", + "fields": { + "iata": { + "nullValue": null + }, + "icao": { + "stringValue": "AEI" + }, + "isActive": { + "booleanValue": true + }, + "logo": { + "mapValue": { + "fields": { + "type": { + "stringValue": "fallback" + }, + "path": { + "stringValue": "images/airline-logos/__fallback.png" + } + } + } + }, + "memberCount": { + "integerValue": "0" + }, + "openRequestCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "stCode": { + "stringValue": "st_AEI" + }, + "fsCode": { + "nullValue": null + }, + "name": { + "stringValue": "Air Poland SP. Z.O.O." + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "d4017987efbd" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:24.082507Z", + "updateTime": "2026-03-20T19:01:41.671317Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_AEJ", + "fields": { + "iata": { + "nullValue": null + }, + "icao": { + "stringValue": "AEJ" + }, + "isActive": { + "booleanValue": true + }, + "logo": { + "mapValue": { + "fields": { + "type": { + "stringValue": "fallback" + }, + "path": { + "stringValue": "images/airline-logos/__fallback.png" + } + } + } + }, + "memberCount": { + "integerValue": "0" + }, + "openRequestCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "stCode": { + "stringValue": "st_AEJ" + }, + "fsCode": { + "nullValue": null + }, + "name": { + "stringValue": "Aerojet Executive" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "f82906a707aa" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:24.068989Z", + "updateTime": "2026-03-20T19:01:42.019974Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_AEK", + "fields": { + "icao": { + "stringValue": "AEK" + }, + "isActive": { + "booleanValue": true + }, + "iata": { + "nullValue": null + }, + "logo": { + "mapValue": { + "fields": { + "path": { + "stringValue": "images/airline-logos/__fallback.png" + }, + "type": { + "stringValue": "fallback" + } + } + } + }, + "memberCount": { + "integerValue": "0" + }, + "__index": { + "mapValue": { + "fields": { + "digests": { + "mapValue": { + "fields": { + "logo": { + "stringValue": "eaeecef837cbd2fd38d881bfe837cb7a" + }, + "data": { + "stringValue": "7e9e32871d5e4d80ae81787c5a5c3f4f" + } + } + } + }, + "isDirty": { + "booleanValue": false + } + } + } + }, + "fsCode": { + "stringValue": "A4" + }, + "stCode": { + "stringValue": "st_AEK" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "name": { + "stringValue": "Aerocon Ltda." + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "01ea48f0eedb" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:24.075211Z", + "updateTime": "2026-03-20T19:01:37.232518Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_AEL", + "fields": { + "iata": { + "nullValue": null + }, + "memberCount": { + "integerValue": "0" + }, + "icao": { + "stringValue": "AEL" + }, + "isActive": { + "booleanValue": true + }, + "logo": { + "mapValue": { + "fields": { + "path": { + "stringValue": "images/airline-logos/__fallback.png" + }, + "type": { + "stringValue": "fallback" + } + } + } + }, + "__index": { + "mapValue": { + "fields": { + "digests": { + "mapValue": { + "fields": { + "data": { + "stringValue": "8e972746737b9b8392e58431b2115968" + }, + "logo": { + "stringValue": "eaeecef837cbd2fd38d881bfe837cb7a" + } + } + } + }, + "isDirty": { + "booleanValue": false + } + } + } + }, + "fsCode": { + "stringValue": "AEL" + }, + "stCode": { + "stringValue": "st_AEL" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "name": { + "stringValue": "Aegle Aviation (Aruba) N.V." + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "0d813fa60f43" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:24.082461Z", + "updateTime": "2026-03-20T19:01:38.977672Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_AEM", + "fields": { + "iata": { + "nullValue": null + }, + "icao": { + "stringValue": "AEM" + }, + "isActive": { + "booleanValue": true + }, + "logo": { + "mapValue": { + "fields": { + "type": { + "stringValue": "fallback" + }, + "path": { + "stringValue": "images/airline-logos/__fallback.png" + } + } + } + }, + "memberCount": { + "integerValue": "0" + }, + "openRequestCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "stCode": { + "stringValue": "st_AEM" + }, + "fsCode": { + "nullValue": null + }, + "name": { + "stringValue": "Aero Madrid" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "236a61d90a2a" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:24.120332Z", + "updateTime": "2026-03-20T19:01:27.351905Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_AEN", + "fields": { + "iata": { + "nullValue": null + }, + "icao": { + "stringValue": "AEN" + }, + "isActive": { + "booleanValue": true + }, + "logo": { + "mapValue": { + "fields": { + "type": { + "stringValue": "fallback" + }, + "path": { + "stringValue": "images/airline-logos/__fallback.png" + } + } + } + }, + "memberCount": { + "integerValue": "0" + }, + "openRequestCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "stCode": { + "stringValue": "st_AEN" + }, + "fsCode": { + "nullValue": null + }, + "name": { + "stringValue": "Aireon Canada" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "036ccf3d6a5b" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:24.125249Z", + "updateTime": "2026-03-20T19:01:41.359335Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_AEO", + "fields": { + "iata": { + "nullValue": null + }, + "icao": { + "stringValue": "AEO" + }, + "isActive": { + "booleanValue": true + }, + "logo": { + "mapValue": { + "fields": { + "type": { + "stringValue": "fallback" + }, + "path": { + "stringValue": "images/airline-logos/__fallback.png" + } + } + } + }, + "memberCount": { + "integerValue": "0" + }, + "openRequestCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "stCode": { + "stringValue": "st_AEO" + }, + "fsCode": { + "nullValue": null + }, + "name": { + "stringValue": "Aero Guernsey" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "91ce725df9ba" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:24.130737Z", + "updateTime": "2026-03-20T19:01:41.759944Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_AEP", + "fields": { + "iata": { + "nullValue": null + }, + "icao": { + "stringValue": "AEP" + }, + "logo": { + "mapValue": { + "fields": { + "path": { + "stringValue": "images/airline-logos/__fallback.png" + }, + "type": { + "stringValue": "fallback" + } + } + } + }, + "isActive": { + "booleanValue": true + }, + "__index": { + "mapValue": { + "fields": { + "digests": { + "mapValue": { + "fields": { + "logo": { + "stringValue": "eaeecef837cbd2fd38d881bfe837cb7a" + }, + "data": { + "stringValue": "fc5ef7d46e45c11ef18041b5a3c72e0b" + } + } + } + }, + "isDirty": { + "booleanValue": false + } + } + } + }, + "fsCode": { + "stringValue": "AEP" + }, + "stCode": { + "stringValue": "st_AEP" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "name": { + "stringValue": "Aerotec" + }, + "alliance": { + "nullValue": null + }, + "memberCount": { + "integerValue": "0" + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "de70f206ad3f" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:24.071100Z", + "updateTime": "2026-03-22T10:25:56.014850Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_AER", + "fields": { + "iata": { + "stringValue": "KO" + }, + "icao": { + "stringValue": "AER" + }, + "logo": { + "mapValue": { + "fields": { + "path": { + "stringValue": "images/airline-logos/scraped/KO.png" + }, + "type": { + "stringValue": "scraped" + } + } + } + }, + "isActive": { + "booleanValue": true + }, + "__index": { + "mapValue": { + "fields": { + "digests": { + "mapValue": { + "fields": { + "logo": { + "stringValue": "da77c78248aea4c62e6ac802cc24b1ea" + }, + "data": { + "stringValue": "ba32c184be0619a878f913d12d341fec" + } + } + } + }, + "isDirty": { + "booleanValue": false + } + } + } + }, + "memberCount": { + "integerValue": "25" + }, + "fsCode": { + "stringValue": "KO" + }, + "stCode": { + "stringValue": "st_AER" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "name": { + "stringValue": "Alaska Central Express" + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "202a2ae3fc1d" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:22.617819Z", + "updateTime": "2026-03-20T19:01:38.671076Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_AES", + "fields": { + "iata": { + "nullValue": null + }, + "icao": { + "stringValue": "AES" + }, + "isActive": { + "booleanValue": true + }, + "logo": { + "mapValue": { + "fields": { + "type": { + "stringValue": "fallback" + }, + "path": { + "stringValue": "images/airline-logos/__fallback.png" + } + } + } + }, + "memberCount": { + "integerValue": "0" + }, + "openRequestCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "stCode": { + "stringValue": "st_AES" + }, + "fsCode": { + "nullValue": null + }, + "name": { + "stringValue": "Aerospace Engineering Services" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "2499ce711783" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:24.082945Z", + "updateTime": "2026-03-20T19:01:41.770092Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_AET", + "fields": { + "iata": { + "nullValue": null + }, + "memberCount": { + "integerValue": "0" + }, + "name": { + "stringValue": "Aeronautical Radio of Thailand" + }, + "icao": { + "stringValue": "AET" + }, + "isActive": { + "booleanValue": true + }, + "logo": { + "mapValue": { + "fields": { + "path": { + "stringValue": "images/airline-logos/__fallback.png" + }, + "type": { + "stringValue": "fallback" + } + } + } + }, + "__index": { + "mapValue": { + "fields": { + "digests": { + "mapValue": { + "fields": { + "data": { + "stringValue": "f9fab8682457108879329f1bea47b934" + }, + "logo": { + "stringValue": "eaeecef837cbd2fd38d881bfe837cb7a" + } + } + } + }, + "isDirty": { + "booleanValue": false + } + } + } + }, + "fsCode": { + "stringValue": "AET" + }, + "stCode": { + "stringValue": "st_AET" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "99b31d8136a8" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:24.075102Z", + "updateTime": "2026-03-20T19:01:37.843793Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_AEV", + "fields": { + "iata": { + "nullValue": null + }, + "icao": { + "stringValue": "AEV" + }, + "isActive": { + "booleanValue": true + }, + "logo": { + "mapValue": { + "fields": { + "type": { + "stringValue": "fallback" + }, + "path": { + "stringValue": "images/airline-logos/__fallback.png" + } + } + } + }, + "memberCount": { + "integerValue": "0" + }, + "openRequestCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "stCode": { + "stringValue": "st_AEV" + }, + "fsCode": { + "nullValue": null + }, + "name": { + "stringValue": "Aeroventas, S.A." + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "e6269ce9d701" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:24.071841Z", + "updateTime": "2026-03-20T19:01:42.380069Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_AEW", + "fields": { + "iata": { + "nullValue": null + }, + "memberCount": { + "integerValue": "0" + }, + "icao": { + "stringValue": "AEW" + }, + "isActive": { + "booleanValue": true + }, + "logo": { + "mapValue": { + "fields": { + "path": { + "stringValue": "images/airline-logos/__fallback.png" + }, + "type": { + "stringValue": "fallback" + } + } + } + }, + "__index": { + "mapValue": { + "fields": { + "digests": { + "mapValue": { + "fields": { + "data": { + "stringValue": "c20d9c02541d1b1f4405d97bfcd85471" + }, + "logo": { + "stringValue": "eaeecef837cbd2fd38d881bfe837cb7a" + } + } + } + }, + "isDirty": { + "booleanValue": false + } + } + } + }, + "fsCode": { + "stringValue": "AEW" + }, + "stCode": { + "stringValue": "st_AEW" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "name": { + "stringValue": "Aegean Executive S.A." + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "9363969fe80b" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:24.115028Z", + "updateTime": "2026-03-20T19:01:39.073481Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_AEX", + "fields": { + "iata": { + "nullValue": null + }, + "icao": { + "stringValue": "AEX" + }, + "isActive": { + "booleanValue": true + }, + "logo": { + "mapValue": { + "fields": { + "type": { + "stringValue": "fallback" + }, + "path": { + "stringValue": "images/airline-logos/__fallback.png" + } + } + } + }, + "memberCount": { + "integerValue": "0" + }, + "openRequestCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "stCode": { + "stringValue": "st_AEX" + }, + "fsCode": { + "nullValue": null + }, + "name": { + "stringValue": "Aerohelix S. de R.L. de C.V." + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "3ac841460378" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:24.136374Z", + "updateTime": "2026-03-20T19:01:41.165899Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_AEY", + "fields": { + "iata": { + "nullValue": null + }, + "icao": { + "stringValue": "AEY" + }, + "isActive": { + "booleanValue": true + }, + "logo": { + "mapValue": { + "fields": { + "type": { + "stringValue": "fallback" + }, + "path": { + "stringValue": "images/airline-logos/__fallback.png" + } + } + } + }, + "memberCount": { + "integerValue": "0" + }, + "openRequestCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "stCode": { + "stringValue": "st_AEY" + }, + "fsCode": { + "nullValue": null + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "name": { + "stringValue": "Aeroservicios Centroamericanos S. de R.L." + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "0ecbfb5a8412" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:24.069063Z", + "updateTime": "2026-03-20T19:01:41.563426Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_AEY_2025", + "fields": { + "iata": { + "nullValue": null + }, + "icao": { + "nullValue": null + }, + "name": { + "stringValue": "Air Italy S.p.A." + }, + "isActive": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "memberCount": { + "integerValue": "8" + }, + "openRequestCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "logo": { + "mapValue": { + "fields": { + "type": { + "stringValue": "fallback" + }, + "path": { + "stringValue": "images/airline-logos/__fallback.png" + } + } + } + }, + "stCode": { + "stringValue": "st_AEY_2025" + }, + "fsCode": { + "stringValue": "AEY" + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "f22214b7733b" + } + } + } + } + }, + "createTime": "2026-03-22T17:19:43.937057Z", + "updateTime": "2026-03-22T17:19:44.297715Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_AEZ", + "fields": { + "icao": { + "stringValue": "AEZ" + }, + "isActive": { + "booleanValue": true + }, + "iata": { + "stringValue": "XZ" + }, + "logo": { + "mapValue": { + "fields": { + "path": { + "stringValue": "images/airline-logos/scraped/AEZ.png" + }, + "type": { + "stringValue": "scraped" + } + } + } + }, + "__index": { + "mapValue": { + "fields": { + "digests": { + "mapValue": { + "fields": { + "data": { + "stringValue": "6ea681ae6ddf16273c3539346ccd437d" + }, + "logo": { + "stringValue": "dd90175a5b260c08323f89155bfb839d" + } + } + } + }, + "isDirty": { + "booleanValue": false + } + } + } + }, + "memberCount": { + "integerValue": "4" + }, + "fsCode": { + "stringValue": "AEZ" + }, + "stCode": { + "stringValue": "st_AEZ" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "name": { + "stringValue": "AeroItalia" + }, + "alliance": { + "nullValue": null + }, + "openRequestCount": { + "integerValue": "0" + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "0491b763847a" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:23.569404Z", + "updateTime": "2026-04-19T00:59:02.585500Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_AFA", + "fields": { + "iata": { + "nullValue": null + }, + "icao": { + "stringValue": "AFA" + }, + "isActive": { + "booleanValue": true + }, + "logo": { + "mapValue": { + "fields": { + "type": { + "stringValue": "fallback" + }, + "path": { + "stringValue": "images/airline-logos/__fallback.png" + } + } + } + }, + "memberCount": { + "integerValue": "0" + }, + "openRequestCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "stCode": { + "stringValue": "st_AFA" + }, + "fsCode": { + "nullValue": null + }, + "name": { + "stringValue": "Alfa Air" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "c20aa46445e4" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:24.071242Z", + "updateTime": "2026-03-20T19:01:41.165304Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_AFB", + "fields": { + "iata": { + "nullValue": null + }, + "memberCount": { + "integerValue": "0" + }, + "name": { + "stringValue": "Bulgarian Air Force" + }, + "icao": { + "stringValue": "AFB" + }, + "isActive": { + "booleanValue": true + }, + "logo": { + "mapValue": { + "fields": { + "path": { + "stringValue": "images/airline-logos/__fallback.png" + }, + "type": { + "stringValue": "fallback" + } + } + } + }, + "__index": { + "mapValue": { + "fields": { + "digests": { + "mapValue": { + "fields": { + "data": { + "stringValue": "959e354b3ab1202219127cd9b9a93e7e" + }, + "logo": { + "stringValue": "eaeecef837cbd2fd38d881bfe837cb7a" + } + } + } + }, + "isDirty": { + "booleanValue": false + } + } + } + }, + "fsCode": { + "stringValue": "AFB" + }, + "stCode": { + "stringValue": "st_AFB" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "08c83b0ca179" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:24.074486Z", + "updateTime": "2026-03-20T19:01:39.045875Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_AFC", + "fields": { + "iata": { + "nullValue": null + }, + "icao": { + "stringValue": "AFC" + }, + "isActive": { + "booleanValue": true + }, + "logo": { + "mapValue": { + "fields": { + "type": { + "stringValue": "fallback" + }, + "path": { + "stringValue": "images/airline-logos/__fallback.png" + } + } + } + }, + "memberCount": { + "integerValue": "0" + }, + "openRequestCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "stCode": { + "stringValue": "st_AFC" + }, + "fsCode": { + "nullValue": null + }, + "name": { + "stringValue": "Aerorutas del Sur C.A." + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "3d6467d027ca" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:23.791033Z", + "updateTime": "2026-03-20T19:01:42.572298Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_AFD", + "fields": { + "iata": { + "nullValue": null + }, + "icao": { + "stringValue": "AFD" + }, + "isActive": { + "booleanValue": true + }, + "logo": { + "mapValue": { + "fields": { + "type": { + "stringValue": "fallback" + }, + "path": { + "stringValue": "images/airline-logos/__fallback.png" + } + } + } + }, + "memberCount": { + "integerValue": "0" + }, + "openRequestCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "stCode": { + "stringValue": "st_AFD" + }, + "fsCode": { + "nullValue": null + }, + "name": { + "stringValue": "Unity Air (Ghana)" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "c3ec8b12b3c9" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:23.806778Z", + "updateTime": "2026-03-20T19:01:41.514050Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_AFE", + "fields": { + "memberCount": { + "integerValue": "0" + }, + "icao": { + "stringValue": "AFE" + }, + "isActive": { + "booleanValue": true + }, + "__index": { + "mapValue": { + "fields": { + "digests": { + "mapValue": { + "fields": { + "data": { + "stringValue": "31fdcf64eeb11f084770042c7a396427" + }, + "logo": { + "stringValue": "e363bbbf81a4a4113d0af554f7870ec3" + } + } + } + }, + "isDirty": { + "booleanValue": false + } + } + } + }, + "fsCode": { + "stringValue": "AFE" + }, + "stCode": { + "stringValue": "st_AFE" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "name": { + "stringValue": "PT. Airfast Indonesia" + }, + "logo": { + "mapValue": { + "fields": { + "path": { + "stringValue": "images/airline-logos/__fallback.png" + }, + "type": { + "stringValue": "fallback" + } + } + } + }, + "alliance": { + "nullValue": null + }, + "iata": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "5e22d82cde78" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:24.068667Z", + "updateTime": "2026-03-20T19:01:38.765573Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_AFF", + "fields": { + "iata": { + "nullValue": null + }, + "icao": { + "stringValue": "AFF" + }, + "isActive": { + "booleanValue": true + }, + "logo": { + "mapValue": { + "fields": { + "type": { + "stringValue": "fallback" + }, + "path": { + "stringValue": "images/airline-logos/__fallback.png" + } + } + } + }, + "memberCount": { + "integerValue": "0" + }, + "openRequestCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "stCode": { + "stringValue": "st_AFF" + }, + "fsCode": { + "nullValue": null + }, + "name": { + "stringValue": "AF-Aviation" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "6e4e5c43a4ec" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:23.944354Z", + "updateTime": "2026-03-20T19:01:41.771543Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_AFG", + "fields": { + "iata": { + "stringValue": "FG" + }, + "name": { + "stringValue": "Ariana Afghan Airlines" + }, + "icao": { + "stringValue": "AFG" + }, + "logo": { + "mapValue": { + "fields": { + "path": { + "stringValue": "images/airline-logos/scraped/FG.png" + }, + "type": { + "stringValue": "scraped" + } + } + } + }, + "isActive": { + "booleanValue": true + }, + "__index": { + "mapValue": { + "fields": { + "digests": { + "mapValue": { + "fields": { + "logo": { + "stringValue": "03d7819c5aaff5ac66e3be278a42a286" + }, + "data": { + "stringValue": "7734f040b1df3da4fe0b7ab640e93356" + } + } + } + }, + "isDirty": { + "booleanValue": false + } + } + } + }, + "memberCount": { + "integerValue": "1" + }, + "openRequestCount": { + "integerValue": "0" + }, + "fsCode": { + "stringValue": "FG" + }, + "stCode": { + "stringValue": "st_AFG" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "10203b109ff9" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:21.031172Z", + "updateTime": "2026-03-20T19:01:42.911091Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_AFH", + "fields": { + "iata": { + "nullValue": null + }, + "icao": { + "stringValue": "AFH" + }, + "isActive": { + "booleanValue": true + }, + "logo": { + "mapValue": { + "fields": { + "type": { + "stringValue": "fallback" + }, + "path": { + "stringValue": "images/airline-logos/__fallback.png" + } + } + } + }, + "memberCount": { + "integerValue": "0" + }, + "openRequestCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "stCode": { + "stringValue": "st_AFH" + }, + "fsCode": { + "nullValue": null + }, + "name": { + "stringValue": "Air Afghanistan International" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "d9709534d16a" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:23.983336Z", + "updateTime": "2026-03-20T19:01:41.753117Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_AFI", + "fields": { + "iata": { + "nullValue": null + }, + "icao": { + "stringValue": "AFI" + }, + "isActive": { + "booleanValue": true + }, + "logo": { + "mapValue": { + "fields": { + "type": { + "stringValue": "fallback" + }, + "path": { + "stringValue": "images/airline-logos/__fallback.png" + } + } + } + }, + "memberCount": { + "integerValue": "0" + }, + "openRequestCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "stCode": { + "stringValue": "st_AFI" + }, + "fsCode": { + "nullValue": null + }, + "name": { + "stringValue": "Africaone" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "d5f9ff54ef84" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:23.988240Z", + "updateTime": "2026-03-20T19:01:42.051254Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_AFJ", + "fields": { + "iata": { + "nullValue": null + }, + "icao": { + "stringValue": "AFJ" + }, + "isActive": { + "booleanValue": true + }, + "logo": { + "mapValue": { + "fields": { + "type": { + "stringValue": "fallback" + }, + "path": { + "stringValue": "images/airline-logos/__fallback.png" + } + } + } + }, + "memberCount": { + "integerValue": "0" + }, + "openRequestCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "stCode": { + "stringValue": "st_AFJ" + }, + "fsCode": { + "nullValue": null + }, + "name": { + "stringValue": "Alliance" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "a1d9805e84b7" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:23.936105Z", + "updateTime": "2026-03-20T19:01:41.774551Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_AFL", + "fields": { + "iata": { + "stringValue": "SU" + }, + "name": { + "stringValue": "Aeroflot" + }, + "icao": { + "stringValue": "AFL" + }, + "logo": { + "mapValue": { + "fields": { + "path": { + "stringValue": "images/airline-logos/scraped/SU.png" + }, + "type": { + "stringValue": "scraped" + } + } + } + }, + "isActive": { + "booleanValue": true + }, + "__index": { + "mapValue": { + "fields": { + "digests": { + "mapValue": { + "fields": { + "logo": { + "stringValue": "11e65dd2d0022704b315901ea0e26328" + }, + "data": { + "stringValue": "0cb3a81c1bf1c26ebca75eef5cd46b60" + } + } + } + }, + "isDirty": { + "booleanValue": false + } + } + } + }, + "hasNotes": { + "booleanValue": true + }, + "fsCode": { + "stringValue": "SU" + }, + "stCode": { + "stringValue": "st_AFL" + }, + "memberCount": { + "integerValue": "431" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "openRequestCount": { + "integerValue": "2" + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "251327c891a0" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:22.767822Z", + "updateTime": "2026-04-21T12:22:18.585460Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_AFM", + "fields": { + "iata": { + "nullValue": null + }, + "memberCount": { + "integerValue": "0" + }, + "icao": { + "stringValue": "AFM" + }, + "isActive": { + "booleanValue": true + }, + "logo": { + "mapValue": { + "fields": { + "path": { + "stringValue": "images/airline-logos/__fallback.png" + }, + "type": { + "stringValue": "fallback" + } + } + } + }, + "name": { + "stringValue": "Aerospeed Formation et Maintenance" + }, + "__index": { + "mapValue": { + "fields": { + "digests": { + "mapValue": { + "fields": { + "logo": { + "stringValue": "eaeecef837cbd2fd38d881bfe837cb7a" + }, + "data": { + "stringValue": "2e6aafa7177f670bb085a9f70e4304e3" + } + } + } + }, + "isDirty": { + "booleanValue": false + } + } + } + }, + "fsCode": { + "stringValue": "AFM" + }, + "stCode": { + "stringValue": "st_AFM" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "b099c3625077" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:23.934450Z", + "updateTime": "2026-03-20T19:01:37.679977Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_AFN", + "fields": { + "iata": { + "nullValue": null + }, + "icao": { + "stringValue": "AFN" + }, + "isActive": { + "booleanValue": true + }, + "logo": { + "mapValue": { + "fields": { + "type": { + "stringValue": "fallback" + }, + "path": { + "stringValue": "images/airline-logos/__fallback.png" + } + } + } + }, + "memberCount": { + "integerValue": "0" + }, + "openRequestCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "stCode": { + "stringValue": "st_AFN" + }, + "fsCode": { + "nullValue": null + }, + "name": { + "stringValue": "Atlantsflug" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "90eab68b3df2" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:23.944338Z", + "updateTime": "2026-03-20T19:01:41.165431Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_AFP", + "fields": { + "iata": { + "nullValue": null + }, + "memberCount": { + "integerValue": "0" + }, + "name": { + "stringValue": "Portuguese Air Force" + }, + "icao": { + "stringValue": "AFP" + }, + "isActive": { + "booleanValue": true + }, + "logo": { + "mapValue": { + "fields": { + "path": { + "stringValue": "images/airline-logos/__fallback.png" + }, + "type": { + "stringValue": "fallback" + } + } + } + }, + "__index": { + "mapValue": { + "fields": { + "digests": { + "mapValue": { + "fields": { + "data": { + "stringValue": "286d069b1ac10a7a04616507fc3cc0e7" + }, + "logo": { + "stringValue": "eaeecef837cbd2fd38d881bfe837cb7a" + } + } + } + }, + "isDirty": { + "booleanValue": false + } + } + } + }, + "fsCode": { + "stringValue": "AFP" + }, + "stCode": { + "stringValue": "st_AFP" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "a37b99731986" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:23.912851Z", + "updateTime": "2026-03-20T19:01:38.221741Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_AFQ", + "fields": { + "iata": { + "nullValue": null + }, + "icao": { + "stringValue": "AFQ" + }, + "isActive": { + "booleanValue": true + }, + "logo": { + "mapValue": { + "fields": { + "type": { + "stringValue": "fallback" + }, + "path": { + "stringValue": "images/airline-logos/__fallback.png" + } + } + } + }, + "memberCount": { + "integerValue": "0" + }, + "openRequestCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "stCode": { + "stringValue": "st_AFQ" + }, + "fsCode": { + "nullValue": null + }, + "name": { + "stringValue": "Alba Servizi Aerotrasporti SPA" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "3cc02d1d232d" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:24.067836Z", + "updateTime": "2026-03-20T19:01:42.073350Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_AFR", + "fields": { + "iata": { + "stringValue": "AF" + }, + "name": { + "stringValue": "Air France" + }, + "icao": { + "stringValue": "AFR" + }, + "logo": { + "mapValue": { + "fields": { + "path": { + "stringValue": "images/airline-logos/scraped/AF.png" + }, + "type": { + "stringValue": "scraped" + } + } + } + }, + "isActive": { + "booleanValue": true + }, + "__index": { + "mapValue": { + "fields": { + "digests": { + "mapValue": { + "fields": { + "logo": { + "stringValue": "a022878ed1194e8595dc51129f9e9d86" + }, + "data": { + "stringValue": "eadf176b640e71a295a8f0d28accd093" + } + } + } + }, + "isDirty": { + "booleanValue": false + } + } + } + }, + "hasNotes": { + "booleanValue": true + }, + "fsCode": { + "stringValue": "AF" + }, + "stCode": { + "stringValue": "st_AFR" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "alliance": { + "stringValue": "skyteam" + }, + "memberCount": { + "integerValue": "6344" + }, + "openRequestCount": { + "integerValue": "911" + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "ba2dd2632873" + } + } + } + } + }, + "createTime": "2026-01-29T14:57:11.298042Z", + "updateTime": "2026-04-22T21:02:17.723668Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_AFS", + "fields": { + "iata": { + "nullValue": null + }, + "icao": { + "stringValue": "AFS" + }, + "isActive": { + "booleanValue": true + }, + "logo": { + "mapValue": { + "fields": { + "type": { + "stringValue": "fallback" + }, + "path": { + "stringValue": "images/airline-logos/__fallback.png" + } + } + } + }, + "memberCount": { + "integerValue": "0" + }, + "openRequestCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "stCode": { + "stringValue": "st_AFS" + }, + "fsCode": { + "nullValue": null + }, + "name": { + "stringValue": "Air Data" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "bc897663d56a" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:24.066618Z", + "updateTime": "2026-03-20T19:01:41.167030Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_AFV", + "fields": { + "iata": { + "nullValue": null + }, + "icao": { + "stringValue": "AFV" + }, + "isActive": { + "booleanValue": true + }, + "logo": { + "mapValue": { + "fields": { + "type": { + "stringValue": "fallback" + }, + "path": { + "stringValue": "images/airline-logos/__fallback.png" + } + } + } + }, + "memberCount": { + "integerValue": "0" + }, + "openRequestCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "stCode": { + "stringValue": "st_AFV" + }, + "fsCode": { + "nullValue": null + }, + "name": { + "stringValue": "Avfinity" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "c92514ce81ca" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:23.981206Z", + "updateTime": "2026-03-20T19:01:41.333954Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_AFW", + "fields": { + "iata": { + "stringValue": "AW" + }, + "name": { + "stringValue": "Africa World Airlines" + }, + "icao": { + "stringValue": "AFW" + }, + "logo": { + "mapValue": { + "fields": { + "path": { + "stringValue": "images/airline-logos/scraped/AFW.png" + }, + "type": { + "stringValue": "scraped" + } + } + } + }, + "isActive": { + "booleanValue": true + }, + "__index": { + "mapValue": { + "fields": { + "digests": { + "mapValue": { + "fields": { + "logo": { + "stringValue": "20cf6c56a8519be48c9e5af9c08bfae3" + }, + "data": { + "stringValue": "0eb628eb0e78785095fd992131aa18b3" + } + } + } + }, + "isDirty": { + "booleanValue": false + } + } + } + }, + "memberCount": { + "integerValue": "4" + }, + "fsCode": { + "stringValue": "AFW" + }, + "stCode": { + "stringValue": "st_AFW" + }, + "openRequestCount": { + "integerValue": "0" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "03111afb8e1f" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:21.374606Z", + "updateTime": "2026-03-20T19:01:40.704508Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_AFX", + "fields": { + "iata": { + "nullValue": null + }, + "icao": { + "stringValue": "AFX" + }, + "isActive": { + "booleanValue": true + }, + "logo": { + "mapValue": { + "fields": { + "type": { + "stringValue": "fallback" + }, + "path": { + "stringValue": "images/airline-logos/__fallback.png" + } + } + } + }, + "memberCount": { + "integerValue": "0" + }, + "openRequestCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "stCode": { + "stringValue": "st_AFX" + }, + "fsCode": { + "nullValue": null + }, + "name": { + "stringValue": "Airfreight Express" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "b192663bdfd6" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:23.981683Z", + "updateTime": "2026-03-20T19:01:41.165611Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_AFY", + "fields": { + "iata": { + "nullValue": null + }, + "icao": { + "stringValue": "AFY" + }, + "isActive": { + "booleanValue": true + }, + "logo": { + "mapValue": { + "fields": { + "type": { + "stringValue": "fallback" + }, + "path": { + "stringValue": "images/airline-logos/__fallback.png" + } + } + } + }, + "memberCount": { + "integerValue": "0" + }, + "openRequestCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "stCode": { + "stringValue": "st_AFY" + }, + "fsCode": { + "nullValue": null + }, + "name": { + "stringValue": "Africa Chartered Services" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "2871e2b0222d" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:24.062423Z", + "updateTime": "2026-03-20T19:01:41.654890Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_AFZ", + "fields": { + "iata": { + "nullValue": null + }, + "memberCount": { + "integerValue": "0" + }, + "name": { + "stringValue": "Atlantic Flight Training Academy" + }, + "icao": { + "stringValue": "AFZ" + }, + "isActive": { + "booleanValue": true + }, + "logo": { + "mapValue": { + "fields": { + "path": { + "stringValue": "images/airline-logos/__fallback.png" + }, + "type": { + "stringValue": "fallback" + } + } + } + }, + "__index": { + "mapValue": { + "fields": { + "digests": { + "mapValue": { + "fields": { + "data": { + "stringValue": "42ae1769ed0df118311bf42a239c3e2f" + }, + "logo": { + "stringValue": "eaeecef837cbd2fd38d881bfe837cb7a" + } + } + } + }, + "isDirty": { + "booleanValue": false + } + } + } + }, + "fsCode": { + "stringValue": "AFZ" + }, + "stCode": { + "stringValue": "st_AFZ" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "f7f8a15bc0bf" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:24.057139Z", + "updateTime": "2026-03-20T19:01:38.634679Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_AGA", + "fields": { + "iata": { + "nullValue": null + }, + "icao": { + "stringValue": "AGA" + }, + "isActive": { + "booleanValue": true + }, + "logo": { + "mapValue": { + "fields": { + "type": { + "stringValue": "fallback" + }, + "path": { + "stringValue": "images/airline-logos/__fallback.png" + } + } + } + }, + "memberCount": { + "integerValue": "0" + }, + "openRequestCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "stCode": { + "stringValue": "st_AGA" + }, + "fsCode": { + "nullValue": null + }, + "name": { + "stringValue": "Ashianeh" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "87aba2c9efdf" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:24.074666Z", + "updateTime": "2026-03-20T19:01:41.748573Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_AGB", + "fields": { + "iata": { + "nullValue": null + }, + "icao": { + "stringValue": "AGB" + }, + "isActive": { + "booleanValue": true + }, + "logo": { + "mapValue": { + "fields": { + "type": { + "stringValue": "fallback" + }, + "path": { + "stringValue": "images/airline-logos/__fallback.png" + } + } + } + }, + "memberCount": { + "integerValue": "0" + }, + "openRequestCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "stCode": { + "stringValue": "st_AGB" + }, + "fsCode": { + "nullValue": null + }, + "name": { + "stringValue": "Air-Service-Gabon" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "7807bfc0d370" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:24.060867Z", + "updateTime": "2026-03-20T19:01:41.480023Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_AGD", + "fields": { + "iata": { + "nullValue": null + }, + "icao": { + "stringValue": "AGD" + }, + "isActive": { + "booleanValue": true + }, + "logo": { + "mapValue": { + "fields": { + "type": { + "stringValue": "fallback" + }, + "path": { + "stringValue": "images/airline-logos/__fallback.png" + } + } + } + }, + "memberCount": { + "integerValue": "0" + }, + "openRequestCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "stCode": { + "stringValue": "st_AGD" + }, + "fsCode": { + "nullValue": null + }, + "name": { + "stringValue": "Agricolair, S.L." + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "cca6b8444ce7" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:24.075212Z", + "updateTime": "2026-03-20T19:01:41.156792Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_AGE", + "fields": { + "isActive": { + "booleanValue": true + }, + "iata": { + "nullValue": null + }, + "logo": { + "mapValue": { + "fields": { + "type": { + "stringValue": "fallback" + }, + "path": { + "stringValue": "images/airline-logos/__fallback.png" + } + } + } + }, + "memberCount": { + "integerValue": "0" + }, + "name": { + "stringValue": "Aeromanage" + }, + "icao": { + "stringValue": "AGE" + }, + "__index": { + "mapValue": { + "fields": { + "digests": { + "mapValue": { + "fields": { + "logo": { + "stringValue": "eaeecef837cbd2fd38d881bfe837cb7a" + }, + "data": { + "stringValue": "baf3fcdb69603ce412d33b32e39301c2" + } + } + } + }, + "isDirty": { + "booleanValue": false + } + } + } + }, + "fsCode": { + "stringValue": "GCA" + }, + "stCode": { + "stringValue": "st_AGE" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "a437b18bae27" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:24.066172Z", + "updateTime": "2026-03-20T19:01:37.855749Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_AGH", + "fields": { + "iata": { + "nullValue": null + }, + "memberCount": { + "integerValue": "0" + }, + "name": { + "stringValue": "Altagna" + }, + "icao": { + "stringValue": "AGH" + }, + "isActive": { + "booleanValue": true + }, + "logo": { + "mapValue": { + "fields": { + "path": { + "stringValue": "images/airline-logos/__fallback.png" + }, + "type": { + "stringValue": "fallback" + } + } + } + }, + "__index": { + "mapValue": { + "fields": { + "digests": { + "mapValue": { + "fields": { + "data": { + "stringValue": "c9fa1fee01055be9d8e4897ff3f82ef9" + }, + "logo": { + "stringValue": "eaeecef837cbd2fd38d881bfe837cb7a" + } + } + } + }, + "isDirty": { + "booleanValue": false + } + } + } + }, + "fsCode": { + "stringValue": "AGH" + }, + "stCode": { + "stringValue": "st_AGH" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "feefe3fd49ac" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:24.068829Z", + "updateTime": "2026-03-20T19:01:41.789435Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_AGK", + "fields": { + "iata": { + "nullValue": null + }, + "icao": { + "stringValue": "AGK" + }, + "isActive": { + "booleanValue": true + }, + "logo": { + "mapValue": { + "fields": { + "type": { + "stringValue": "fallback" + }, + "path": { + "stringValue": "images/airline-logos/__fallback.png" + } + } + } + }, + "memberCount": { + "integerValue": "0" + }, + "openRequestCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "stCode": { + "stringValue": "st_AGK" + }, + "fsCode": { + "nullValue": null + }, + "name": { + "stringValue": "Agat Airlines" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "fa135518da44" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:24.067286Z", + "updateTime": "2026-03-20T19:01:41.759724Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_AGM", + "fields": { + "iata": { + "nullValue": null + }, + "icao": { + "stringValue": "AGM" + }, + "isActive": { + "booleanValue": true + }, + "logo": { + "mapValue": { + "fields": { + "type": { + "stringValue": "fallback" + }, + "path": { + "stringValue": "images/airline-logos/__fallback.png" + } + } + } + }, + "memberCount": { + "integerValue": "0" + }, + "openRequestCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "stCode": { + "stringValue": "st_AGM" + }, + "fsCode": { + "nullValue": null + }, + "name": { + "stringValue": "Aviation West Charters (Scottsdale, Az)" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "caef52de5e6d" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:24.063089Z", + "updateTime": "2026-03-20T19:01:41.162701Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_AGN", + "fields": { + "iata": { + "nullValue": null + }, + "icao": { + "stringValue": "AGN" + }, + "logo": { + "mapValue": { + "fields": { + "type": { + "stringValue": "fallback" + }, + "path": { + "stringValue": "images/airline-logos/__fallback.png" + } + } + } + }, + "memberCount": { + "integerValue": "0" + }, + "__index": { + "mapValue": { + "fields": { + "digests": { + "mapValue": { + "fields": { + "logo": { + "stringValue": "eaeecef837cbd2fd38d881bfe837cb7a" + }, + "data": { + "stringValue": "1c3e18bdafae5308e604bd2b6a04a55e" + } + } + } + }, + "isDirty": { + "booleanValue": false + } + } + } + }, + "fsCode": { + "stringValue": "GN" + }, + "stCode": { + "stringValue": "st_AGN" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "name": { + "stringValue": "Compagnie Nationale Air Gabon" + }, + "isActive": { + "booleanValue": true + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "a0d5198a07b0" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:24.068486Z", + "updateTime": "2026-03-20T19:01:39.007293Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_AGO", + "fields": { + "iata": { + "nullValue": null + }, + "name": { + "stringValue": "Angola Air Charter" + }, + "icao": { + "stringValue": "AGO" + }, + "logo": { + "mapValue": { + "fields": { + "path": { + "stringValue": "images/airline-logos/__fallback.png" + }, + "type": { + "stringValue": "fallback" + } + } + } + }, + "isActive": { + "booleanValue": true + }, + "memberCount": { + "integerValue": "0" + }, + "__index": { + "mapValue": { + "fields": { + "digests": { + "mapValue": { + "fields": { + "logo": { + "stringValue": "eaeecef837cbd2fd38d881bfe837cb7a" + }, + "data": { + "stringValue": "8bdb6b7b1030b8d2d8a6fb2b89e87c40" + } + } + } + }, + "isDirty": { + "booleanValue": false + } + } + } + }, + "fsCode": { + "stringValue": "AGO" + }, + "stCode": { + "stringValue": "st_AGO" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "0e8612498b2f" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:24.067022Z", + "updateTime": "2026-03-20T19:01:37.139662Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_AGP", + "fields": { + "iata": { + "nullValue": null + }, + "memberCount": { + "integerValue": "0" + }, + "icao": { + "stringValue": "AGP" + }, + "isActive": { + "booleanValue": true + }, + "logo": { + "mapValue": { + "fields": { + "path": { + "stringValue": "images/airline-logos/__fallback.png" + }, + "type": { + "stringValue": "fallback" + } + } + } + }, + "__index": { + "mapValue": { + "fields": { + "digests": { + "mapValue": { + "fields": { + "logo": { + "stringValue": "eaeecef837cbd2fd38d881bfe837cb7a" + }, + "data": { + "stringValue": "128172634024943688673f30950c5863" + } + } + } + }, + "isDirty": { + "booleanValue": false + } + } + } + }, + "fsCode": { + "stringValue": "AGP" + }, + "stCode": { + "stringValue": "st_AGP" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "name": { + "stringValue": "Aerfi Group" + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "a1619488dbac" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:24.062344Z", + "updateTime": "2026-03-20T19:01:42.729266Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_AGR", + "fields": { + "iata": { + "nullValue": null + }, + "icao": { + "stringValue": "AGR" + }, + "isActive": { + "booleanValue": true + }, + "logo": { + "mapValue": { + "fields": { + "path": { + "stringValue": "images/airline-logos/__fallback.png" + }, + "type": { + "stringValue": "fallback" + } + } + } + }, + "__index": { + "mapValue": { + "fields": { + "digests": { + "mapValue": { + "fields": { + "data": { + "stringValue": "fe52a35d1b1eb9274f59e7fa66aad915" + }, + "logo": { + "stringValue": "eaeecef837cbd2fd38d881bfe837cb7a" + } + } + } + }, + "isDirty": { + "booleanValue": false + } + } + } + }, + "fsCode": { + "stringValue": "AGR" + }, + "stCode": { + "stringValue": "st_AGR" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "name": { + "stringValue": "Asl" + }, + "alliance": { + "nullValue": null + }, + "memberCount": { + "integerValue": "8" + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "f5610eda1a47" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:24.060517Z", + "updateTime": "2026-04-07T07:15:25.535905Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_AGS", + "fields": { + "iata": { + "nullValue": null + }, + "icao": { + "stringValue": "AGS" + }, + "isActive": { + "booleanValue": true + }, + "logo": { + "mapValue": { + "fields": { + "type": { + "stringValue": "fallback" + }, + "path": { + "stringValue": "images/airline-logos/__fallback.png" + } + } + } + }, + "memberCount": { + "integerValue": "0" + }, + "openRequestCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "stCode": { + "stringValue": "st_AGS" + }, + "fsCode": { + "nullValue": null + }, + "name": { + "stringValue": "Aot Ground Aviation Services" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "992c50782b49" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:24.083320Z", + "updateTime": "2026-03-20T19:01:36.487532Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_AGT", + "fields": { + "icao": { + "stringValue": "AGT" + }, + "isActive": { + "booleanValue": true + }, + "logo": { + "mapValue": { + "fields": { + "type": { + "stringValue": "fallback" + }, + "path": { + "stringValue": "images/airline-logos/__fallback.png" + } + } + } + }, + "memberCount": { + "integerValue": "0" + }, + "openRequestCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "stCode": { + "stringValue": "st_AGT" + }, + "fsCode": { + "nullValue": null + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "iata": { + "nullValue": null + }, + "name": { + "stringValue": "Amadeus Global Travel Distribution S.A." + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "037064f2e2aa" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:24.063374Z", + "updateTime": "2026-03-22T02:00:31.990323Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_AGU", + "fields": { + "name": { + "stringValue": "Angara Airlines" + }, + "icao": { + "stringValue": "AGU" + }, + "isActive": { + "booleanValue": true + }, + "iata": { + "nullValue": null + }, + "logo": { + "mapValue": { + "fields": { + "path": { + "stringValue": "images/airline-logos/__fallback.png" + }, + "type": { + "stringValue": "fallback" + } + } + } + }, + "__index": { + "mapValue": { + "fields": { + "digests": { + "mapValue": { + "fields": { + "data": { + "stringValue": "942dfe0b110d7bc393cd32343ecffb0c" + }, + "logo": { + "stringValue": "eaeecef837cbd2fd38d881bfe837cb7a" + } + } + } + }, + "isDirty": { + "booleanValue": false + } + } + } + }, + "fsCode": { + "stringValue": "IK" + }, + "stCode": { + "stringValue": "st_AGU" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "memberCount": { + "integerValue": "0" + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "172d160292c1" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:24.074666Z", + "updateTime": "2026-03-22T10:26:09.766096Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_AGV", + "fields": { + "isActive": { + "booleanValue": true + }, + "iata": { + "nullValue": null + }, + "name": { + "stringValue": "Air Glaciers" + }, + "icao": { + "stringValue": "AGV" + }, + "logo": { + "mapValue": { + "fields": { + "type": { + "stringValue": "fallback" + }, + "path": { + "stringValue": "images/airline-logos/__fallback.png" + } + } + } + }, + "memberCount": { + "integerValue": "0" + }, + "__index": { + "mapValue": { + "fields": { + "digests": { + "mapValue": { + "fields": { + "logo": { + "stringValue": "eaeecef837cbd2fd38d881bfe837cb7a" + }, + "data": { + "stringValue": "609489d62b3b5724d288a7749f7ca2e0" + } + } + } + }, + "isDirty": { + "booleanValue": false + } + } + } + }, + "fsCode": { + "stringValue": "7Tx" + }, + "stCode": { + "stringValue": "st_AGV" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "5d0e655e06e2" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:24.074715Z", + "updateTime": "2026-03-20T19:01:37.724173Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_AGY", + "fields": { + "name": { + "stringValue": "Air Go Egypt" + }, + "icao": { + "stringValue": "AGY" + }, + "isActive": { + "booleanValue": true + }, + "iata": { + "nullValue": null + }, + "logo": { + "mapValue": { + "fields": { + "path": { + "stringValue": "images/airline-logos/__fallback.png" + }, + "type": { + "stringValue": "fallback" + } + } + } + }, + "__index": { + "mapValue": { + "fields": { + "digests": { + "mapValue": { + "fields": { + "data": { + "stringValue": "681eaf5b2937e18ca04a275dbdd1ec51" + }, + "logo": { + "stringValue": "eaeecef837cbd2fd38d881bfe837cb7a" + } + } + } + }, + "isDirty": { + "booleanValue": false + } + } + } + }, + "fsCode": { + "stringValue": "AGY" + }, + "stCode": { + "stringValue": "st_AGY" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "memberCount": { + "integerValue": "0" + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "b81f3756af3f" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:24.074278Z", + "updateTime": "2026-03-22T10:26:06.440160Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_AHB", + "fields": { + "iata": { + "nullValue": null + }, + "icao": { + "stringValue": "AHB" + }, + "isActive": { + "booleanValue": true + }, + "logo": { + "mapValue": { + "fields": { + "type": { + "stringValue": "fallback" + }, + "path": { + "stringValue": "images/airline-logos/__fallback.png" + } + } + } + }, + "memberCount": { + "integerValue": "0" + }, + "openRequestCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "stCode": { + "stringValue": "st_AHB" + }, + "fsCode": { + "nullValue": null + }, + "name": { + "stringValue": "Air Alboran S.L." + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "6a01e1db2e27" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:24.063099Z", + "updateTime": "2026-03-20T19:01:27.254376Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_AHC", + "fields": { + "iata": { + "nullValue": null + }, + "icao": { + "stringValue": "AHC" + }, + "isActive": { + "booleanValue": true + }, + "logo": { + "mapValue": { + "fields": { + "type": { + "stringValue": "fallback" + }, + "path": { + "stringValue": "images/airline-logos/__fallback.png" + } + } + } + }, + "memberCount": { + "integerValue": "0" + }, + "openRequestCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "stCode": { + "stringValue": "st_AHC" + }, + "fsCode": { + "nullValue": null + }, + "name": { + "stringValue": "Ascent Helicopters" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "f1818173b6b7" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:24.068692Z", + "updateTime": "2026-03-20T19:01:42.368661Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_AHC_2026", + "fields": { + "iata": { + "nullValue": null + }, + "icao": { + "nullValue": null + }, + "name": { + "stringValue": "AZAL Avia Cargo" + }, + "isActive": { + "booleanValue": true + }, + "alliance": { + "nullValue": null + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "memberCount": { + "integerValue": "0" + }, + "openRequestCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "logo": { + "mapValue": { + "fields": { + "type": { + "stringValue": "fallback" + }, + "path": { + "stringValue": "images/airline-logos/__fallback.png" + } + } + } + }, + "stCode": { + "stringValue": "st_AHC_2026" + }, + "fsCode": { + "stringValue": "AHC" + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "bc1ccd589c26" + } + } + } + } + }, + "createTime": "2026-04-13T09:09:19.136094Z", + "updateTime": "2026-04-13T09:09:19.681964Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_AHD", + "fields": { + "iata": { + "nullValue": null + }, + "icao": { + "stringValue": "AHD" + }, + "isActive": { + "booleanValue": true + }, + "logo": { + "mapValue": { + "fields": { + "type": { + "stringValue": "fallback" + }, + "path": { + "stringValue": "images/airline-logos/__fallback.png" + } + } + } + }, + "memberCount": { + "integerValue": "0" + }, + "openRequestCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "stCode": { + "stringValue": "st_AHD" + }, + "fsCode": { + "nullValue": null + }, + "name": { + "stringValue": "Czech Air Handling" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "f79f8bcd95b9" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:24.063562Z", + "updateTime": "2026-03-20T19:01:27.110569Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_AHE", + "fields": { + "iata": { + "nullValue": null + }, + "icao": { + "stringValue": "AHE" + }, + "isActive": { + "booleanValue": true + }, + "logo": { + "mapValue": { + "fields": { + "type": { + "stringValue": "fallback" + }, + "path": { + "stringValue": "images/airline-logos/__fallback.png" + } + } + } + }, + "memberCount": { + "integerValue": "0" + }, + "openRequestCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "stCode": { + "stringValue": "st_AHE" + }, + "fsCode": { + "nullValue": null + }, + "name": { + "stringValue": "Airport Helicopter Ahb" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "a25b33dd27fb" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:24.062899Z", + "updateTime": "2026-03-20T19:01:41.759273Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_AHF", + "fields": { + "iata": { + "nullValue": null + }, + "memberCount": { + "integerValue": "0" + }, + "icao": { + "stringValue": "AHF" + }, + "isActive": { + "booleanValue": true + }, + "logo": { + "mapValue": { + "fields": { + "path": { + "stringValue": "images/airline-logos/__fallback.png" + }, + "type": { + "stringValue": "fallback" + } + } + } + }, + "__index": { + "mapValue": { + "fields": { + "digests": { + "mapValue": { + "fields": { + "data": { + "stringValue": "028021af00e563991f1233a24fcea5ee" + }, + "logo": { + "stringValue": "eaeecef837cbd2fd38d881bfe837cb7a" + } + } + } + }, + "isDirty": { + "booleanValue": false + } + } + } + }, + "fsCode": { + "stringValue": "AHF" + }, + "stCode": { + "stringValue": "st_AHF" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "name": { + "stringValue": "Aspen Helicopters (Oxnard, Ca)" + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "f9fc5bae4341" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:24.066524Z", + "updateTime": "2026-03-20T19:01:37.879065Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_AHH", + "fields": { + "iata": { + "nullValue": null + }, + "icao": { + "stringValue": "AHH" + }, + "isActive": { + "booleanValue": true + }, + "logo": { + "mapValue": { + "fields": { + "type": { + "stringValue": "fallback" + }, + "path": { + "stringValue": "images/airline-logos/__fallback.png" + } + } + } + }, + "memberCount": { + "integerValue": "0" + }, + "openRequestCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "stCode": { + "stringValue": "st_AHH" + }, + "fsCode": { + "nullValue": null + }, + "name": { + "stringValue": "Airplanes Holdings" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "b838aa310e1c" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:24.063048Z", + "updateTime": "2026-03-20T19:01:41.166938Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_AHI", + "fields": { + "iata": { + "nullValue": null + }, + "icao": { + "stringValue": "AHI" + }, + "isActive": { + "booleanValue": true + }, + "logo": { + "mapValue": { + "fields": { + "type": { + "stringValue": "fallback" + }, + "path": { + "stringValue": "images/airline-logos/__fallback.png" + } + } + } + }, + "memberCount": { + "integerValue": "0" + }, + "openRequestCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "stCode": { + "stringValue": "st_AHI" + }, + "fsCode": { + "nullValue": null + }, + "name": { + "stringValue": "Servicios Aereos de Chihuahua Aerochisa, S.A. de C.V." + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "442eb4d31bf1" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:24.062499Z", + "updateTime": "2026-03-20T19:01:42.102050Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_AHJ", + "fields": { + "iata": { + "nullValue": null + }, + "icao": { + "stringValue": "AHJ" + }, + "isActive": { + "booleanValue": true + }, + "logo": { + "mapValue": { + "fields": { + "type": { + "stringValue": "fallback" + }, + "path": { + "stringValue": "images/airline-logos/__fallback.png" + } + } + } + }, + "memberCount": { + "integerValue": "0" + }, + "openRequestCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "stCode": { + "stringValue": "st_AHJ" + }, + "fsCode": { + "nullValue": null + }, + "name": { + "stringValue": "Aviones y Helicopteros Ejecutivos, S.A. de C.V." + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "3cda1dbd4bfa" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:24.075126Z", + "updateTime": "2026-03-20T19:01:41.665005Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_AHK", + "fields": { + "isActive": { + "booleanValue": true + }, + "iata": { + "stringValue": "LD" + }, + "icao": { + "stringValue": "AHK" + }, + "logo": { + "mapValue": { + "fields": { + "type": { + "stringValue": "scraped" + }, + "path": { + "stringValue": "images/airline-logos/scraped/LD.png" + } + } + } + }, + "__index": { + "mapValue": { + "fields": { + "digests": { + "mapValue": { + "fields": { + "logo": { + "stringValue": "7f06f4d8959bc2b06223d7788084e52d" + }, + "data": { + "stringValue": "89b8b4a16abfe9c22692a55436745f85" + } + } + } + }, + "isDirty": { + "booleanValue": false + } + } + } + }, + "fsCode": { + "stringValue": "LD" + }, + "stCode": { + "stringValue": "st_AHK" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "name": { + "stringValue": "Ahk Air Hong Kong" + }, + "alliance": { + "nullValue": null + }, + "memberCount": { + "integerValue": "39" + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "91c50e277826" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:22.750306Z", + "updateTime": "2026-04-09T07:24:12.350243Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_AHL", + "fields": { + "iata": { + "nullValue": null + }, + "icao": { + "stringValue": "AHL" + }, + "isActive": { + "booleanValue": true + }, + "logo": { + "mapValue": { + "fields": { + "type": { + "stringValue": "fallback" + }, + "path": { + "stringValue": "images/airline-logos/__fallback.png" + } + } + } + }, + "memberCount": { + "integerValue": "0" + }, + "openRequestCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "stCode": { + "stringValue": "st_AHL" + }, + "fsCode": { + "nullValue": null + }, + "name": { + "stringValue": "Aerolineas Hidalgo, S.A. de C.V." + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "e05c46e23d8f" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:24.067054Z", + "updateTime": "2026-03-20T19:01:41.759261Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_AHM", + "fields": { + "iata": { + "nullValue": null + }, + "icao": { + "stringValue": "AHM" + }, + "isActive": { + "booleanValue": true + }, + "logo": { + "mapValue": { + "fields": { + "type": { + "stringValue": "fallback" + }, + "path": { + "stringValue": "images/airline-logos/__fallback.png" + } + } + } + }, + "memberCount": { + "integerValue": "0" + }, + "openRequestCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "stCode": { + "stringValue": "st_AHM" + }, + "fsCode": { + "nullValue": null + }, + "name": { + "stringValue": "Atlantis Helicopters de Mexico, S.A. de C.V." + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "3ad2815d5610" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:24.063772Z", + "updateTime": "2026-03-20T19:01:41.165297Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_AHN", + "fields": { + "iata": { + "nullValue": null + }, + "icao": { + "stringValue": "AHN" + }, + "isActive": { + "booleanValue": true + }, + "logo": { + "mapValue": { + "fields": { + "type": { + "stringValue": "fallback" + }, + "path": { + "stringValue": "images/airline-logos/__fallback.png" + } + } + } + }, + "memberCount": { + "integerValue": "0" + }, + "openRequestCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "stCode": { + "stringValue": "st_AHN" + }, + "fsCode": { + "nullValue": null + }, + "name": { + "stringValue": "Avia Group Handling" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "700d0701fdd7" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:24.108091Z", + "updateTime": "2026-03-20T19:01:41.169116Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_AHS", + "fields": { + "iata": { + "nullValue": null + }, + "icao": { + "stringValue": "AHS" + }, + "logo": { + "mapValue": { + "fields": { + "path": { + "stringValue": "images/airline-logos/__fallback.png" + }, + "type": { + "stringValue": "fallback" + } + } + } + }, + "isActive": { + "booleanValue": true + }, + "__index": { + "mapValue": { + "fields": { + "digests": { + "mapValue": { + "fields": { + "logo": { + "stringValue": "eaeecef837cbd2fd38d881bfe837cb7a" + }, + "data": { + "stringValue": "9c7f1c4ccce8501c8ff509fd13913eb2" + } + } + } + }, + "isDirty": { + "booleanValue": false + } + } + } + }, + "memberCount": { + "integerValue": "11" + }, + "fsCode": { + "stringValue": "AHS" + }, + "stCode": { + "stringValue": "st_AHS" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "name": { + "stringValue": "Ahs Air International" + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "0f6f34f64a19" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:24.074444Z", + "updateTime": "2026-03-20T19:01:41.608343Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_AHT", + "fields": { + "iata": { + "nullValue": null + }, + "memberCount": { + "integerValue": "0" + }, + "icao": { + "stringValue": "AHT" + }, + "isActive": { + "booleanValue": true + }, + "logo": { + "mapValue": { + "fields": { + "path": { + "stringValue": "images/airline-logos/__fallback.png" + }, + "type": { + "stringValue": "fallback" + } + } + } + }, + "__index": { + "mapValue": { + "fields": { + "digests": { + "mapValue": { + "fields": { + "data": { + "stringValue": "58fb294ae4da03af87aa1e4b435285c4" + }, + "logo": { + "stringValue": "eaeecef837cbd2fd38d881bfe837cb7a" + } + } + } + }, + "isDirty": { + "booleanValue": false + } + } + } + }, + "fsCode": { + "stringValue": "AHT" + }, + "stCode": { + "stringValue": "st_AHT" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "name": { + "stringValue": "Hta Helicopteros, Lda" + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "09721329d784" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:24.114487Z", + "updateTime": "2026-03-20T19:01:40.256473Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_AHU", + "fields": { + "iata": { + "nullValue": null + }, + "icao": { + "stringValue": "AHU" + }, + "isActive": { + "booleanValue": true + }, + "logo": { + "mapValue": { + "fields": { + "type": { + "stringValue": "fallback" + }, + "path": { + "stringValue": "images/airline-logos/__fallback.png" + } + } + } + }, + "memberCount": { + "integerValue": "0" + }, + "openRequestCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "stCode": { + "stringValue": "st_AHU" + }, + "fsCode": { + "nullValue": null + }, + "name": { + "stringValue": "Abc Air Hungary" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "d9faa582ba7d" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:24.124884Z", + "updateTime": "2026-03-20T19:01:41.749320Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_AHW", + "fields": { + "isActive": { + "booleanValue": true + }, + "__index": { + "mapValue": { + "fields": { + "digests": { + "mapValue": { + "fields": { + "logo": { + "stringValue": "5ba541f60ef04c9794f2820bd811e9db" + }, + "data": { + "stringValue": "95fe0f619a0f432b24ae3eae251582e7" + } + } + } + }, + "isDirty": { + "booleanValue": false + } + } + } + }, + "memberCount": { + "integerValue": "2" + }, + "fsCode": { + "stringValue": "AHW" + }, + "stCode": { + "stringValue": "st_AHW" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "name": { + "stringValue": "Sky Capital Airlines" + }, + "icao": { + "stringValue": "AHW" + }, + "logo": { + "mapValue": { + "fields": { + "path": { + "stringValue": "images/airline-logos/__fallback.png" + }, + "type": { + "stringValue": "fallback" + } + } + } + }, + "alliance": { + "nullValue": null + }, + "iata": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "e60b65e41c86" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:24.139895Z", + "updateTime": "2026-03-20T19:01:38.655283Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_AHX", + "fields": { + "iata": { + "stringValue": "MZ" + }, + "icao": { + "stringValue": "AHX" + }, + "logo": { + "mapValue": { + "fields": { + "path": { + "stringValue": "images/airline-logos/scraped/AHX.png" + }, + "type": { + "stringValue": "scraped" + } + } + } + }, + "isActive": { + "booleanValue": true + }, + "memberCount": { + "integerValue": "0" + }, + "name": { + "stringValue": "Amakusa Airlines" + }, + "__index": { + "mapValue": { + "fields": { + "digests": { + "mapValue": { + "fields": { + "logo": { + "stringValue": "be905772ba8639f2867c5e7846b671a8" + }, + "data": { + "stringValue": "21c48ab9cac88bf6005ed7fee44ee37b" + } + } + } + }, + "isDirty": { + "booleanValue": false + } + } + } + }, + "fsCode": { + "stringValue": "AHX" + }, + "stCode": { + "stringValue": "st_AHX" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "f29af95cd6ea" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:22.755321Z", + "updateTime": "2026-03-20T19:01:43.799232Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_AHY", + "fields": { + "iata": { + "stringValue": "J2" + }, + "icao": { + "stringValue": "AHY" + }, + "logo": { + "mapValue": { + "fields": { + "path": { + "stringValue": "images/airline-logos/scraped/J2.png" + }, + "type": { + "stringValue": "scraped" + } + } + } + }, + "isActive": { + "booleanValue": true + }, + "name": { + "stringValue": "Azerbaijan Airlines" + }, + "__index": { + "mapValue": { + "fields": { + "digests": { + "mapValue": { + "fields": { + "logo": { + "stringValue": "d68bc6a9aaf05bbcf76b5830becb82a0" + }, + "data": { + "stringValue": "967327b5db68c4fb704058e7225c7992" + } + } + } + }, + "isDirty": { + "booleanValue": false + } + } + } + }, + "memberCount": { + "integerValue": "3" + }, + "fsCode": { + "stringValue": "J2" + }, + "stCode": { + "stringValue": "st_AHY" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "openRequestCount": { + "integerValue": "0" + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "8f3d874ded06" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:22.002954Z", + "updateTime": "2026-04-20T21:35:12.302826Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_AIA", + "fields": { + "icao": { + "stringValue": "AIA" + }, + "isActive": { + "booleanValue": true + }, + "iata": { + "stringValue": "8R" + }, + "logo": { + "mapValue": { + "fields": { + "path": { + "stringValue": "images/airline-logos/scraped/AIA.png" + }, + "type": { + "stringValue": "scraped" + } + } + } + }, + "name": { + "stringValue": "Amelia" + }, + "__index": { + "mapValue": { + "fields": { + "digests": { + "mapValue": { + "fields": { + "logo": { + "stringValue": "be8def296852ad2ab796e182b2f6d925" + }, + "data": { + "stringValue": "727f3657fa288e34d777462e33217a77" + } + } + } + }, + "isDirty": { + "booleanValue": false + } + } + } + }, + "fsCode": { + "stringValue": "AIA" + }, + "stCode": { + "stringValue": "st_AIA" + }, + "openRequestCount": { + "integerValue": "0" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "memberCount": { + "integerValue": "39" + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "bcdd45f74073" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:21.388823Z", + "updateTime": "2026-04-01T20:03:04.434263Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_AIB", + "fields": { + "iata": { + "nullValue": null + }, + "icao": { + "stringValue": "AIB" + }, + "logo": { + "mapValue": { + "fields": { + "path": { + "stringValue": "images/airline-logos/__fallback.png" + }, + "type": { + "stringValue": "fallback" + } + } + } + }, + "isActive": { + "booleanValue": true + }, + "__index": { + "mapValue": { + "fields": { + "digests": { + "mapValue": { + "fields": { + "logo": { + "stringValue": "eaeecef837cbd2fd38d881bfe837cb7a" + }, + "data": { + "stringValue": "b637ccc191ffd02d0b90ec0c5540429c" + } + } + } + }, + "isDirty": { + "booleanValue": false + } + } + } + }, + "fsCode": { + "stringValue": "AIB" + }, + "stCode": { + "stringValue": "st_AIB" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "name": { + "stringValue": "Airbus Industrie" + }, + "alliance": { + "nullValue": null + }, + "memberCount": { + "integerValue": "8" + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "4ca192bf0b89" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:24.136397Z", + "updateTime": "2026-03-22T10:25:56.946554Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_AIC", + "fields": { + "iata": { + "stringValue": "AI" + }, + "name": { + "stringValue": "Air India" + }, + "icao": { + "stringValue": "AIC" + }, + "logo": { + "mapValue": { + "fields": { + "path": { + "stringValue": "images/airline-logos/scraped/AI.png" + }, + "type": { + "stringValue": "scraped" + } + } + } + }, + "isActive": { + "booleanValue": true + }, + "__index": { + "mapValue": { + "fields": { + "digests": { + "mapValue": { + "fields": { + "logo": { + "stringValue": "2d004a9516408b1de1673aac079ae831" + }, + "data": { + "stringValue": "a4f7b60ed1a4ed22cfb9cf84381b5216" + } + } + } + }, + "isDirty": { + "booleanValue": false + } + } + } + }, + "hasNotes": { + "booleanValue": true + }, + "fsCode": { + "stringValue": "AI" + }, + "stCode": { + "stringValue": "st_AIC" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "alliance": { + "stringValue": "star-alliance" + }, + "memberCount": { + "integerValue": "3019" + }, + "openRequestCount": { + "integerValue": "46" + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "a4d1f3fbf673" + } + } + } + } + }, + "createTime": "2026-01-29T15:01:15.394169Z", + "updateTime": "2026-04-22T20:57:07.119992Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_AIE", + "fields": { + "iata": { + "stringValue": "3H" + }, + "name": { + "stringValue": "Air Inuit" + }, + "icao": { + "stringValue": "AIE" + }, + "logo": { + "mapValue": { + "fields": { + "path": { + "stringValue": "images/airline-logos/scraped/3H.png" + }, + "type": { + "stringValue": "scraped" + } + } + } + }, + "isActive": { + "booleanValue": true + }, + "__index": { + "mapValue": { + "fields": { + "digests": { + "mapValue": { + "fields": { + "logo": { + "stringValue": "d4c43e05106f063e23be6b3de813e9f2" + }, + "data": { + "stringValue": "8959ea4db080f2e13b99492f71657b8e" + } + } + } + }, + "isDirty": { + "booleanValue": false + } + } + } + }, + "hasNotes": { + "booleanValue": true + }, + "fsCode": { + "stringValue": "3H" + }, + "stCode": { + "stringValue": "st_AIE" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "openRequestCount": { + "integerValue": "0" + }, + "memberCount": { + "integerValue": "670" + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "1ebd87f2cd81" + } + } + } + } + }, + "createTime": "2026-01-29T22:21:16.811641Z", + "updateTime": "2026-04-22T16:00:25.123019Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_AIF", + "fields": { + "iata": { + "nullValue": null + }, + "icao": { + "stringValue": "AIF" + }, + "isActive": { + "booleanValue": true + }, + "logo": { + "mapValue": { + "fields": { + "type": { + "stringValue": "fallback" + }, + "path": { + "stringValue": "images/airline-logos/__fallback.png" + } + } + } + }, + "memberCount": { + "integerValue": "0" + }, + "openRequestCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "stCode": { + "stringValue": "st_AIF" + }, + "fsCode": { + "nullValue": null + }, + "name": { + "stringValue": "Aim Aviation" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "f39e9d5ff2f7" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:24.070883Z", + "updateTime": "2026-03-20T19:01:42.564878Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_AIG", + "fields": { + "iata": { + "nullValue": null + }, + "memberCount": { + "integerValue": "0" + }, + "name": { + "stringValue": "Air Inter Gabon" + }, + "icao": { + "stringValue": "AIG" + }, + "isActive": { + "booleanValue": true + }, + "logo": { + "mapValue": { + "fields": { + "path": { + "stringValue": "images/airline-logos/__fallback.png" + }, + "type": { + "stringValue": "fallback" + } + } + } + }, + "__index": { + "mapValue": { + "fields": { + "digests": { + "mapValue": { + "fields": { + "data": { + "stringValue": "e4d9ad342e89695cf683bb37d8a53072" + }, + "logo": { + "stringValue": "eaeecef837cbd2fd38d881bfe837cb7a" + } + } + } + }, + "isDirty": { + "booleanValue": false + } + } + } + }, + "fsCode": { + "stringValue": "AIG" + }, + "stCode": { + "stringValue": "st_AIG" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "4b15e1f78ef1" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:24.135972Z", + "updateTime": "2026-03-20T19:01:39.204302Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_AIH", + "fields": { + "iata": { + "stringValue": "KJ" + }, + "icao": { + "stringValue": "AIH" + }, + "logo": { + "mapValue": { + "fields": { + "path": { + "stringValue": "images/airline-logos/scraped/KJx.png" + }, + "type": { + "stringValue": "scraped" + } + } + } + }, + "isActive": { + "booleanValue": true + }, + "__index": { + "mapValue": { + "fields": { + "digests": { + "mapValue": { + "fields": { + "logo": { + "stringValue": "27e439c5a92be1877352f11419ecb238" + }, + "data": { + "stringValue": "bbf16917e71a50088e467a92fe58e906" + } + } + } + }, + "isDirty": { + "booleanValue": false + } + } + } + }, + "fsCode": { + "stringValue": "KJx" + }, + "stCode": { + "stringValue": "st_AIH" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "name": { + "stringValue": "Airzeta" + }, + "alliance": { + "nullValue": null + }, + "memberCount": { + "integerValue": "8" + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "3e8182c452b8" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:22.703665Z", + "updateTime": "2026-03-22T10:26:09.764Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_AII", + "fields": { + "iata": { + "nullValue": null + }, + "icao": { + "stringValue": "AII" + }, + "isActive": { + "booleanValue": true + }, + "logo": { + "mapValue": { + "fields": { + "type": { + "stringValue": "fallback" + }, + "path": { + "stringValue": "images/airline-logos/__fallback.png" + } + } + } + }, + "memberCount": { + "integerValue": "0" + }, + "openRequestCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "stCode": { + "stringValue": "st_AII" + }, + "fsCode": { + "nullValue": null + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "name": { + "stringValue": "A247" + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "77fa7562c6e4" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:24.080344Z", + "updateTime": "2026-03-20T19:01:41.174247Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_AIJ", + "fields": { + "name": { + "stringValue": "Interjet" + }, + "icao": { + "stringValue": "AIJ" + }, + "isActive": { + "booleanValue": true + }, + "iata": { + "nullValue": null + }, + "logo": { + "mapValue": { + "fields": { + "path": { + "stringValue": "images/airline-logos/__fallback.png" + }, + "type": { + "stringValue": "fallback" + } + } + } + }, + "__index": { + "mapValue": { + "fields": { + "digests": { + "mapValue": { + "fields": { + "data": { + "stringValue": "a29ffbc23e499344c4e02c3f9602b72a" + }, + "logo": { + "stringValue": "eaeecef837cbd2fd38d881bfe837cb7a" + } + } + } + }, + "isDirty": { + "booleanValue": false + } + } + } + }, + "memberCount": { + "integerValue": "2" + }, + "fsCode": { + "stringValue": "4O" + }, + "stCode": { + "stringValue": "st_AIJ" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "f08e79a6e158" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:24.118763Z", + "updateTime": "2026-03-04T10:23:20.266385Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_AIJ_2025", + "fields": { + "iata": { + "nullValue": null + }, + "icao": { + "nullValue": null + }, + "name": { + "stringValue": "Interjet" + }, + "isActive": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "memberCount": { + "integerValue": "3" + }, + "openRequestCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "logo": { + "mapValue": { + "fields": { + "type": { + "stringValue": "fallback" + }, + "path": { + "stringValue": "images/airline-logos/__fallback.png" + } + } + } + }, + "stCode": { + "stringValue": "st_AIJ_2025" + }, + "fsCode": { + "stringValue": "AIJ" + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "59b2364a8b55" + } + } + } + } + }, + "createTime": "2026-03-22T17:19:52.536248Z", + "updateTime": "2026-03-22T17:19:52.930766Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_AIK", + "fields": { + "iata": { + "nullValue": null + }, + "icao": { + "stringValue": "AIK" + }, + "logo": { + "mapValue": { + "fields": { + "path": { + "stringValue": "images/airline-logos/__fallback.png" + }, + "type": { + "stringValue": "fallback" + } + } + } + }, + "name": { + "stringValue": "African Airlines International" + }, + "__index": { + "mapValue": { + "fields": { + "digests": { + "mapValue": { + "fields": { + "logo": { + "stringValue": "eaeecef837cbd2fd38d881bfe837cb7a" + }, + "data": { + "stringValue": "6087dbf5d6d06109ffea108869c0de2b" + } + } + } + }, + "isDirty": { + "booleanValue": false + } + } + } + }, + "memberCount": { + "integerValue": "2" + }, + "fsCode": { + "stringValue": "AIK" + }, + "stCode": { + "stringValue": "st_AIK" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "isActive": { + "booleanValue": true + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "e90c253c4524" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:24.135664Z", + "updateTime": "2026-03-20T19:01:38.001228Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_AIM", + "fields": { + "iata": { + "nullValue": null + }, + "icao": { + "stringValue": "AIM" + }, + "isActive": { + "booleanValue": true + }, + "logo": { + "mapValue": { + "fields": { + "type": { + "stringValue": "fallback" + }, + "path": { + "stringValue": "images/airline-logos/__fallback.png" + } + } + } + }, + "memberCount": { + "integerValue": "0" + }, + "openRequestCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "stCode": { + "stringValue": "st_AIM" + }, + "fsCode": { + "nullValue": null + }, + "name": { + "stringValue": "Trabajos Aereos Murcianos S.L." + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "37a2654b0c90" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:24.126704Z", + "updateTime": "2026-03-20T19:01:41.222823Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_AIN", + "fields": { + "iata": { + "nullValue": null + }, + "icao": { + "stringValue": "AIN" + }, + "logo": { + "mapValue": { + "fields": { + "path": { + "stringValue": "images/airline-logos/__fallback.png" + }, + "type": { + "stringValue": "fallback" + } + } + } + }, + "memberCount": { + "integerValue": "0" + }, + "__index": { + "mapValue": { + "fields": { + "digests": { + "mapValue": { + "fields": { + "logo": { + "stringValue": "eaeecef837cbd2fd38d881bfe837cb7a" + }, + "data": { + "stringValue": "a27a14498477a5728a3007c375ff5965" + } + } + } + }, + "isDirty": { + "booleanValue": false + } + } + } + }, + "fsCode": { + "stringValue": "AIN" + }, + "stCode": { + "stringValue": "st_AIN" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "name": { + "stringValue": "African International Airways" + }, + "isActive": { + "booleanValue": true + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "624df75e3468" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:24.136044Z", + "updateTime": "2026-03-20T19:01:39.163866Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_AIO", + "fields": { + "iata": { + "nullValue": null + }, + "icao": { + "stringValue": "AIO" + }, + "isActive": { + "booleanValue": true + }, + "logo": { + "mapValue": { + "fields": { + "type": { + "stringValue": "fallback" + }, + "path": { + "stringValue": "images/airline-logos/__fallback.png" + } + } + } + }, + "memberCount": { + "integerValue": "0" + }, + "openRequestCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "stCode": { + "stringValue": "st_AIO" + }, + "fsCode": { + "nullValue": null + }, + "name": { + "stringValue": "Chief of Staff, United States Air Force (Andrews Afb, Md)" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "98818443a333" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:24.117156Z", + "updateTime": "2026-03-20T19:01:41.632019Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_AIP", + "fields": { + "icao": { + "stringValue": "AIP" + }, + "isActive": { + "booleanValue": true + }, + "iata": { + "nullValue": null + }, + "logo": { + "mapValue": { + "fields": { + "path": { + "stringValue": "images/airline-logos/__fallback.png" + }, + "type": { + "stringValue": "fallback" + } + } + } + }, + "__index": { + "mapValue": { + "fields": { + "digests": { + "mapValue": { + "fields": { + "data": { + "stringValue": "cbcd99790c67c5cf99ce44fe6f7cf435" + }, + "logo": { + "stringValue": "eaeecef837cbd2fd38d881bfe837cb7a" + } + } + } + }, + "isDirty": { + "booleanValue": false + } + } + } + }, + "fsCode": { + "stringValue": "5A" + }, + "stCode": { + "stringValue": "st_AIP" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "name": { + "stringValue": "Alpine Aviation" + }, + "memberCount": { + "integerValue": "0" + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "9b184fdae24c" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:24.131538Z", + "updateTime": "2026-03-27T08:37:48.757027Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_AIQ", + "fields": { + "iata": { + "stringValue": "FD" + }, + "name": { + "stringValue": "Thai AirAsia" + }, + "icao": { + "stringValue": "AIQ" + }, + "logo": { + "mapValue": { + "fields": { + "path": { + "stringValue": "images/airline-logos/scraped/FD.png" + }, + "type": { + "stringValue": "scraped" + } + } + } + }, + "isActive": { + "booleanValue": true + }, + "__index": { + "mapValue": { + "fields": { + "digests": { + "mapValue": { + "fields": { + "logo": { + "stringValue": "7946d8cb9c4378fc42e76e32fe7b3e6f" + }, + "data": { + "stringValue": "fe645bbdf2926a05061384246ed5356f" + } + } + } + }, + "isDirty": { + "booleanValue": false + } + } + } + }, + "memberCount": { + "integerValue": "11" + }, + "fsCode": { + "stringValue": "FD" + }, + "stCode": { + "stringValue": "st_AIQ" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "openRequestCount": { + "integerValue": "1" + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "a5275d4a9fd1" + } + } + } + } + }, + "createTime": "2026-01-30T03:24:46.468981Z", + "updateTime": "2026-04-22T04:15:38.818691Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_AIR_2025", + "fields": { + "iata": { + "nullValue": null + }, + "icao": { + "nullValue": null + }, + "name": { + "stringValue": "Airlift International" + }, + "isActive": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "memberCount": { + "integerValue": "2" + }, + "openRequestCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "logo": { + "mapValue": { + "fields": { + "type": { + "stringValue": "fallback" + }, + "path": { + "stringValue": "images/airline-logos/__fallback.png" + } + } + } + }, + "stCode": { + "stringValue": "st_AIR_2025" + }, + "fsCode": { + "stringValue": "AIR" + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "aea23ea68dde" + } + } + } + } + }, + "createTime": "2026-03-22T17:19:39.416021Z", + "updateTime": "2026-03-22T17:19:39.760197Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_AIS", + "fields": { + "iata": { + "nullValue": null + }, + "icao": { + "stringValue": "AIS" + }, + "isActive": { + "booleanValue": true + }, + "logo": { + "mapValue": { + "fields": { + "type": { + "stringValue": "fallback" + }, + "path": { + "stringValue": "images/airline-logos/__fallback.png" + } + } + } + }, + "memberCount": { + "integerValue": "0" + }, + "openRequestCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "stCode": { + "stringValue": "st_AIS" + }, + "fsCode": { + "nullValue": null + }, + "name": { + "stringValue": "Air Sureste" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "deac245b0fbe" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:24.126450Z", + "updateTime": "2026-03-20T19:01:42.536423Z" + }, + { + "name": "projects/stafftraveler-prod/databases/(default)/documents/airlinesBySt/st_AIT", + "fields": { + "iata": { + "nullValue": null + }, + "icao": { + "stringValue": "AIT" + }, + "isActive": { + "booleanValue": true + }, + "logo": { + "mapValue": { + "fields": { + "type": { + "stringValue": "fallback" + }, + "path": { + "stringValue": "images/airline-logos/__fallback.png" + } + } + } + }, + "memberCount": { + "integerValue": "0" + }, + "openRequestCount": { + "integerValue": "0" + }, + "hasNotes": { + "booleanValue": false + }, + "stCode": { + "stringValue": "st_AIT" + }, + "fsCode": { + "nullValue": null + }, + "name": { + "stringValue": "Air Taurus" + }, + "isControlledDuplicate": { + "booleanValue": false + }, + "alliance": { + "nullValue": null + }, + "__checksums": { + "mapValue": { + "fields": { + "typesense": { + "stringValue": "03f0d916040c" + } + } + } + } + }, + "createTime": "2026-01-30T08:48:24.114299Z", + "updateTime": "2026-03-20T19:01:41.525081Z" + } +] \ No newline at end of file diff --git a/api_docs/stafftraveler_captures/createLoadsRequests_AA2178_request.json b/api_docs/stafftraveler_captures/createLoadsRequests_AA2178_request.json new file mode 100644 index 0000000..b89f79e --- /dev/null +++ b/api_docs/stafftraveler_captures/createLoadsRequests_AA2178_request.json @@ -0,0 +1,31 @@ +[ + { + "id": "a23d6f8379f5109eddeb5bbf78bdccc1", + "id_v2": "0d9d0702b203d224ace3e6eb94531dde", + "id_v3": "AA_2178_DFW_2026_04_22", + "airlineId": "AA", + "flightNumber": 2178, + "flightCode": "AA2178", + "departureAirportId": "DFW", + "arrivalAirportId": "LAS", + "departureTimeLocal": "2026-04-22T16:45:00-05:00", + "departureTimeUtc": "2026-04-22T21:45:00Z", + "arrivalTimeLocal": "2026-04-22T17:46:00-07:00", + "arrivalTimeUtc": "2026-04-23T00:46:00Z", + "flightEquipmentId": "32Q", + "durationMinutes": 181, + "isCargoFlight": false, + "airlineStCode": "st_AAL", + "departureAirportIata": "DFW", + "arrivalAirportIata": "LAS", + "flightEquipmentIata": "32Q", + "seatsTotal": 196, + "seatsByClass": { + "first": 0, + "business": 20, + "premiumEconomy": 0, + "economy": 176 + }, + "isPriorityRequest": false + } +] diff --git a/api_docs/stafftraveler_captures/createLoadsRequests_AA2178_response.json b/api_docs/stafftraveler_captures/createLoadsRequests_AA2178_response.json new file mode 100644 index 0000000..64aaeeb --- /dev/null +++ b/api_docs/stafftraveler_captures/createLoadsRequests_AA2178_response.json @@ -0,0 +1 @@ +{"payload":{"numberOfRequests":0,"verifiedRequests":[{"flightId":"AA_2178_DFW_2026_04_22","isExisting":true,"isDuplicateForUser":true,"isRequestUpdateForUser":false,"hasDeparted":false,"isCancelled":false,"isPriorityRequest":false,"hasRecentLoads":false,"scheduledFlight":{"id":"a23d6f8379f5109eddeb5bbf78bdccc1","id_v2":"0d9d0702b203d224ace3e6eb94531dde","id_v3":"AA_2178_DFW_2026_04_22","airlineId":"AA","flightCode":"AA2178","flightNumber":2178,"departureAirportId":"DFW","arrivalAirportId":"LAS","departureTimeLocal":"2026-04-22T16:45:00-05:00","arrivalTimeLocal":"2026-04-22T17:46:00-07:00","departureTimeUtc":"2026-04-22T21:45:00Z","arrivalTimeUtc":"2026-04-23T00:46:00Z","flightEquipmentId":"32Q","durationMinutes":181,"isCargoFlight":false,"isPriorityRequest":false,"airlineStCode":"st_AAL","departureAirportIata":"DFW","arrivalAirportIata":"LAS","flightEquipmentIata":"32Q","seatsTotal":196,"seatsByClass":{"first":0,"business":20,"premiumEconomy":0,"economy":176}}}],"hasSufficientCredits":true,"numberOfRequestsPaidFor":0,"numberOfRequestsPaidForPriority":0}} \ No newline at end of file diff --git a/api_docs/stafftraveler_captures/createLoadsRequests_AA2178_response_headers.txt b/api_docs/stafftraveler_captures/createLoadsRequests_AA2178_response_headers.txt new file mode 100644 index 0000000..36407d9 --- /dev/null +++ b/api_docs/stafftraveler_captures/createLoadsRequests_AA2178_response_headers.txt @@ -0,0 +1,12 @@ +HTTP/2 200 +access-control-allow-credentials: true +cache-control: no-store +content-type: application/json +vary: Origin +x-cloud-trace-context: 7f1fda60d8d56f8106053d5e7df58556 +date: Wed, 22 Apr 2026 18:40:54 GMT +server: Google Frontend +content-length: 1070 +via: 1.1 google +alt-svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000 + diff --git a/api_docs/stafftraveler_captures/derivedLoadsReports_AA2178_request.json b/api_docs/stafftraveler_captures/derivedLoadsReports_AA2178_request.json new file mode 100644 index 0000000..6d45940 --- /dev/null +++ b/api_docs/stafftraveler_captures/derivedLoadsReports_AA2178_request.json @@ -0,0 +1,16 @@ +{ + "structuredQuery": { + "from": [{"collectionId": "derivedLoadsReports"}], + "where": { + "fieldFilter": { + "field": {"fieldPath": "flightId"}, + "op": "EQUAL", + "value": {"stringValue": "AA_2178_DFW_2026_04_22"} + } + }, + "orderBy": [ + {"field": {"fieldPath": "createdAt"}, "direction": "DESCENDING"}, + {"field": {"fieldPath": "__name__"}, "direction": "DESCENDING"} + ] + } +} diff --git a/api_docs/stafftraveler_captures/derivedLoadsReports_AA2178_response.json b/api_docs/stafftraveler_captures/derivedLoadsReports_AA2178_response.json new file mode 100644 index 0000000..29e565b --- /dev/null +++ b/api_docs/stafftraveler_captures/derivedLoadsReports_AA2178_response.json @@ -0,0 +1,92 @@ +[{ + "document": { + "name": "projects/stafftraveler-prod/databases/(default)/documents/derivedLoadsReports/xskQc2a2oAVAwZk3Rfhg", + "fields": { + "flightId": { + "stringValue": "AA_2178_DFW_2026_04_22" + }, + "openSeats": { + "mapValue": { + "fields": { + "first": { + "mapValue": { + "fields": { + "count": { + "integerValue": "3" + } + } + } + }, + "eco": { + "mapValue": { + "fields": { + "count": { + "integerValue": "9" + } + } + } + } + } + } + }, + "staffListing": { + "mapValue": { + "fields": { + "type": { + "stringValue": "available" + }, + "count": { + "integerValue": "6" + }, + "countByClass": { + "mapValue": {} + } + } + } + }, + "responseTimeSeconds": { + "integerValue": "196" + }, + "numberOfCreditsRewarded": { + "integerValue": "1" + }, + "isFlagged": { + "booleanValue": false + }, + "seatsAvailabilityScore": { + "doubleValue": 0.79 + }, + "hasClosedRequest": { + "booleanValue": true + }, + "isJackpotHit": { + "booleanValue": false + }, + "isPriorityRequest": { + "booleanValue": false + }, + "expireAt": { + "timestampValue": "2026-07-21T21:45:00Z" + }, + "createdAt": { + "timestampValue": "2026-04-22T18:42:51.313Z" + }, + "creatorName": { + "stringValue": "M" + }, + "creatorImageUrl": { + "stringValue": "https://images.stafftraveler.com/avatars/happysuitcase.png" + }, + "creatorImagePath": { + "stringValue": "avatars/happysuitcase.png" + }, + "isFlaggedConfirmed": { + "booleanValue": false + } + }, + "createTime": "2026-04-22T18:42:51.422202Z", + "updateTime": "2026-04-22T18:42:51.530333Z" + }, + "readTime": "2026-04-22T19:11:47.260445Z" +} +] \ No newline at end of file diff --git a/api_docs/stafftraveler_captures/firestore_listen_targets_and_queries.txt b/api_docs/stafftraveler_captures/firestore_listen_targets_and_queries.txt new file mode 100644 index 0000000..a920976 --- /dev/null +++ b/api_docs/stafftraveler_captures/firestore_listen_targets_and_queries.txt @@ -0,0 +1,90 @@ +[POST] https://firestore.googleapis.com/google.firestore.v1.Firestore/Listen/channel?VER=8&database=projects%2Fstafftraveler-prod%2Fdatabases%2F(default)&RID=80724&CVER=22&X-HTTP-Session-Id=gsessionid&zx=rtxwctgfqxp6&t=1 => [200] + Request body: headers=X-Goog-Api-Client%3Agl-js%2F%20fire%2F12.12.0%0D%0AContent-Type%3Atext%2Fplain%0D%0AX-Firebase-GMPID%3A1%3A628258099825%3Aweb%3A35b20eaab4d441894041d0%0D%0Ax-goog-api-key%3AAIzaSyD82Hiqx-jAbHF8faMGSveqLw8CdX8a-Uc%0D%0A&count=1&ofs=0&req0___data__=%7B%22database%22%3A%22projects%2Fstafftraveler-prod%2Fdatabases%2F(default)%22%2C%22addTarget%22%3A%7B%22documents%22%3A%7B%22documents%22%3A%5B%22projects%2Fstafftraveler-prod%2Fdatabases%2F(default)%2Fdocuments%2F__system%2Fmaintenance%22%5D%7D%2C%22targetId%22%3A2%7D%7D +[POST] https://firestore.googleapis.com/google.firestore.v1.Firestore/Listen/channel?VER=8&database=projects%2Fstafftraveler-prod%2Fdatabases%2F(default)&RID=9158&CVER=22&X-HTTP-Session-Id=gsessionid&zx=f83g0aueufis&t=1 => [200] + Request body: headers=X-Goog-Api-Client%3Agl-js%2F%20fire%2F12.12.0%0D%0AContent-Type%3Atext%2Fplain%0D%0AX-Firebase-GMPID%3A1%3A628258099825%3Aweb%3A35b20eaab4d441894041d0%0D%0AAuthorization%3ABearer%20eyJhbGciOiJSUzI1NiIsImtpZCI6IjNiMDk1NzQ3YmY4MzMxZWE0YWQ1M2YzNzBjNjMyNjAxNzliMGQyM2EiLCJ0eXAiOiJKV1QifQ.eyJpc19yZWdpc3RlcmVkIjp0cnVlLCJpc3MiOiJodHRwczovL3NlY3VyZXRva2VuLmdvb2dsZS5jb20vc3RhZmZ0cmF2ZWxlci1wcm9kIiwiYXVkIjoic3RhZmZ0cmF2ZWxlci1wcm9kIiwiYXV0aF90aW1lIjoxNzc2ODg0OTM2LCJ1c2VyX2lkIjoiM05OUGVzUU1pTVJOWW5QbXVRemg2dzJZS3loMSIsInN1YiI6IjNOTlBlc1FNaU1STlluUG11UXpoNncyWUt5aDEiLCJpYXQiOjE3NzY4ODQ5MzYsImV4cCI6MTc3Njg4ODUzNiwiZW1haWwiOiJzdGFmZnRyYXZlbGVyQHRyZXltYWlsLmNvbSIsImVtYWlsX3ZlcmlmaWVkIjpmYWxzZSwiZmlyZWJhc2UiOnsiaWRlbnRpdGllcyI6eyJlbWFpbCI6WyJzdGFmZnRyYXZlbGVyQHRyZXltYWlsLmNvbSJdfSwic2lnbl9pbl9wcm92aWRlciI6InBhc3N3b3JkIn19.Oi2cpketCmgJ7ND8R8SY4FNdeySoWOF2Bgzwptb1qopDDa4eEvJrXutcvrIP408MhOedXOVdSSB4J4gLZ3w3nZA939N-3DHj-rREpraF2XtuabOnragy2e9FoSSWJsB1chyvCidBh1b-b53AzdnFV3kspwtr5C7xoxSZOf32p5mwIENdFtBZg30wjRd3ZdNIbSiVbUouUcQIRiIdPdwtYG8wfAYztonWwW4K8hK4hN5LK4v6PitFOpC70Baoh-4LpfCEPGrk5zxrbPMOc95ydgWCL8Av6eFRiHJgMd4juUvzOwOOJ_77z7QCSRLwpu5XKc9Em2D5l0_UiEyn79SQfg%0D%0Ax-goog-api-key%3AAIzaSyD82Hiqx-jAbHF8faMGSveqLw8CdX8a-Uc%0D%0A&count=1&ofs=0&req0___data__=%7B%22database%22%3A%22projects%2Fstafftraveler-prod%2Fdatabases%2F(default)%22%2C%22addTarget%22%3A%7B%22documents%22%3A%7B%22documents%22%3A%5B%22projects%2Fstafftraveler-prod%2Fdatabases%2F(default)%2Fdocuments%2F__system%2Fmaintenance%22%5D%7D%2C%22targetId%22%3A2%2C%22resumeToken%22%3A%22CgkIh8rNkpSClAM%3D%22%2C%22expectedCount%22%3A1%7D%7D +[POST] https://firestore.googleapis.com/google.firestore.v1.Firestore/Listen/channel?VER=8&database=projects%2Fstafftraveler-prod%2Fdatabases%2F(default)&gsessionid=HFF5EogcWeK0-zCr8BqQiP1LG6gZwKIpFMpTR4_G01uQgOSO1g6VYA&SID=a-XMXYp-Vwc6W3fSsZRnKA&RID=9159&AID=4&zx=d2hrtufyduql&t=1 => [200] + Request body: count=1&ofs=1&req0___data__=%7B%22database%22%3A%22projects%2Fstafftraveler-prod%2Fdatabases%2F(default)%22%2C%22addTarget%22%3A%7B%22documents%22%3A%7B%22documents%22%3A%5B%22projects%2Fstafftraveler-prod%2Fdatabases%2F(default)%2Fdocuments%2Fusers%2F3NNPesQMiMRNYnPmuQzh6w2YKyh1%22%5D%7D%2C%22targetId%22%3A4%7D%7D +[POST] https://firestore.googleapis.com/google.firestore.v1.Firestore/Listen/channel?VER=8&database=projects%2Fstafftraveler-prod%2Fdatabases%2F(default)&gsessionid=HFF5EogcWeK0-zCr8BqQiP1LG6gZwKIpFMpTR4_G01uQgOSO1g6VYA&SID=a-XMXYp-Vwc6W3fSsZRnKA&RID=9160&AID=8&zx=tobs2rmzgvt7&t=1 => [200] + Request body: count=1&ofs=2&req0___data__=%7B%22database%22%3A%22projects%2Fstafftraveler-prod%2Fdatabases%2F(default)%22%2C%22removeTarget%22%3A4%7D +[POST] https://firestore.googleapis.com/google.firestore.v1.Firestore/Listen/channel?VER=8&database=projects%2Fstafftraveler-prod%2Fdatabases%2F(default)&gsessionid=HFF5EogcWeK0-zCr8BqQiP1LG6gZwKIpFMpTR4_G01uQgOSO1g6VYA&SID=a-XMXYp-Vwc6W3fSsZRnKA&RID=9161&AID=8&zx=gv4pfepp0iut&t=1 => [200] + Request body: count=1&ofs=3&req0___data__=%7B%22database%22%3A%22projects%2Fstafftraveler-prod%2Fdatabases%2F(default)%22%2C%22addTarget%22%3A%7B%22documents%22%3A%7B%22documents%22%3A%5B%22projects%2Fstafftraveler-prod%2Fdatabases%2F(default)%2Fdocuments%2Fusers%2F3NNPesQMiMRNYnPmuQzh6w2YKyh1%22%5D%7D%2C%22targetId%22%3A4%2C%22resumeToken%22%3A%22CgkIoKrGm5SClAM%3D%22%2C%22expectedCount%22%3A1%7D%7D +[POST] https://firestore.googleapis.com/google.firestore.v1.Firestore/Listen/channel?VER=8&database=projects%2Fstafftraveler-prod%2Fdatabases%2F(default)&gsessionid=HFF5EogcWeK0-zCr8BqQiP1LG6gZwKIpFMpTR4_G01uQgOSO1g6VYA&SID=a-XMXYp-Vwc6W3fSsZRnKA&RID=9162&AID=8&zx=d0m0hj89m00m&t=1 => [200] + Request body: count=1&ofs=4&req0___data__=%7B%22database%22%3A%22projects%2Fstafftraveler-prod%2Fdatabases%2F(default)%22%2C%22addTarget%22%3A%7B%22documents%22%3A%7B%22documents%22%3A%5B%22projects%2Fstafftraveler-prod%2Fdatabases%2F(default)%2Fdocuments%2FuserHints%2F3NNPesQMiMRNYnPmuQzh6w2YKyh1%22%5D%7D%2C%22targetId%22%3A6%7D%7D +[POST] https://firestore.googleapis.com/google.firestore.v1.Firestore/Listen/channel?VER=8&database=projects%2Fstafftraveler-prod%2Fdatabases%2F(default)&gsessionid=HFF5EogcWeK0-zCr8BqQiP1LG6gZwKIpFMpTR4_G01uQgOSO1g6VYA&SID=a-XMXYp-Vwc6W3fSsZRnKA&RID=9163&AID=8&zx=ir7thnhgqtrz&t=1 => [200] + Request body: count=1&ofs=5&req0___data__=%7B%22database%22%3A%22projects%2Fstafftraveler-prod%2Fdatabases%2F(default)%22%2C%22addTarget%22%3A%7B%22documents%22%3A%7B%22documents%22%3A%5B%22projects%2Fstafftraveler-prod%2Fdatabases%2F(default)%2Fdocuments%2FuserRequestCounters%2F3NNPesQMiMRNYnPmuQzh6w2YKyh1%22%5D%7D%2C%22targetId%22%3A8%7D%7D +[POST] https://firestore.googleapis.com/google.firestore.v1.Firestore/Listen/channel?VER=8&database=projects%2Fstafftraveler-prod%2Fdatabases%2F(default)&gsessionid=HFF5EogcWeK0-zCr8BqQiP1LG6gZwKIpFMpTR4_G01uQgOSO1g6VYA&SID=a-XMXYp-Vwc6W3fSsZRnKA&RID=9164&AID=8&zx=w1dq4sb4jwq5&t=1 => [200] + Request body: count=1&ofs=6&req0___data__=%7B%22database%22%3A%22projects%2Fstafftraveler-prod%2Fdatabases%2F(default)%22%2C%22addTarget%22%3A%7B%22documents%22%3A%7B%22documents%22%3A%5B%22projects%2Fstafftraveler-prod%2Fdatabases%2F(default)%2Fdocuments%2FuserFlightSearchHistory%2F3NNPesQMiMRNYnPmuQzh6w2YKyh1%22%5D%7D%2C%22targetId%22%3A10%7D%7D +[POST] https://firestore.googleapis.com/google.firestore.v1.Firestore/Listen/channel?VER=8&database=projects%2Fstafftraveler-prod%2Fdatabases%2F(default)&gsessionid=HFF5EogcWeK0-zCr8BqQiP1LG6gZwKIpFMpTR4_G01uQgOSO1g6VYA&SID=a-XMXYp-Vwc6W3fSsZRnKA&RID=9165&AID=8&zx=ecl2ritbm1hb&t=1 => [200] + Request body: count=1&ofs=7&req0___data__=%7B%22database%22%3A%22projects%2Fstafftraveler-prod%2Fdatabases%2F(default)%22%2C%22addTarget%22%3A%7B%22documents%22%3A%7B%22documents%22%3A%5B%22projects%2Fstafftraveler-prod%2Fdatabases%2F(default)%2Fdocuments%2FuserMetrics%2F3NNPesQMiMRNYnPmuQzh6w2YKyh1%22%5D%7D%2C%22targetId%22%3A12%7D%7D +[POST] https://firestore.googleapis.com/google.firestore.v1.Firestore/Listen/channel?VER=8&database=projects%2Fstafftraveler-prod%2Fdatabases%2F(default)&gsessionid=HFF5EogcWeK0-zCr8BqQiP1LG6gZwKIpFMpTR4_G01uQgOSO1g6VYA&SID=a-XMXYp-Vwc6W3fSsZRnKA&RID=9166&AID=8&zx=wvohx872im0n&t=1 => [200] + Request body: count=1&ofs=8&req0___data__=%7B%22database%22%3A%22projects%2Fstafftraveler-prod%2Fdatabases%2F(default)%22%2C%22addTarget%22%3A%7B%22query%22%3A%7B%22structuredQuery%22%3A%7B%22from%22%3A%5B%7B%22collectionId%22%3A%22autoRequestRecords%22%7D%5D%2C%22where%22%3A%7B%22compositeFilter%22%3A%7B%22op%22%3A%22AND%22%2C%22filters%22%3A%5B%7B%22fieldFilter%22%3A%7B%22field%22%3A%7B%22fieldPath%22%3A%22subscribedUserIds%22%7D%2C%22op%22%3A%22ARRAY_CONTAINS%22%2C%22value%22%3A%7B%22stringValue%22%3A%223NNPesQMiMRNYnPmuQzh6w2YKyh1%22%7D%7D%7D%2C%7B%22fieldFilter%22%3A%7B%22field%22%3A%7B%22fieldPath%22%3A%22isActive%22%7D%2C%22op%22%3A%22EQUAL%22%2C%22value%22%3A%7B%22booleanValue%22%3Atrue%7D%7D%7D%5D%7D%7D%2C%22orderBy%22%3A%5B%7B%22field%22%3A%7B%22fieldPath%22%3A%22__name__%22%7D%2C%22direction%22%3A%22ASCENDING%22%7D%5D%7D%2C%22parent%22%3A%22projects%2Fstafftraveler-prod%2Fdatabases%2F(default)%2Fdocuments%22%7D%2C%22targetId%22%3A14%7D%7D +[POST] https://firestore.googleapis.com/google.firestore.v1.Firestore/Listen/channel?VER=8&database=projects%2Fstafftraveler-prod%2Fdatabases%2F(default)&gsessionid=HFF5EogcWeK0-zCr8BqQiP1LG6gZwKIpFMpTR4_G01uQgOSO1g6VYA&SID=a-XMXYp-Vwc6W3fSsZRnKA&RID=9167&AID=8&zx=vnoas3e35db&t=1 => [200] + Request body: count=1&ofs=9&req0___data__=%7B%22database%22%3A%22projects%2Fstafftraveler-prod%2Fdatabases%2F(default)%22%2C%22addTarget%22%3A%7B%22query%22%3A%7B%22structuredQuery%22%3A%7B%22from%22%3A%5B%7B%22collectionId%22%3A%22pinnedFlights%22%7D%5D%2C%22orderBy%22%3A%5B%7B%22field%22%3A%7B%22fieldPath%22%3A%22__name__%22%7D%2C%22direction%22%3A%22ASCENDING%22%7D%5D%7D%2C%22parent%22%3A%22projects%2Fstafftraveler-prod%2Fdatabases%2F(default)%2Fdocuments%2Fusers%2F3NNPesQMiMRNYnPmuQzh6w2YKyh1%22%7D%2C%22targetId%22%3A16%7D%7D +[POST] https://firestore.googleapis.com/google.firestore.v1.Firestore/Listen/channel?VER=8&database=projects%2Fstafftraveler-prod%2Fdatabases%2F(default)&gsessionid=HFF5EogcWeK0-zCr8BqQiP1LG6gZwKIpFMpTR4_G01uQgOSO1g6VYA&SID=a-XMXYp-Vwc6W3fSsZRnKA&RID=9168&AID=8&zx=laziejjz5fkl&t=1 => [200] + Request body: count=1&ofs=10&req0___data__=%7B%22database%22%3A%22projects%2Fstafftraveler-prod%2Fdatabases%2F(default)%22%2C%22addTarget%22%3A%7B%22documents%22%3A%7B%22documents%22%3A%5B%22projects%2Fstafftraveler-prod%2Fdatabases%2F(default)%2Fdocuments%2FairportsByIata%2FDAL%22%5D%7D%2C%22targetId%22%3A18%7D%7D +[POST] https://firestore.googleapis.com/google.firestore.v1.Firestore/Listen/channel?VER=8&database=projects%2Fstafftraveler-prod%2Fdatabases%2F(default)&gsessionid=HFF5EogcWeK0-zCr8BqQiP1LG6gZwKIpFMpTR4_G01uQgOSO1g6VYA&SID=a-XMXYp-Vwc6W3fSsZRnKA&RID=9169&AID=9&zx=nicmm3gy44sg&t=1 => [200] + Request body: count=1&ofs=11&req0___data__=%7B%22database%22%3A%22projects%2Fstafftraveler-prod%2Fdatabases%2F(default)%22%2C%22addTarget%22%3A%7B%22documents%22%3A%7B%22documents%22%3A%5B%22projects%2Fstafftraveler-prod%2Fdatabases%2F(default)%2Fdocuments%2FairportsByIata%2FDFW%22%5D%7D%2C%22targetId%22%3A20%7D%7D +[POST] https://firestore.googleapis.com/google.firestore.v1.Firestore/Listen/channel?VER=8&database=projects%2Fstafftraveler-prod%2Fdatabases%2F(default)&gsessionid=HFF5EogcWeK0-zCr8BqQiP1LG6gZwKIpFMpTR4_G01uQgOSO1g6VYA&SID=a-XMXYp-Vwc6W3fSsZRnKA&RID=9170&AID=9&zx=xxcf384tpe8r&t=1 => [200] + Request body: count=1&ofs=12&req0___data__=%7B%22database%22%3A%22projects%2Fstafftraveler-prod%2Fdatabases%2F(default)%22%2C%22addTarget%22%3A%7B%22documents%22%3A%7B%22documents%22%3A%5B%22projects%2Fstafftraveler-prod%2Fdatabases%2F(default)%2Fdocuments%2FairportsByIata%2FLAS%22%5D%7D%2C%22targetId%22%3A22%7D%7D +[POST] https://firestore.googleapis.com/google.firestore.v1.Firestore/Listen/channel?VER=8&database=projects%2Fstafftraveler-prod%2Fdatabases%2F(default)&gsessionid=HFF5EogcWeK0-zCr8BqQiP1LG6gZwKIpFMpTR4_G01uQgOSO1g6VYA&SID=a-XMXYp-Vwc6W3fSsZRnKA&RID=9171&AID=45&zx=zaws1snjd3dz&t=1 => [200] + Request body: count=1&ofs=13&req0___data__=%7B%22database%22%3A%22projects%2Fstafftraveler-prod%2Fdatabases%2F(default)%22%2C%22removeTarget%22%3A18%7D +[POST] https://firestore.googleapis.com/google.firestore.v1.Firestore/Listen/channel?VER=8&database=projects%2Fstafftraveler-prod%2Fdatabases%2F(default)&gsessionid=HFF5EogcWeK0-zCr8BqQiP1LG6gZwKIpFMpTR4_G01uQgOSO1g6VYA&SID=a-XMXYp-Vwc6W3fSsZRnKA&RID=9172&AID=45&zx=foe8j91xoirj&t=1 => [200] + Request body: count=1&ofs=14&req0___data__=%7B%22database%22%3A%22projects%2Fstafftraveler-prod%2Fdatabases%2F(default)%22%2C%22removeTarget%22%3A20%7D +[POST] https://firestore.googleapis.com/google.firestore.v1.Firestore/Listen/channel?VER=8&database=projects%2Fstafftraveler-prod%2Fdatabases%2F(default)&gsessionid=HFF5EogcWeK0-zCr8BqQiP1LG6gZwKIpFMpTR4_G01uQgOSO1g6VYA&SID=a-XMXYp-Vwc6W3fSsZRnKA&RID=9173&AID=45&zx=ytkmsor9yf6y&t=1 => [200] + Request body: count=1&ofs=15&req0___data__=%7B%22database%22%3A%22projects%2Fstafftraveler-prod%2Fdatabases%2F(default)%22%2C%22removeTarget%22%3A22%7D +[POST] https://firestore.googleapis.com/google.firestore.v1.Firestore/Listen/channel?VER=8&database=projects%2Fstafftraveler-prod%2Fdatabases%2F(default)&gsessionid=HFF5EogcWeK0-zCr8BqQiP1LG6gZwKIpFMpTR4_G01uQgOSO1g6VYA&SID=a-XMXYp-Vwc6W3fSsZRnKA&RID=9174&AID=45&zx=z4vurp4vvm9d&t=1 => [200] + Request body: count=1&ofs=16&req0___data__=%7B%22database%22%3A%22projects%2Fstafftraveler-prod%2Fdatabases%2F(default)%22%2C%22addTarget%22%3A%7B%22documents%22%3A%7B%22documents%22%3A%5B%22projects%2Fstafftraveler-prod%2Fdatabases%2F(default)%2Fdocuments%2FuserPriorityRequestCounters%2F3NNPesQMiMRNYnPmuQzh6w2YKyh1%22%5D%7D%2C%22targetId%22%3A24%7D%7D +[POST] https://firestore.googleapis.com/google.firestore.v1.Firestore/Listen/channel?VER=8&database=projects%2Fstafftraveler-prod%2Fdatabases%2F(default)&gsessionid=HFF5EogcWeK0-zCr8BqQiP1LG6gZwKIpFMpTR4_G01uQgOSO1g6VYA&SID=a-XMXYp-Vwc6W3fSsZRnKA&RID=9175&AID=45&zx=m5cg66e9m500&t=1 => [200] + Request body: count=1&ofs=17&req0___data__=%7B%22database%22%3A%22projects%2Fstafftraveler-prod%2Fdatabases%2F(default)%22%2C%22addTarget%22%3A%7B%22documents%22%3A%7B%22documents%22%3A%5B%22projects%2Fstafftraveler-prod%2Fdatabases%2F(default)%2Fdocuments%2FuserCredits%2F3NNPesQMiMRNYnPmuQzh6w2YKyh1%22%5D%7D%2C%22targetId%22%3A26%7D%7D +[POST] https://firestore.googleapis.com/google.firestore.v1.Firestore/Listen/channel?VER=8&database=projects%2Fstafftraveler-prod%2Fdatabases%2F(default)&gsessionid=HFF5EogcWeK0-zCr8BqQiP1LG6gZwKIpFMpTR4_G01uQgOSO1g6VYA&SID=a-XMXYp-Vwc6W3fSsZRnKA&RID=9176&AID=45&zx=tdpwb8n7t6n5&t=1 => [200] + Request body: count=1&ofs=18&req0___data__=%7B%22database%22%3A%22projects%2Fstafftraveler-prod%2Fdatabases%2F(default)%22%2C%22addTarget%22%3A%7B%22query%22%3A%7B%22structuredQuery%22%3A%7B%22from%22%3A%5B%7B%22collectionId%22%3A%22trackedFlights%22%7D%5D%2C%22where%22%3A%7B%22compositeFilter%22%3A%7B%22op%22%3A%22AND%22%2C%22filters%22%3A%5B%7B%22fieldFilter%22%3A%7B%22field%22%3A%7B%22fieldPath%22%3A%22status%22%7D%2C%22op%22%3A%22EQUAL%22%2C%22value%22%3A%7B%22stringValue%22%3A%22open%22%7D%7D%7D%2C%7B%22fieldFilter%22%3A%7B%22field%22%3A%7B%22fieldPath%22%3A%22hasDeparted%22%7D%2C%22op%22%3A%22EQUAL%22%2C%22value%22%3A%7B%22booleanValue%22%3Afalse%7D%7D%7D%2C%7B%22fieldFilter%22%3A%7B%22field%22%3A%7B%22fieldPath%22%3A%22scheduledFlight.airlineStCode%22%7D%2C%22op%22%3A%22EQUAL%22%2C%22value%22%3A%7B%22stringValue%22%3A%22st_SWA%22%7D%7D%7D%5D%7D%7D%2C%22orderBy%22%3A%5B%7B%22field%22%3A%7B%22fieldPath%22%3A%22priority%22%7D%2C%22direction%22%3A%22DESCENDING%22%7D%2C%7B%22field%22%3A%7B%22fieldPath%22%3A%22scheduledFlight.departureTimeUtc%22%7D%2C%22direction%22%3A%22ASCENDING%22%7D%2C%7B%22field%22%3A%7B%22fieldPath%22%3A%22__name__%22%7D%2C%22direction%22%3A%22ASCENDING%22%7D%5D%2C%22limit%22%3A25%7D%2C%22parent%22%3A%22projects%2Fstafftraveler-prod%2Fdatabases%2F(default)%2Fdocuments%22%7D%2C%22targetId%22%3A28%7D%7D +[POST] https://firestore.googleapis.com/google.firestore.v1.Firestore/Listen/channel?VER=8&database=projects%2Fstafftraveler-prod%2Fdatabases%2F(default)&gsessionid=HFF5EogcWeK0-zCr8BqQiP1LG6gZwKIpFMpTR4_G01uQgOSO1g6VYA&SID=a-XMXYp-Vwc6W3fSsZRnKA&RID=9177&AID=45&zx=vjcqutd14qa4&t=1 => [200] + Request body: count=1&ofs=19&req0___data__=%7B%22database%22%3A%22projects%2Fstafftraveler-prod%2Fdatabases%2F(default)%22%2C%22addTarget%22%3A%7B%22query%22%3A%7B%22structuredQuery%22%3A%7B%22from%22%3A%5B%7B%22collectionId%22%3A%22trackedFlights%22%7D%5D%2C%22where%22%3A%7B%22compositeFilter%22%3A%7B%22op%22%3A%22AND%22%2C%22filters%22%3A%5B%7B%22fieldFilter%22%3A%7B%22field%22%3A%7B%22fieldPath%22%3A%22status%22%7D%2C%22op%22%3A%22EQUAL%22%2C%22value%22%3A%7B%22stringValue%22%3A%22open%22%7D%7D%7D%2C%7B%22fieldFilter%22%3A%7B%22field%22%3A%7B%22fieldPath%22%3A%22hasDeparted%22%7D%2C%22op%22%3A%22EQUAL%22%2C%22value%22%3A%7B%22booleanValue%22%3Afalse%7D%7D%7D%2C%7B%22fieldFilter%22%3A%7B%22field%22%3A%7B%22fieldPath%22%3A%22isPriorityRequest%22%7D%2C%22op%22%3A%22EQUAL%22%2C%22value%22%3A%7B%22booleanValue%22%3Atrue%7D%7D%7D%2C%7B%22fieldFilter%22%3A%7B%22field%22%3A%7B%22fieldPath%22%3A%22scheduledFlight.airlineStCode%22%7D%2C%22op%22%3A%22IN%22%2C%22value%22%3A%7B%22arrayValue%22%3A%7B%22values%22%3A%5B%7B%22stringValue%22%3A%22st_SWA%22%7D%5D%7D%7D%7D%7D%5D%7D%7D%2C%22orderBy%22%3A%5B%7B%22field%22%3A%7B%22fieldPath%22%3A%22__name__%22%7D%2C%22direction%22%3A%22ASCENDING%22%7D%5D%2C%22limit%22%3A25%7D%2C%22parent%22%3A%22projects%2Fstafftraveler-prod%2Fdatabases%2F(default)%2Fdocuments%22%7D%2C%22targetId%22%3A30%7D%7D +[POST] https://firestore.googleapis.com/google.firestore.v1.Firestore/Listen/channel?VER=8&database=projects%2Fstafftraveler-prod%2Fdatabases%2F(default)&gsessionid=HFF5EogcWeK0-zCr8BqQiP1LG6gZwKIpFMpTR4_G01uQgOSO1g6VYA&SID=a-XMXYp-Vwc6W3fSsZRnKA&RID=9178&AID=45&zx=kyar8tjvbzg0&t=1 => [200] + Request body: count=1&ofs=20&req0___data__=%7B%22database%22%3A%22projects%2Fstafftraveler-prod%2Fdatabases%2F(default)%22%2C%22addTarget%22%3A%7B%22documents%22%3A%7B%22documents%22%3A%5B%22projects%2Fstafftraveler-prod%2Fdatabases%2F(default)%2Fdocuments%2FuserAchievements%2F3NNPesQMiMRNYnPmuQzh6w2YKyh1%22%5D%7D%2C%22targetId%22%3A32%7D%7D +[POST] https://firestore.googleapis.com/google.firestore.v1.Firestore/Listen/channel?VER=8&database=projects%2Fstafftraveler-prod%2Fdatabases%2F(default)&gsessionid=HFF5EogcWeK0-zCr8BqQiP1LG6gZwKIpFMpTR4_G01uQgOSO1g6VYA&SID=a-XMXYp-Vwc6W3fSsZRnKA&RID=9179&AID=45&zx=xf2m25yhj5d&t=1 => [200] + Request body: count=1&ofs=21&req0___data__=%7B%22database%22%3A%22projects%2Fstafftraveler-prod%2Fdatabases%2F(default)%22%2C%22addTarget%22%3A%7B%22documents%22%3A%7B%22documents%22%3A%5B%22projects%2Fstafftraveler-prod%2Fdatabases%2F(default)%2Fdocuments%2FairportsByIata%2FIAH%22%5D%7D%2C%22targetId%22%3A34%7D%7D +[POST] https://firestore.googleapis.com/google.firestore.v1.Firestore/Listen/channel?VER=8&database=projects%2Fstafftraveler-prod%2Fdatabases%2F(default)&gsessionid=HFF5EogcWeK0-zCr8BqQiP1LG6gZwKIpFMpTR4_G01uQgOSO1g6VYA&SID=a-XMXYp-Vwc6W3fSsZRnKA&RID=9180&AID=45&zx=8fhokbce9hm7&t=1 => [200] + Request body: count=1&ofs=22&req0___data__=%7B%22database%22%3A%22projects%2Fstafftraveler-prod%2Fdatabases%2F(default)%22%2C%22addTarget%22%3A%7B%22documents%22%3A%7B%22documents%22%3A%5B%22projects%2Fstafftraveler-prod%2Fdatabases%2F(default)%2Fdocuments%2FairportsByIata%2FCLL%22%5D%7D%2C%22targetId%22%3A36%7D%7D +[POST] https://firestore.googleapis.com/google.firestore.v1.Firestore/Listen/channel?VER=8&database=projects%2Fstafftraveler-prod%2Fdatabases%2F(default)&gsessionid=HFF5EogcWeK0-zCr8BqQiP1LG6gZwKIpFMpTR4_G01uQgOSO1g6VYA&SID=a-XMXYp-Vwc6W3fSsZRnKA&RID=9181&AID=45&zx=41ahzajvy06l&t=1 => [200] + Request body: count=6&ofs=23&req0___data__=%7B%22database%22%3A%22projects%2Fstafftraveler-prod%2Fdatabases%2F(default)%22%2C%22addTarget%22%3A%7B%22documents%22%3A%7B%22documents%22%3A%5B%22projects%2Fstafftraveler-prod%2Fdatabases%2F(default)%2Fdocuments%2FairportsByIata%2FSJU%22%5D%7D%2C%22targetId%22%3A38%7D%7D&req1___data__=%7B%22database%22%3A%22projects%2Fstafftraveler-prod%2Fdatabases%2F(default)%22%2C%22addTarget%22%3A%7B%22documents%22%3A%7B%22documents%22%3A%5B%22projects%2Fstafftraveler-prod%2Fdatabases%2F(default)%2Fdocuments%2FairportsByIata%2FBOS%22%5D%7D%2C%22targetId%22%3A40%7D%7D&req2___data__=%7B%22database%22%3A%22projects%2Fstafftraveler-prod%2Fdatabases%2F(default)%22%2C%22addTarget%22%3A%7B%22documents%22%3A%7B%22documents%22%3A%5B%22projects%2Fstafftraveler-prod%2Fdatabases%2F(default)%2Fdocuments%2FairportsByIata%2FCUN%22%5D%7D%2C%22targetId%22%3A42%7D%7D&req3___data__=%7B%22database%22%3A%22projects%2Fstafftraveler-prod%2Fdatabases%2F(default)%22%2C%22addTarget%22%3A%7B%22documents%22%3A%7B%22documents%22%3A%5B%22projects%2Fstafftraveler-prod%2Fdatabases%2F(default)%2Fdocuments%2FairportsByIata%2FSYD%22%5D%7D%2C%22targetId%22%3A44%7D%7D&req4___data__=%7B%22database%22%3A%22projects%2Fstafftraveler-prod%2Fdatabases%2F(default)%22%2C%22addTarget%22%3A%7B%22documents%22%3A%7B%22documents%22%3A%5B%22projects%2Fstafftraveler-prod%2Fdatabases%2F(default)%2Fdocuments%2FairportsByIata%2FALH%22%5D%7D%2C%22targetId%22%3A46%7D%7D&req5___data__=%7B%22database%22%3A%22projects%2Fstafftraveler-prod%2Fdatabases%2F(default)%22%2C%22addTarget%22%3A%7B%22documents%22%3A%7B%22documents%22%3A%5B%22projects%2Fstafftraveler-prod%2Fdatabases%2F(default)%2Fdocuments%2FairportsByIata%2FNTL%22%5D%7D%2C%22targetId%22%3A48%7D%7D +[POST] https://firestore.googleapis.com/google.firestore.v1.Firestore/Listen/channel?VER=8&database=projects%2Fstafftraveler-prod%2Fdatabases%2F(default)&gsessionid=HFF5EogcWeK0-zCr8BqQiP1LG6gZwKIpFMpTR4_G01uQgOSO1g6VYA&SID=a-XMXYp-Vwc6W3fSsZRnKA&RID=9182&AID=93&zx=7u11wjuyzy3c&t=1 => [200] + Request body: count=1&ofs=29&req0___data__=%7B%22database%22%3A%22projects%2Fstafftraveler-prod%2Fdatabases%2F(default)%22%2C%22addTarget%22%3A%7B%22query%22%3A%7B%22structuredQuery%22%3A%7B%22from%22%3A%5B%7B%22collectionId%22%3A%22trackedFlights%22%7D%5D%2C%22where%22%3A%7B%22compositeFilter%22%3A%7B%22op%22%3A%22AND%22%2C%22filters%22%3A%5B%7B%22fieldFilter%22%3A%7B%22field%22%3A%7B%22fieldPath%22%3A%22subscribedUsers.%603NNPesQMiMRNYnPmuQzh6w2YKyh1%60%22%7D%2C%22op%22%3A%22EQUAL%22%2C%22value%22%3A%7B%22booleanValue%22%3Atrue%7D%7D%7D%2C%7B%22fieldFilter%22%3A%7B%22field%22%3A%7B%22fieldPath%22%3A%22isDeleted%22%7D%2C%22op%22%3A%22EQUAL%22%2C%22value%22%3A%7B%22booleanValue%22%3Afalse%7D%7D%7D%5D%7D%7D%2C%22orderBy%22%3A%5B%7B%22field%22%3A%7B%22fieldPath%22%3A%22__name__%22%7D%2C%22direction%22%3A%22ASCENDING%22%7D%5D%7D%2C%22parent%22%3A%22projects%2Fstafftraveler-prod%2Fdatabases%2F(default)%2Fdocuments%22%7D%2C%22targetId%22%3A50%7D%7D +[POST] https://firestore.googleapis.com/google.firestore.v1.Firestore/Listen/channel?VER=8&database=projects%2Fstafftraveler-prod%2Fdatabases%2F(default)&gsessionid=HFF5EogcWeK0-zCr8BqQiP1LG6gZwKIpFMpTR4_G01uQgOSO1g6VYA&SID=a-XMXYp-Vwc6W3fSsZRnKA&RID=9183&AID=93&zx=16mwafi45zsw&t=1 => [200] + Request body: count=1&ofs=30&req0___data__=%7B%22database%22%3A%22projects%2Fstafftraveler-prod%2Fdatabases%2F(default)%22%2C%22addTarget%22%3A%7B%22query%22%3A%7B%22structuredQuery%22%3A%7B%22from%22%3A%5B%7B%22collectionId%22%3A%22connectingFlights%22%7D%5D%2C%22orderBy%22%3A%5B%7B%22field%22%3A%7B%22fieldPath%22%3A%22__name__%22%7D%2C%22direction%22%3A%22ASCENDING%22%7D%5D%2C%22limit%22%3A500%7D%2C%22parent%22%3A%22projects%2Fstafftraveler-prod%2Fdatabases%2F(default)%2Fdocuments%2Fusers%2F3NNPesQMiMRNYnPmuQzh6w2YKyh1%22%7D%2C%22targetId%22%3A52%7D%7D +[POST] https://firestore.googleapis.com/google.firestore.v1.Firestore/Listen/channel?VER=8&database=projects%2Fstafftraveler-prod%2Fdatabases%2F(default)&gsessionid=HFF5EogcWeK0-zCr8BqQiP1LG6gZwKIpFMpTR4_G01uQgOSO1g6VYA&SID=a-XMXYp-Vwc6W3fSsZRnKA&RID=9184&AID=104&zx=lhcjya6q73dp&t=1 => [200] + Request body: count=1&ofs=31&req0___data__=%7B%22database%22%3A%22projects%2Fstafftraveler-prod%2Fdatabases%2F(default)%22%2C%22removeTarget%22%3A34%7D +[POST] https://firestore.googleapis.com/google.firestore.v1.Firestore/Listen/channel?VER=8&database=projects%2Fstafftraveler-prod%2Fdatabases%2F(default)&gsessionid=HFF5EogcWeK0-zCr8BqQiP1LG6gZwKIpFMpTR4_G01uQgOSO1g6VYA&SID=a-XMXYp-Vwc6W3fSsZRnKA&RID=9185&AID=104&zx=6qh74wz9it19&t=1 => [200] + Request body: count=1&ofs=32&req0___data__=%7B%22database%22%3A%22projects%2Fstafftraveler-prod%2Fdatabases%2F(default)%22%2C%22removeTarget%22%3A36%7D +[POST] https://firestore.googleapis.com/google.firestore.v1.Firestore/Listen/channel?VER=8&database=projects%2Fstafftraveler-prod%2Fdatabases%2F(default)&gsessionid=HFF5EogcWeK0-zCr8BqQiP1LG6gZwKIpFMpTR4_G01uQgOSO1g6VYA&SID=a-XMXYp-Vwc6W3fSsZRnKA&RID=9186&AID=104&zx=66tex5sth8cf&t=1 => [200] + Request body: count=1&ofs=33&req0___data__=%7B%22database%22%3A%22projects%2Fstafftraveler-prod%2Fdatabases%2F(default)%22%2C%22removeTarget%22%3A38%7D +[POST] https://firestore.googleapis.com/google.firestore.v1.Firestore/Listen/channel?VER=8&database=projects%2Fstafftraveler-prod%2Fdatabases%2F(default)&gsessionid=HFF5EogcWeK0-zCr8BqQiP1LG6gZwKIpFMpTR4_G01uQgOSO1g6VYA&SID=a-XMXYp-Vwc6W3fSsZRnKA&RID=9187&AID=104&zx=8g9i20onobi5&t=1 => [200] + Request body: count=1&ofs=34&req0___data__=%7B%22database%22%3A%22projects%2Fstafftraveler-prod%2Fdatabases%2F(default)%22%2C%22removeTarget%22%3A40%7D +[POST] https://firestore.googleapis.com/google.firestore.v1.Firestore/Listen/channel?VER=8&database=projects%2Fstafftraveler-prod%2Fdatabases%2F(default)&gsessionid=HFF5EogcWeK0-zCr8BqQiP1LG6gZwKIpFMpTR4_G01uQgOSO1g6VYA&SID=a-XMXYp-Vwc6W3fSsZRnKA&RID=9188&AID=104&zx=flmjlaq6s76r&t=1 => [200] + Request body: count=1&ofs=35&req0___data__=%7B%22database%22%3A%22projects%2Fstafftraveler-prod%2Fdatabases%2F(default)%22%2C%22removeTarget%22%3A42%7D +[POST] https://firestore.googleapis.com/google.firestore.v1.Firestore/Listen/channel?VER=8&database=projects%2Fstafftraveler-prod%2Fdatabases%2F(default)&gsessionid=HFF5EogcWeK0-zCr8BqQiP1LG6gZwKIpFMpTR4_G01uQgOSO1g6VYA&SID=a-XMXYp-Vwc6W3fSsZRnKA&RID=9189&AID=104&zx=x8vcama6wdcw&t=1 => [200] + Request body: count=1&ofs=36&req0___data__=%7B%22database%22%3A%22projects%2Fstafftraveler-prod%2Fdatabases%2F(default)%22%2C%22removeTarget%22%3A44%7D +[POST] https://firestore.googleapis.com/google.firestore.v1.Firestore/Listen/channel?VER=8&database=projects%2Fstafftraveler-prod%2Fdatabases%2F(default)&gsessionid=HFF5EogcWeK0-zCr8BqQiP1LG6gZwKIpFMpTR4_G01uQgOSO1g6VYA&SID=a-XMXYp-Vwc6W3fSsZRnKA&RID=9190&AID=104&zx=cq90glstafxi&t=1 => [200] + Request body: count=1&ofs=37&req0___data__=%7B%22database%22%3A%22projects%2Fstafftraveler-prod%2Fdatabases%2F(default)%22%2C%22removeTarget%22%3A46%7D +[POST] https://firestore.googleapis.com/google.firestore.v1.Firestore/Listen/channel?VER=8&database=projects%2Fstafftraveler-prod%2Fdatabases%2F(default)&gsessionid=HFF5EogcWeK0-zCr8BqQiP1LG6gZwKIpFMpTR4_G01uQgOSO1g6VYA&SID=a-XMXYp-Vwc6W3fSsZRnKA&RID=9191&AID=104&zx=iidxjkascr6p&t=1 => [200] + Request body: count=1&ofs=38&req0___data__=%7B%22database%22%3A%22projects%2Fstafftraveler-prod%2Fdatabases%2F(default)%22%2C%22removeTarget%22%3A48%7D +[POST] https://firestore.googleapis.com/google.firestore.v1.Firestore/Listen/channel?VER=8&database=projects%2Fstafftraveler-prod%2Fdatabases%2F(default)&gsessionid=HFF5EogcWeK0-zCr8BqQiP1LG6gZwKIpFMpTR4_G01uQgOSO1g6VYA&SID=a-XMXYp-Vwc6W3fSsZRnKA&RID=9192&AID=104&zx=ib3004hvhsyb&t=1 => [200] + Request body: count=1&ofs=39&req0___data__=%7B%22database%22%3A%22projects%2Fstafftraveler-prod%2Fdatabases%2F(default)%22%2C%22addTarget%22%3A%7B%22query%22%3A%7B%22structuredQuery%22%3A%7B%22from%22%3A%5B%7B%22collectionId%22%3A%22derivedLoadsReports%22%7D%5D%2C%22where%22%3A%7B%22fieldFilter%22%3A%7B%22field%22%3A%7B%22fieldPath%22%3A%22flightId%22%7D%2C%22op%22%3A%22EQUAL%22%2C%22value%22%3A%7B%22stringValue%22%3A%22AA_2178_DFW_2026_04_22%22%7D%7D%7D%2C%22orderBy%22%3A%5B%7B%22field%22%3A%7B%22fieldPath%22%3A%22createdAt%22%7D%2C%22direction%22%3A%22DESCENDING%22%7D%2C%7B%22field%22%3A%7B%22fieldPath%22%3A%22__name__%22%7D%2C%22direction%22%3A%22DESCENDING%22%7D%5D%7D%2C%22parent%22%3A%22projects%2Fstafftraveler-prod%2Fdatabases%2F(default)%2Fdocuments%22%7D%2C%22targetId%22%3A54%7D%7D +[POST] https://firestore.googleapis.com/google.firestore.v1.Firestore/Listen/channel?VER=8&database=projects%2Fstafftraveler-prod%2Fdatabases%2F(default)&gsessionid=HFF5EogcWeK0-zCr8BqQiP1LG6gZwKIpFMpTR4_G01uQgOSO1g6VYA&SID=a-XMXYp-Vwc6W3fSsZRnKA&RID=9193&AID=104&zx=vdy4t3cplgip&t=1 => [200] + Request body: count=1&ofs=40&req0___data__=%7B%22database%22%3A%22projects%2Fstafftraveler-prod%2Fdatabases%2F(default)%22%2C%22addTarget%22%3A%7B%22documents%22%3A%7B%22documents%22%3A%5B%22projects%2Fstafftraveler-prod%2Fdatabases%2F(default)%2Fdocuments%2FairlinesBySt%2Fst_AAL%22%5D%7D%2C%22targetId%22%3A56%7D%7D +[POST] https://firestore.googleapis.com/google.firestore.v1.Firestore/Listen/channel?VER=8&database=projects%2Fstafftraveler-prod%2Fdatabases%2F(default)&gsessionid=HFF5EogcWeK0-zCr8BqQiP1LG6gZwKIpFMpTR4_G01uQgOSO1g6VYA&SID=a-XMXYp-Vwc6W3fSsZRnKA&RID=9194&AID=106&zx=vm7g1bolx517&t=1 => [200] + Request body: count=5&ofs=41&req0___data__=%7B%22database%22%3A%22projects%2Fstafftraveler-prod%2Fdatabases%2F(default)%22%2C%22addTarget%22%3A%7B%22documents%22%3A%7B%22documents%22%3A%5B%22projects%2Fstafftraveler-prod%2Fdatabases%2F(default)%2Fdocuments%2FflightEquipment%2F32Q%22%5D%7D%2C%22targetId%22%3A58%7D%7D&req1___data__=%7B%22database%22%3A%22projects%2Fstafftraveler-prod%2Fdatabases%2F(default)%22%2C%22addTarget%22%3A%7B%22documents%22%3A%7B%22documents%22%3A%5B%22projects%2Fstafftraveler-prod%2Fdatabases%2F(default)%2Fdocuments%2FairlineNotesBySt%2Fst_AAL%22%5D%7D%2C%22targetId%22%3A60%7D%7D&req2___data__=%7B%22database%22%3A%22projects%2Fstafftraveler-prod%2Fdatabases%2F(default)%22%2C%22addTarget%22%3A%7B%22documents%22%3A%7B%22documents%22%3A%5B%22projects%2Fstafftraveler-prod%2Fdatabases%2F(default)%2Fdocuments%2Fconversations%2FAA_2178_DFW_2026_04_22%22%5D%7D%2C%22targetId%22%3A62%7D%7D&req3___data__=%7B%22database%22%3A%22projects%2Fstafftraveler-prod%2Fdatabases%2F(default)%22%2C%22addTarget%22%3A%7B%22query%22%3A%7B%22structuredQuery%22%3A%7B%22from%22%3A%5B%7B%22collectionId%22%3A%22statusUpdates%22%7D%5D%2C%22orderBy%22%3A%5B%7B%22field%22%3A%7B%22fieldPath%22%3A%22createdAt%22%7D%2C%22direction%22%3A%22DESCENDING%22%7D%2C%7B%22field%22%3A%7B%22fieldPath%22%3A%22__name__%22%7D%2C%22direction%22%3A%22DESCENDING%22%7D%5D%7D%2C%22parent%22%3A%22projects%2Fstafftraveler-prod%2Fdatabases%2F(default)%2Fdocuments%2FtrackedFlights%2FAA_2178_DFW_2026_04_22%22%7D%2C%22targetId%22%3A64%7D%7D&req4___data__=%7B%22database%22%3A%22projects%2Fstafftraveler-prod%2Fdatabases%2F(default)%22%2C%22addTarget%22%3A%7B%22documents%22%3A%7B%22documents%22%3A%5B%22projects%2Fstafftraveler-prod%2Fdatabases%2F(default)%2Fdocuments%2FderivedLoadsReports%2FxskQc2a2oAVAwZk3Rfhg%22%5D%7D%2C%22targetId%22%3A66%7D%7D +[POST] https://firestore.googleapis.com/google.firestore.v1.Firestore/Listen/channel?VER=8&database=projects%2Fstafftraveler-prod%2Fdatabases%2F(default)&gsessionid=HFF5EogcWeK0-zCr8BqQiP1LG6gZwKIpFMpTR4_G01uQgOSO1g6VYA&SID=a-XMXYp-Vwc6W3fSsZRnKA&RID=9195&AID=136&zx=4xj7drdge1b4&t=1 => [200] + Request body: count=1&ofs=46&req0___data__=%7B%22database%22%3A%22projects%2Fstafftraveler-prod%2Fdatabases%2F(default)%22%2C%22removeTarget%22%3A56%7D +[POST] https://firestore.googleapis.com/google.firestore.v1.Firestore/Listen/channel?VER=8&database=projects%2Fstafftraveler-prod%2Fdatabases%2F(default)&gsessionid=HFF5EogcWeK0-zCr8BqQiP1LG6gZwKIpFMpTR4_G01uQgOSO1g6VYA&SID=a-XMXYp-Vwc6W3fSsZRnKA&RID=9196&AID=136&zx=u6l12lhidxh7&t=1 => [200] + Request body: count=1&ofs=47&req0___data__=%7B%22database%22%3A%22projects%2Fstafftraveler-prod%2Fdatabases%2F(default)%22%2C%22removeTarget%22%3A58%7D +[POST] https://firestore.googleapis.com/google.firestore.v1.Firestore/Listen/channel?VER=8&database=projects%2Fstafftraveler-prod%2Fdatabases%2F(default)&gsessionid=HFF5EogcWeK0-zCr8BqQiP1LG6gZwKIpFMpTR4_G01uQgOSO1g6VYA&SID=a-XMXYp-Vwc6W3fSsZRnKA&RID=9197&AID=136&zx=v3wmv0ko207f&t=1 => [200] + Request body: count=1&ofs=48&req0___data__=%7B%22database%22%3A%22projects%2Fstafftraveler-prod%2Fdatabases%2F(default)%22%2C%22removeTarget%22%3A60%7D +[POST] https://firestore.googleapis.com/google.firestore.v1.Firestore/Listen/channel?VER=8&database=projects%2Fstafftraveler-prod%2Fdatabases%2F(default)&gsessionid=HFF5EogcWeK0-zCr8BqQiP1LG6gZwKIpFMpTR4_G01uQgOSO1g6VYA&SID=a-XMXYp-Vwc6W3fSsZRnKA&RID=9198&AID=141&zx=2dyg9dv4hlx7&t=1 => [200] + Request body: count=1&ofs=49&req0___data__=%7B%22database%22%3A%22projects%2Fstafftraveler-prod%2Fdatabases%2F(default)%22%2C%22addTarget%22%3A%7B%22documents%22%3A%7B%22documents%22%3A%5B%22projects%2Fstafftraveler-prod%2Fdatabases%2F(default)%2Fdocuments%2FtrackedFlights%2FWN_2101_ELP_2026_05_03%22%5D%7D%2C%22targetId%22%3A1%7D%2C%22labels%22%3A%7B%22goog-listen-tags%22%3A%22limbo-document%22%7D%7D +[POST] https://firestore.googleapis.com/google.firestore.v1.Firestore/Listen/channel?VER=8&database=projects%2Fstafftraveler-prod%2Fdatabases%2F(default)&gsessionid=HFF5EogcWeK0-zCr8BqQiP1LG6gZwKIpFMpTR4_G01uQgOSO1g6VYA&SID=a-XMXYp-Vwc6W3fSsZRnKA&RID=9199&AID=145&zx=96e5i6boihdb&t=1 => [200] + Request body: count=1&ofs=50&req0___data__=%7B%22database%22%3A%22projects%2Fstafftraveler-prod%2Fdatabases%2F(default)%22%2C%22removeTarget%22%3A1%7D +[POST] https://firestore.googleapis.com/google.firestore.v1.Firestore/Listen/channel?VER=8&database=projects%2Fstafftraveler-prod%2Fdatabases%2F(default)&gsessionid=HFF5EogcWeK0-zCr8BqQiP1LG6gZwKIpFMpTR4_G01uQgOSO1g6VYA&SID=a-XMXYp-Vwc6W3fSsZRnKA&RID=9200&AID=154&zx=mpc9gcjtbo7r&t=1 => [200] + Request body: count=1&ofs=51&req0___data__=%7B%22database%22%3A%22projects%2Fstafftraveler-prod%2Fdatabases%2F(default)%22%2C%22addTarget%22%3A%7B%22documents%22%3A%7B%22documents%22%3A%5B%22projects%2Fstafftraveler-prod%2Fdatabases%2F(default)%2Fdocuments%2FtrackedFlights%2FWN_3187_ELP_2026_05_03%22%5D%7D%2C%22targetId%22%3A3%7D%2C%22labels%22%3A%7B%22goog-listen-tags%22%3A%22limbo-document%22%7D%7D +[POST] https://firestore.googleapis.com/google.firestore.v1.Firestore/Listen/channel?VER=8&database=projects%2Fstafftraveler-prod%2Fdatabases%2F(default)&gsessionid=HFF5EogcWeK0-zCr8BqQiP1LG6gZwKIpFMpTR4_G01uQgOSO1g6VYA&SID=a-XMXYp-Vwc6W3fSsZRnKA&RID=9201&AID=158&zx=yqxzfkm1k2r3&t=1 => [200] + Request body: count=1&ofs=52&req0___data__=%7B%22database%22%3A%22projects%2Fstafftraveler-prod%2Fdatabases%2F(default)%22%2C%22removeTarget%22%3A3%7D \ No newline at end of file diff --git a/api_docs/stafftraveler_captures/firestore_schema.md b/api_docs/stafftraveler_captures/firestore_schema.md new file mode 100644 index 0000000..dc44ca5 --- /dev/null +++ b/api_docs/stafftraveler_captures/firestore_schema.md @@ -0,0 +1,192 @@ +# StaffTraveler Firestore schema (live-extracted) + +Captured 2026-04-22 via Playwright MCP on `https://app.stafftraveler.com` while logged in as `stafftraveler@treymail.com` (uid `3NNPesQMiMRNYnPmuQzh6w2YKyh1`, airline `st_SWA`). All queries/docs below are copied from the web client's `firestore.googleapis.com/.../Listen/channel` `addTarget` bodies — not guessed. + +## Why iOS mitm didn't show this + +The iOS Firebase SDK and Android SDK both use the gRPC transport to `firestore.googleapis.com` (HTTP/2 with protobuf frames). Many mitm setups decode HTTPS but not gRPC framing, so the requests appear as opaque binary. **The web client uses the `VER=8 TYPE=xmlhttp` long-poll fallback — plain HTTP POST with URL-encoded JSON bodies** — which is fully readable. That's why we only saw this via the browser. + +## Required headers for REST access + +Direct REST (`/v1/projects/.../documents:runQuery` or `/documents/...`) works with: + +``` +Authorization: Bearer +X-Firebase-GMPID: 1:628258099825:web:35b20eaab4d441894041d0 +X-Goog-Api-Client: gl-js/ fire/12.12.0 +?key=AIzaSyD82Hiqx-jAbHF8faMGSveqLw8CdX8a-Uc (URL query param) +``` + +Note: **web API key** (`AIzaSyD82...`), not the Android key from strings.xml. Omitting `?key=...` or the GMPID header causes `403 PERMISSION_DENIED` — the rules consult the key for the project consumer context before evaluating `allow read`. + +## Single-document subscriptions + +These are fetched as `addTarget.documents.documents`: + +| Path | What | +|------|------| +| `__system/maintenance` | Server maintenance flags | +| `__system/version` | Required client versions (public) | +| `users/{uid}` | Profile: airlineStCode, airlineId, firstName, gender, … | +| `userHints/{uid}` | UI hints the user has dismissed | +| `userRequestCounters/{uid}` | Regular-request quota state | +| `userPriorityRequestCounters/{uid}` | Priority-request quota state | +| `userCredits/{uid}` | Credit balance | +| `userAchievements/{uid}` | Unlocked achievements | +| `userMetrics/{uid}` | Usage telemetry | +| `userFlightSearchHistory/{uid}` | Recent searches | +| `airportsByIata/{IATA}` | Public airport lookup (DFW, LAS, …) | +| `airlinesBySt/{stCode}` | Airline lookup by StaffTraveler code (`st_AAL`, `st_SWA`, …) | +| `airlineNotesBySt/{stCode}` | Non-rev agreement notes per airline | +| `flightEquipment/{iataOrId}` | Aircraft type info (`32Q`, `321`, `738`, …) | +| `conversations/{flightId_v3}` | Flight-level comment thread | +| `derivedLoadsReports/{reportId}` | **Individual load report doc — see below** | +| `trackedFlights/{flightId_v3}` | User's tracked flight state | + +## Collection queries + +### `derivedLoadsReports` — THE LOADS DATA + +```json +{ + "from": [{"collectionId": "derivedLoadsReports"}], + "where": { + "fieldFilter": { + "field": {"fieldPath": "flightId"}, + "op": "EQUAL", + "value": {"stringValue": "AA_2178_DFW_2026_04_22"} + } + }, + "orderBy": [ + {"field": {"fieldPath": "createdAt"}, "direction": "DESCENDING"}, + {"field": {"fieldPath": "__name__"}, "direction": "DESCENDING"} + ] +} +``` + +**This is the query you want for the Flights integration.** Pass the flight `id_v3` (e.g. `AA_2178_DFW_2026_04_22` — format is `{airlineId}_{flightNumber}_{departureIata}_{YYYY}_{MM}_{DD}`). + +**Access control (verified 2026-04-22):** this query returns `403 PERMISSION_DENIED` unless the user has an active `trackedFlights/{flightId_v3}` doc, which is created only by `POST /v1/commands/user/createLoadsRequests`. That call spends a credit on flights the user has never requested; replay on an already-requested flight is idempotent (no charge). So: + +- Freely re-read `derivedLoadsReports` for any flight you've already requested — no cost, no rate limit observed. +- You cannot peek at loads without first requesting — the "instant results" in the app for flights with recent community reports rely on the user having previously paid the credit. +- On the 15 DFW-LAS flights tested, only `AA_2178_DFW_2026_04_22` (the one with an open request) returned 200; the other 14 all returned 403. Same for 29 LAX-JFK flights the user hadn't requested — all 403. + +Example doc (captured AA2178 2026-04-22 12:42 PM CT): +```json +{ + "flightId": "AA_2178_DFW_2026_04_22", + "openSeats": { + "first": {"count": 3}, + "eco": {"count": 9} + }, + "staffListing": { + "type": "available", + "count": 6, + "countByClass": {} + }, + "responseTimeSeconds": 196, + "numberOfCreditsRewarded": 1, + "isFlagged": false, + "isFlaggedConfirmed": false, + "seatsAvailabilityScore": 0.79, + "hasClosedRequest": true, + "isJackpotHit": false, + "isPriorityRequest": false, + "createdAt": "2026-04-22T18:42:51.313Z", + "expireAt": "2026-07-21T21:45:00Z", + "creatorName": "M", + "creatorImageUrl": "https://images.stafftraveler.com/avatars/happysuitcase.png", + "creatorImagePath": "avatars/happysuitcase.png" +} +``` + +Field notes: +- `openSeats..count` — **exactly what the app shows as "OPEN SEATS"**. Classes seen: `first`, `business`, `premiumEconomy`, `eco`. Absent class = 0 or unknown. +- `staffListing.count` — **the "LISTED NON-REV PASSENGERS" number**. +- `staffListing.type` — `"available"` means loads were given; other types likely include `"upgrade"` variants (see `checkForLoads` heuristic in `bundle.hasm`). +- `seatsAvailabilityScore` — 0-1, app uses this to color-code the flight. +- `creatorName` is the first letter only (privacy). +- `expireAt` — ~90 days out, so load reports stay queryable. + +### `trackedFlights` — your open requests + +```json +{ + "from": [{"collectionId": "trackedFlights"}], + "where": { + "compositeFilter": {"op": "AND", "filters": [ + {"fieldFilter": {"field": {"fieldPath": "status"}, "op": "EQUAL", "value": {"stringValue": "open"}}}, + {"fieldFilter": {"field": {"fieldPath": "hasDeparted"}, "op": "EQUAL", "value": {"booleanValue": false}}}, + {"fieldFilter": {"field": {"fieldPath": "scheduledFlight.airlineStCode"}, "op": "EQUAL", "value": {"stringValue": "st_SWA"}}} + ]} + }, + "orderBy": [ + {"field": {"fieldPath": "priority"}, "direction": "DESCENDING"}, + {"field": {"fieldPath": "scheduledFlight.departureTimeUtc"}, "direction": "ASCENDING"}, + {"field": {"fieldPath": "__name__"}, "direction": "ASCENDING"} + ], + "limit": 25 +} +``` + +Returns the logged-in user's open requests filtered by their airline. Doc ID = flight id_v3. `scheduledFlight` is the embedded full flight object (matches `searchFlightsByRoute` item shape). + +### `trackedFlights/{flightId}/statusUpdates` + +```json +{ + "from": [{"collectionId": "statusUpdates"}], + "orderBy": [ + {"field": {"fieldPath": "createdAt"}, "direction": "DESCENDING"}, + {"field": {"fieldPath": "__name__"}, "direction": "DESCENDING"} + ], + "parent": "projects/stafftraveler-prod/databases/(default)/documents/trackedFlights/AA_2178_DFW_2026_04_22" +} +``` + +Delay / gate / equipment changes for that flight over time. + +### `users/{uid}/pinnedFlights`, `users/{uid}/connectingFlights` + +Subcollections under the user doc. Empty for this account. + +### `autoRequestRecords` where `subscribedUserIds ARRAY_CONTAINS {uid}` AND `isActive` + +Auto-request subscriptions — flights the user has set up to auto-request loads for on a recurring schedule. + +### `trackedFlights` where `subscribedUsers.{uid} == true` AND `isDeleted == false` + +Other users' requests that THIS user has subscribed to (so they also see the loads when answered). + +## Idempotent REST access pattern (integration recipe) + +```bash +# 1. sign in (you already do this) +TOKEN=$(curl -sX POST "https://identitytoolkit.googleapis.com/v1/accounts:signInWithPassword?key=$WEB_KEY" \ + -d "{\"email\":\"$EMAIL\",\"password\":\"$PW\",\"returnSecureToken\":true}" | jq -r .idToken) + +# 2. read loads for any flight +BASE='https://firestore.googleapis.com/v1/projects/stafftraveler-prod/databases/(default)/documents' +KEY='AIzaSyD82Hiqx-jAbHF8faMGSveqLw8CdX8a-Uc' +curl -sX POST "$BASE:runQuery?key=$KEY" \ + -H "Authorization: Bearer $TOKEN" \ + -H "X-Firebase-GMPID: 1:628258099825:web:35b20eaab4d441894041d0" \ + -H "Content-Type: application/json" \ + -d '{"structuredQuery":{"from":[{"collectionId":"derivedLoadsReports"}],"where":{"fieldFilter":{"field":{"fieldPath":"flightId"},"op":"EQUAL","value":{"stringValue":"AA_2178_DFW_2026_04_22"}}},"orderBy":[{"field":{"fieldPath":"createdAt"},"direction":"DESCENDING"}]}}' +``` + +Returns empty array if no report exists yet (meaning you'd need `createLoadsRequests` first to ask the crew). If a report exists, you get it without spending a credit. + +## Integration plan for the iOS Flights app (final) + +1. Secondary `FirebaseApp` configured against `stafftraveler-prod` with the web API key + GMPID above. +2. `Auth.auth(app: stApp).signIn(withEmail:password:)` with user's StaffTraveler credentials, refresh token stored in Keychain. +3. Use `Firestore.firestore(app: stApp)` and wire: + - `collection("derivedLoadsReports").whereField("flightId", isEqualTo: flightIdV3).addSnapshotListener { ... }` — live load updates per flight + - `collection("trackedFlights").whereField("status", isEqualTo: "open")....whereField("scheduledFlight.airlineStCode", isEqualTo: userStCode).limit(to: 25).addSnapshotListener` — user's open requests list + - `document("airlinesBySt/\(stCode)")` — airline metadata + - `document("airportsByIata/\(iata)")` — airport metadata +4. For writes (request loads, submit report, etc.), keep using the HTTP commands API at `https://api.stafftraveler.com/v1/commands/user/`. + +No App Check enforcement observed from the web client — plain Firebase ID token + API key is sufficient. diff --git a/api_docs/stafftraveler_captures/nonRevAgreementsBySt.json b/api_docs/stafftraveler_captures/nonRevAgreementsBySt.json new file mode 100644 index 0000000..d25dd26 --- /dev/null +++ b/api_docs/stafftraveler_captures/nonRevAgreementsBySt.json @@ -0,0 +1,34918 @@ +{ + "name": "projects/stafftraveler-prod/databases/(default)/documents/__derived/nonRevAgreementsBySt", + "fields": { + "agreements": { + "mapValue": { + "fields": { + "st_ITY": { + "arrayValue": { + "values": [ + { + "stringValue": "st_AAL" + }, + { + "stringValue": "st_AAR" + }, + { + "stringValue": "st_ACA" + }, + { + "stringValue": "st_AEA" + }, + { + "stringValue": "st_AEE" + }, + { + "stringValue": "st_AFR" + }, + { + "stringValue": "st_ANA" + }, + { + "stringValue": "st_ARG" + }, + { + "stringValue": "st_ASA" + }, + { + "stringValue": "st_AUA" + }, + { + "stringValue": "st_AVA" + }, + { + "stringValue": "st_AZU" + }, + { + "stringValue": "st_BAW" + }, + { + "stringValue": "st_BKP" + }, + { + "stringValue": "st_BTI" + }, + { + "stringValue": "st_CAL" + }, + { + "stringValue": "st_CES" + }, + { + "stringValue": "st_CFG" + }, + { + "stringValue": "st_CMP" + }, + { + "stringValue": "st_CPA" + }, + { + "stringValue": "st_DAL" + }, + { + "stringValue": "st_DLA" + }, + { + "stringValue": "st_DLH" + }, + { + "stringValue": "st_ELY" + }, + { + "stringValue": "st_ETD" + }, + { + "stringValue": "st_EZY" + }, + { + "stringValue": "st_FDB" + }, + { + "stringValue": "st_FFT" + }, + { + "stringValue": "st_FIN" + }, + { + "stringValue": "st_FWI" + }, + { + "stringValue": "st_GLO" + }, + { + "stringValue": "st_HAL" + }, + { + "stringValue": "st_HVN" + }, + { + "stringValue": "st_IBE" + }, + { + "stringValue": "st_ICE" + }, + { + "stringValue": "st_ITY" + }, + { + "stringValue": "st_ITY" + }, + { + "stringValue": "st_JAL" + }, + { + "stringValue": "st_JBU" + }, + { + "stringValue": "st_JST" + }, + { + "stringValue": "st_KAL" + }, + { + "stringValue": "st_LAN" + }, + { + "stringValue": "st_LGL" + }, + { + "stringValue": "st_LOT" + }, + { + "stringValue": "st_MAU" + }, + { + "stringValue": "st_NKS" + }, + { + "stringValue": "st_NOZ" + }, + { + "stringValue": "st_QFA" + }, + { + "stringValue": "st_QTR" + }, + { + "stringValue": "st_QXE" + }, + { + "stringValue": "st_SAS" + }, + { + "stringValue": "st_SVA" + }, + { + "stringValue": "st_SWA" + }, + { + "stringValue": "st_SWR" + }, + { + "stringValue": "st_TAP" + }, + { + "stringValue": "st_THY" + }, + { + "stringValue": "st_UAE" + }, + { + "stringValue": "st_UAL" + }, + { + "stringValue": "st_VIR" + }, + { + "stringValue": "st_VLG" + }, + { + "stringValue": "st_VOE" + }, + { + "stringValue": "st_WJA" + } + ] + } + }, + "st_ABX": { + "arrayValue": { + "values": [ + { + "stringValue": "st_AAL" + }, + { + "stringValue": "st_DAL" + }, + { + "stringValue": "st_FFT" + }, + { + "stringValue": "st_SWA" + }, + { + "stringValue": "st_UAL" + } + ] + } + }, + "st_P3": { + "arrayValue": { + "values": [ + { + "stringValue": "st_AAY" + }, + { + "stringValue": "st_ACI" + }, + { + "stringValue": "st_ADR" + }, + { + "stringValue": "st_AEA" + }, + { + "stringValue": "st_AFR" + }, + { + "stringValue": "st_AIE" + }, + { + "stringValue": "st_AKT" + }, + { + "stringValue": "st_AMX" + }, + { + "stringValue": "st_ANT" + }, + { + "stringValue": "st_ASA" + }, + { + "stringValue": "st_AUA" + }, + { + "stringValue": "st_AZV" + }, + { + "stringValue": "st_BCY" + }, + { + "stringValue": "st_BHS" + }, + { + "stringValue": "st_BLA" + }, + { + "stringValue": "st_BTI" + }, + { + "stringValue": "st_CAV" + }, + { + "stringValue": "st_CAY" + }, + { + "stringValue": "st_CFG" + }, + { + "stringValue": "st_CPA" + }, + { + "stringValue": "st_CRQ" + }, + { + "stringValue": "st_DAL" + }, + { + "stringValue": "st_DLH" + }, + { + "stringValue": "st_EDW" + }, + { + "stringValue": "st_ELY" + }, + { + "stringValue": "st_ETD" + }, + { + "stringValue": "st_EWG" + }, + { + "stringValue": "st_FDB" + }, + { + "stringValue": "st_FFT" + }, + { + "stringValue": "st_GLO" + }, + { + "stringValue": "st_GOE" + }, + { + "stringValue": "st_GPD" + }, + { + "stringValue": "st_GWI" + }, + { + "stringValue": "st_HAL" + }, + { + "stringValue": "st_HI" + }, + { + "stringValue": "st_HOP" + }, + { + "stringValue": "st_ICE" + }, + { + "stringValue": "st_ISR" + }, + { + "stringValue": "st_JBU" + }, + { + "stringValue": "st_JJP" + }, + { + "stringValue": "st_JSA" + }, + { + "stringValue": "st_JST" + }, + { + "stringValue": "st_JZR" + }, + { + "stringValue": "st_KAP" + }, + { + "stringValue": "st_LIA" + }, + { + "stringValue": "st_LOG" + }, + { + "stringValue": "st_LOT" + }, + { + "stringValue": "st_NKS" + }, + { + "stringValue": "st_NLA" + }, + { + "stringValue": "st_OAW" + }, + { + "stringValue": "st_PAG" + }, + { + "stringValue": "st_PVL" + }, + { + "stringValue": "st_QCL" + }, + { + "stringValue": "st_QFA" + }, + { + "stringValue": "st_QTR" + }, + { + "stringValue": "st_RBA" + }, + { + "stringValue": "st_REU" + }, + { + "stringValue": "st_RVF" + }, + { + "stringValue": "st_SAA" + }, + { + "stringValue": "st_SAS" + }, + { + "stringValue": "st_SAT" + }, + { + "stringValue": "st_SCX" + }, + { + "stringValue": "st_SPM" + }, + { + "stringValue": "st_SWA" + }, + { + "stringValue": "st_SWG" + }, + { + "stringValue": "st_SWR" + }, + { + "stringValue": "st_TDR" + }, + { + "stringValue": "st_THU" + }, + { + "stringValue": "st_TIN" + }, + { + "stringValue": "st_TPC" + }, + { + "stringValue": "st_TRA" + }, + { + "stringValue": "st_TSC" + }, + { + "stringValue": "st_TUI" + }, + { + "stringValue": "st_TVF" + }, + { + "stringValue": "st_UAE" + }, + { + "stringValue": "st_UAL" + }, + { + "stringValue": "st_VIR" + }, + { + "stringValue": "st_WJA" + }, + { + "stringValue": "st_YB" + } + ] + } + }, + "st_CTN": { + "arrayValue": { + "values": [ + { + "stringValue": "st_AAL" + }, + { + "stringValue": "st_ACA" + }, + { + "stringValue": "st_AUA" + }, + { + "stringValue": "st_CFG" + }, + { + "stringValue": "st_DAL" + }, + { + "stringValue": "st_DLH" + }, + { + "stringValue": "st_EDW" + }, + { + "stringValue": "st_ETD" + }, + { + "stringValue": "st_EWG" + }, + { + "stringValue": "st_QTR" + }, + { + "stringValue": "st_SAS" + }, + { + "stringValue": "st_SWR" + }, + { + "stringValue": "st_TAP" + }, + { + "stringValue": "st_THY" + }, + { + "stringValue": "st_UAE" + }, + { + "stringValue": "st_UAL" + } + ] + } + }, + "st_NWK": { + "arrayValue": { + "values": [ + { + "stringValue": "st_AAL" + }, + { + "stringValue": "st_CPA" + } + ] + } + }, + "st_CPA": { + "arrayValue": { + "values": [ + { + "stringValue": "st_AAL" + }, + { + "stringValue": "st_AAR" + }, + { + "stringValue": "st_AAY" + }, + { + "stringValue": "st_ACA" + }, + { + "stringValue": "st_AEA" + }, + { + "stringValue": "st_AEE" + }, + { + "stringValue": "st_AFL" + }, + { + "stringValue": "st_AFR" + }, + { + "stringValue": "st_AIC" + }, + { + "stringValue": "st_AIZ" + }, + { + "stringValue": "st_AKT" + }, + { + "stringValue": "st_ALK" + }, + { + "stringValue": "st_AMX" + }, + { + "stringValue": "st_ANA" + }, + { + "stringValue": "st_ANG" + }, + { + "stringValue": "st_ANT" + }, + { + "stringValue": "st_ANZ" + }, + { + "stringValue": "st_ARG" + }, + { + "stringValue": "st_ASA" + }, + { + "stringValue": "st_ASH" + }, + { + "stringValue": "st_AUA" + }, + { + "stringValue": "st_AVA" + }, + { + "stringValue": "st_BAW" + }, + { + "stringValue": "st_BCY" + }, + { + "stringValue": "st_BEL" + }, + { + "stringValue": "st_BKP" + }, + { + "stringValue": "st_BLS" + }, + { + "stringValue": "st_BTI" + }, + { + "stringValue": "st_CAL" + }, + { + "stringValue": "st_CCM" + }, + { + "stringValue": "st_CFG" + }, + { + "stringValue": "st_CMP" + }, + { + "stringValue": "st_CPA" + }, + { + "stringValue": "st_CPA" + }, + { + "stringValue": "st_CRK" + }, + { + "stringValue": "st_CRL" + }, + { + "stringValue": "st_CSA" + }, + { + "stringValue": "st_CSN" + }, + { + "stringValue": "st_CSZ" + }, + { + "stringValue": "st_DAL" + }, + { + "stringValue": "st_DLA" + }, + { + "stringValue": "st_DLH" + }, + { + "stringValue": "st_EDV" + }, + { + "stringValue": "st_EDW" + }, + { + "stringValue": "st_EIN" + }, + { + "stringValue": "st_EJU" + }, + { + "stringValue": "st_ELY" + }, + { + "stringValue": "st_ENY" + }, + { + "stringValue": "st_ETD" + }, + { + "stringValue": "st_ETH" + }, + { + "stringValue": "st_EVA" + }, + { + "stringValue": "st_EWG" + }, + { + "stringValue": "st_EZY" + }, + { + "stringValue": "st_FCM" + }, + { + "stringValue": "st_FDB" + }, + { + "stringValue": "st_FDX" + }, + { + "stringValue": "st_FFT" + }, + { + "stringValue": "st_FIN" + }, + { + "stringValue": "st_FJI" + }, + { + "stringValue": "st_FLE" + }, + { + "stringValue": "st_FPO" + }, + { + "stringValue": "st_GFA" + }, + { + "stringValue": "st_GIA" + }, + { + "stringValue": "st_GLO" + }, + { + "stringValue": "st_HAL" + }, + { + "stringValue": "st_HDA" + }, + { + "stringValue": "st_HKE" + }, + { + "stringValue": "st_HVN" + }, + { + "stringValue": "st_IBE" + }, + { + "stringValue": "st_ICE" + }, + { + "stringValue": "st_ISR" + }, + { + "stringValue": "st_ITY" + }, + { + "stringValue": "st_JAL" + }, + { + "stringValue": "st_JBU" + }, + { + "stringValue": "st_JIA" + }, + { + "stringValue": "st_JJP" + }, + { + "stringValue": "st_JSA" + }, + { + "stringValue": "st_JST" + }, + { + "stringValue": "st_JTA" + }, + { + "stringValue": "st_JZA" + }, + { + "stringValue": "st_KAL" + }, + { + "stringValue": "st_KLM" + }, + { + "stringValue": "st_KMM" + }, + { + "stringValue": "st_KQA" + }, + { + "stringValue": "st_KZR" + }, + { + "stringValue": "st_LAN" + }, + { + "stringValue": "st_LGL" + }, + { + "stringValue": "st_LOG" + }, + { + "stringValue": "st_LOT" + }, + { + "stringValue": "st_MAS" + }, + { + "stringValue": "st_MAU" + }, + { + "stringValue": "st_MAY" + }, + { + "stringValue": "st_MDA" + }, + { + "stringValue": "st_MEA" + }, + { + "stringValue": "st_NKS" + }, + { + "stringValue": "st_NSS" + }, + { + "stringValue": "st_NWK" + }, + { + "stringValue": "st_OCN" + }, + { + "stringValue": "st_OMA" + }, + { + "stringValue": "st_PAL" + }, + { + "stringValue": "st_PDT" + }, + { + "stringValue": "st_POE" + }, + { + "stringValue": "st_POE_2025" + }, + { + "stringValue": "st_PSC" + }, + { + "stringValue": "st_QFA" + }, + { + "stringValue": "st_QLK" + }, + { + "stringValue": "st_QTR" + }, + { + "stringValue": "st_QXE" + }, + { + "stringValue": "st_RAM" + }, + { + "stringValue": "st_RBA" + }, + { + "stringValue": "st_RJA" + }, + { + "stringValue": "st_RPA" + }, + { + "stringValue": "st_RSY" + }, + { + "stringValue": "st_RVF" + }, + { + "stringValue": "st_SAA" + }, + { + "stringValue": "st_SAS" + }, + { + "stringValue": "st_SAT" + }, + { + "stringValue": "st_SEY" + }, + { + "stringValue": "st_SIA" + }, + { + "stringValue": "st_SJX" + }, + { + "stringValue": "st_SKW" + }, + { + "stringValue": "st_SVA" + }, + { + "stringValue": "st_SWA" + }, + { + "stringValue": "st_SWG" + }, + { + "stringValue": "st_SWR" + }, + { + "stringValue": "st_SXS" + }, + { + "stringValue": "st_TAM" + }, + { + "stringValue": "st_TAP" + }, + { + "stringValue": "st_THA" + }, + { + "stringValue": "st_THT" + }, + { + "stringValue": "st_THY" + }, + { + "stringValue": "st_TPC" + }, + { + "stringValue": "st_TRA" + }, + { + "stringValue": "st_TTW" + }, + { + "stringValue": "st_TUI" + }, + { + "stringValue": "st_TVF" + }, + { + "stringValue": "st_UAE" + }, + { + "stringValue": "st_UAL" + }, + { + "stringValue": "st_UIA" + }, + { + "stringValue": "st_UKP" + }, + { + "stringValue": "st_VIR" + }, + { + "stringValue": "st_VLG" + }, + { + "stringValue": "st_VOZ" + }, + { + "stringValue": "st_VRD" + }, + { + "stringValue": "st_VTI" + }, + { + "stringValue": "st_WIF" + }, + { + "stringValue": "st_WJA" + } + ] + } + }, + "st_KAP": { + "arrayValue": { + "values": [ + { + "stringValue": "st_AAL" + }, + { + "stringValue": "st_AAY" + }, + { + "stringValue": "st_ASA" + }, + { + "stringValue": "st_BAW" + }, + { + "stringValue": "st_DAL" + }, + { + "stringValue": "st_DLH" + }, + { + "stringValue": "st_FFT" + }, + { + "stringValue": "st_HAL" + }, + { + "stringValue": "st_IBE" + }, + { + "stringValue": "st_JBU" + }, + { + "stringValue": "st_NKS" + }, + { + "stringValue": "st_SIL" + }, + { + "stringValue": "st_SWA" + }, + { + "stringValue": "st_UAL" + } + ] + } + }, + "st_PRO": { + "arrayValue": { + "values": [ + { + "stringValue": "st_ACA" + }, + { + "stringValue": "st_AFR" + }, + { + "stringValue": "st_TSC" + } + ] + } + }, + "st_GUN": { + "arrayValue": { + "values": [ + { + "stringValue": "st_ASA" + }, + { + "stringValue": "st_DAL" + } + ] + } + }, + "st_KLM": { + "arrayValue": { + "values": [ + { + "stringValue": "st_AAL" + }, + { + "stringValue": "st_AAR" + }, + { + "stringValue": "st_AAY" + }, + { + "stringValue": "st_ACA" + }, + { + "stringValue": "st_ACI" + }, + { + "stringValue": "st_AEA" + }, + { + "stringValue": "st_AEE" + }, + { + "stringValue": "st_AFL" + }, + { + "stringValue": "st_AFR" + }, + { + "stringValue": "st_AIC" + }, + { + "stringValue": "st_AIE" + }, + { + "stringValue": "st_AIZ" + }, + { + "stringValue": "st_AKT" + }, + { + "stringValue": "st_ALK" + }, + { + "stringValue": "st_AMX" + }, + { + "stringValue": "st_ANA" + }, + { + "stringValue": "st_ANZ" + }, + { + "stringValue": "st_ARG" + }, + { + "stringValue": "st_ASA" + }, + { + "stringValue": "st_ASH" + }, + { + "stringValue": "st_ASL" + }, + { + "stringValue": "st_AUA" + }, + { + "stringValue": "st_AVA" + }, + { + "stringValue": "st_AXY" + }, + { + "stringValue": "st_AZU" + }, + { + "stringValue": "st_BAW" + }, + { + "stringValue": "st_BCY" + }, + { + "stringValue": "st_BEL" + }, + { + "stringValue": "st_BKP" + }, + { + "stringValue": "st_BLS" + }, + { + "stringValue": "st_BTI" + }, + { + "stringValue": "st_BWA" + }, + { + "stringValue": "st_CAL" + }, + { + "stringValue": "st_CCM" + }, + { + "stringValue": "st_CES" + }, + { + "stringValue": "st_CFG" + }, + { + "stringValue": "st_CMP" + }, + { + "stringValue": "st_CPA" + }, + { + "stringValue": "st_CRL" + }, + { + "stringValue": "st_CSA" + }, + { + "stringValue": "st_CTN" + }, + { + "stringValue": "st_CXA" + }, + { + "stringValue": "st_DAL" + }, + { + "stringValue": "st_DLA" + }, + { + "stringValue": "st_DLH" + }, + { + "stringValue": "st_EIN" + }, + { + "stringValue": "st_ELY" + }, + { + "stringValue": "st_ETD" + }, + { + "stringValue": "st_ETH" + }, + { + "stringValue": "st_EVA" + }, + { + "stringValue": "st_EWG" + }, + { + "stringValue": "st_FDB" + }, + { + "stringValue": "st_FIN" + }, + { + "stringValue": "st_FLI" + }, + { + "stringValue": "st_FWI" + }, + { + "stringValue": "st_GFA" + }, + { + "stringValue": "st_GIA" + }, + { + "stringValue": "st_GLO" + }, + { + "stringValue": "st_HAL" + }, + { + "stringValue": "st_HKE" + }, + { + "stringValue": "st_HVN" + }, + { + "stringValue": "st_IBE" + }, + { + "stringValue": "st_IBS" + }, + { + "stringValue": "st_ICE" + }, + { + "stringValue": "st_ITY" + }, + { + "stringValue": "st_JAL" + }, + { + "stringValue": "st_JBU" + }, + { + "stringValue": "st_JJP" + }, + { + "stringValue": "st_JSA" + }, + { + "stringValue": "st_JST" + }, + { + "stringValue": "st_KAL" + }, + { + "stringValue": "st_KMM" + }, + { + "stringValue": "st_KQA" + }, + { + "stringValue": "st_KZR" + }, + { + "stringValue": "st_LAN" + }, + { + "stringValue": "st_LGL" + }, + { + "stringValue": "st_LOG" + }, + { + "stringValue": "st_LOT" + }, + { + "stringValue": "st_MAS" + }, + { + "stringValue": "st_MDA" + }, + { + "stringValue": "st_MEA" + }, + { + "stringValue": "st_MMD" + }, + { + "stringValue": "st_NKS" + }, + { + "stringValue": "st_NMB" + }, + { + "stringValue": "st_OMA" + }, + { + "stringValue": "st_QFA" + }, + { + "stringValue": "st_QTR" + }, + { + "stringValue": "st_RAM" + }, + { + "stringValue": "st_RBA" + }, + { + "stringValue": "st_REU" + }, + { + "stringValue": "st_RJA" + }, + { + "stringValue": "st_ROT" + }, + { + "stringValue": "st_RVF" + }, + { + "stringValue": "st_RZO" + }, + { + "stringValue": "st_SAA" + }, + { + "stringValue": "st_SAS" + }, + { + "stringValue": "st_SEY" + }, + { + "stringValue": "st_SVA" + }, + { + "stringValue": "st_SWA" + }, + { + "stringValue": "st_SWR" + }, + { + "stringValue": "st_TAM" + }, + { + "stringValue": "st_TAP" + }, + { + "stringValue": "st_THA" + }, + { + "stringValue": "st_THT" + }, + { + "stringValue": "st_THY" + }, + { + "stringValue": "st_TRA" + }, + { + "stringValue": "st_TUI" + }, + { + "stringValue": "st_TVF" + }, + { + "stringValue": "st_UAE" + }, + { + "stringValue": "st_UAL" + }, + { + "stringValue": "st_VIR" + }, + { + "stringValue": "st_VLG" + }, + { + "stringValue": "st_VOE" + }, + { + "stringValue": "st_VOZ" + }, + { + "stringValue": "st_VRE" + }, + { + "stringValue": "st_VTI" + }, + { + "stringValue": "st_WIA" + }, + { + "stringValue": "st_WIF" + }, + { + "stringValue": "st_WJA" + } + ] + } + }, + "st_SAS": { + "arrayValue": { + "values": [ + { + "stringValue": "st_AAL" + }, + { + "stringValue": "st_AAR" + }, + { + "stringValue": "st_AAY" + }, + { + "stringValue": "st_ACA" + }, + { + "stringValue": "st_AEA" + }, + { + "stringValue": "st_AEE" + }, + { + "stringValue": "st_AFR" + }, + { + "stringValue": "st_ANA" + }, + { + "stringValue": "st_ANZ" + }, + { + "stringValue": "st_APF" + }, + { + "stringValue": "st_ASA" + }, + { + "stringValue": "st_AUA" + }, + { + "stringValue": "st_AVA" + }, + { + "stringValue": "st_BAW" + }, + { + "stringValue": "st_BCY" + }, + { + "stringValue": "st_BEL" + }, + { + "stringValue": "st_BKP" + }, + { + "stringValue": "st_BRX" + }, + { + "stringValue": "st_BTI" + }, + { + "stringValue": "st_CAL" + }, + { + "stringValue": "st_CES" + }, + { + "stringValue": "st_CFG" + }, + { + "stringValue": "st_CMP" + }, + { + "stringValue": "st_CNO" + }, + { + "stringValue": "st_CPA" + }, + { + "stringValue": "st_CTN" + }, + { + "stringValue": "st_DAL" + }, + { + "stringValue": "st_DLA" + }, + { + "stringValue": "st_DLH" + }, + { + "stringValue": "st_DNU" + }, + { + "stringValue": "st_DTR" + }, + { + "stringValue": "st_EDW" + }, + { + "stringValue": "st_EIN" + }, + { + "stringValue": "st_EST" + }, + { + "stringValue": "st_ETD" + }, + { + "stringValue": "st_ETH" + }, + { + "stringValue": "st_EVA" + }, + { + "stringValue": "st_EWG" + }, + { + "stringValue": "st_FCM" + }, + { + "stringValue": "st_FDX" + }, + { + "stringValue": "st_FFT" + }, + { + "stringValue": "st_FIN" + }, + { + "stringValue": "st_FLI" + }, + { + "stringValue": "st_GRL" + }, + { + "stringValue": "st_HAL" + }, + { + "stringValue": "st_HKE" + }, + { + "stringValue": "st_HVN" + }, + { + "stringValue": "st_IBE" + }, + { + "stringValue": "st_ICE" + }, + { + "stringValue": "st_ITY" + }, + { + "stringValue": "st_JAL" + }, + { + "stringValue": "st_JBU" + }, + { + "stringValue": "st_JST" + }, + { + "stringValue": "st_JSX" + }, + { + "stringValue": "st_JTD" + }, + { + "stringValue": "st_JZA" + }, + { + "stringValue": "st_KAL" + }, + { + "stringValue": "st_KLM" + }, + { + "stringValue": "st_LAN" + }, + { + "stringValue": "st_LGL" + }, + { + "stringValue": "st_LOT" + }, + { + "stringValue": "st_MBU" + }, + { + "stringValue": "st_MMD" + }, + { + "stringValue": "st_MXY" + }, + { + "stringValue": "st_NBT" + }, + { + "stringValue": "st_NKS" + }, + { + "stringValue": "st_NOZ" + }, + { + "stringValue": "st_NSZ" + }, + { + "stringValue": "st_OCN" + }, + { + "stringValue": "st_OMA" + }, + { + "stringValue": "st_POE" + }, + { + "stringValue": "st_QFA" + }, + { + "stringValue": "st_QTR" + }, + { + "stringValue": "st_SAS" + }, + { + "stringValue": "st_SAS" + }, + { + "stringValue": "st_SIA" + }, + { + "stringValue": "st_SKW" + }, + { + "stringValue": "st_SVS" + }, + { + "stringValue": "st_SWA" + }, + { + "stringValue": "st_SWR" + }, + { + "stringValue": "st_SXS" + }, + { + "stringValue": "st_SZS" + }, + { + "stringValue": "st_TAP" + }, + { + "stringValue": "st_TF_2025" + }, + { + "stringValue": "st_THA" + }, + { + "stringValue": "st_THY" + }, + { + "stringValue": "st_TRA" + }, + { + "stringValue": "st_TVS" + }, + { + "stringValue": "st_UAE" + }, + { + "stringValue": "st_UAL" + }, + { + "stringValue": "st_VIR" + }, + { + "stringValue": "st_VJH" + }, + { + "stringValue": "st_VLG" + }, + { + "stringValue": "st_VOZ" + }, + { + "stringValue": "st_WIF" + }, + { + "stringValue": "st_WJA" + } + ] + } + }, + "st_EST": { + "arrayValue": { + "values": [ + { + "stringValue": "st_FIN" + }, + { + "stringValue": "st_SAS" + } + ] + } + }, + "st_JAT": { + "arrayValue": { + "values": [ + { + "stringValue": "st_UAL" + } + ] + } + }, + "st_IGO": { + "arrayValue": { + "values": [ + { + "stringValue": "st_AAL" + }, + { + "stringValue": "st_ACA" + }, + { + "stringValue": "st_AFR" + }, + { + "stringValue": "st_ALK" + }, + { + "stringValue": "st_ANZ" + }, + { + "stringValue": "st_BAW" + }, + { + "stringValue": "st_DAL" + }, + { + "stringValue": "st_DLH" + }, + { + "stringValue": "st_ETD" + }, + { + "stringValue": "st_EWG" + }, + { + "stringValue": "st_FDB" + }, + { + "stringValue": "st_FIN" + }, + { + "stringValue": "st_FLE" + }, + { + "stringValue": "st_HKE" + }, + { + "stringValue": "st_HVN" + }, + { + "stringValue": "st_JBU" + }, + { + "stringValue": "st_JST" + }, + { + "stringValue": "st_MAS" + }, + { + "stringValue": "st_POE" + }, + { + "stringValue": "st_QFA" + }, + { + "stringValue": "st_QTR" + }, + { + "stringValue": "st_SWA" + }, + { + "stringValue": "st_SWR" + }, + { + "stringValue": "st_THY" + }, + { + "stringValue": "st_UAL" + }, + { + "stringValue": "st_VIR" + }, + { + "stringValue": "st_VLG" + }, + { + "stringValue": "st_WJA" + } + ] + } + }, + "st_XBO": { + "arrayValue": { + "values": [ + { + "stringValue": "st_ACA" + }, + { + "stringValue": "st_AFR" + }, + { + "stringValue": "st_AUA" + }, + { + "stringValue": "st_BAW" + }, + { + "stringValue": "st_DLH" + }, + { + "stringValue": "st_ETD" + }, + { + "stringValue": "st_IBE" + }, + { + "stringValue": "st_LOT" + }, + { + "stringValue": "st_SIA" + }, + { + "stringValue": "st_SWR" + }, + { + "stringValue": "st_UAL" + } + ] + } + }, + "st_4T": { + "arrayValue": { + "values": [ + { + "stringValue": "st_ACA" + }, + { + "stringValue": "st_POE" + }, + { + "stringValue": "st_WJA" + } + ] + } + }, + "st_PGT": { + "arrayValue": { + "values": [ + { + "stringValue": "st_ACA" + }, + { + "stringValue": "st_DLH" + }, + { + "stringValue": "st_NOZ" + }, + { + "stringValue": "st_QTR" + }, + { + "stringValue": "st_UAL" + } + ] + } + }, + "st_LOT": { + "arrayValue": { + "values": [ + { + "stringValue": "st_AAL" + }, + { + "stringValue": "st_AAR" + }, + { + "stringValue": "st_ACA" + }, + { + "stringValue": "st_AEE" + }, + { + "stringValue": "st_AFR" + }, + { + "stringValue": "st_AIC" + }, + { + "stringValue": "st_ALK" + }, + { + "stringValue": "st_AMX" + }, + { + "stringValue": "st_ANA" + }, + { + "stringValue": "st_ANZ" + }, + { + "stringValue": "st_ARG" + }, + { + "stringValue": "st_ASA" + }, + { + "stringValue": "st_AUA" + }, + { + "stringValue": "st_AVA" + }, + { + "stringValue": "st_BAW" + }, + { + "stringValue": "st_BEL" + }, + { + "stringValue": "st_BKP" + }, + { + "stringValue": "st_BTI" + }, + { + "stringValue": "st_CAL" + }, + { + "stringValue": "st_CFG" + }, + { + "stringValue": "st_CLX" + }, + { + "stringValue": "st_CPA" + }, + { + "stringValue": "st_CRK" + }, + { + "stringValue": "st_DAL" + }, + { + "stringValue": "st_DLA" + }, + { + "stringValue": "st_DLH" + }, + { + "stringValue": "st_DNU" + }, + { + "stringValue": "st_EDW" + }, + { + "stringValue": "st_ETD" + }, + { + "stringValue": "st_ETH" + }, + { + "stringValue": "st_EVA" + }, + { + "stringValue": "st_EWG" + }, + { + "stringValue": "st_FDB" + }, + { + "stringValue": "st_FFT" + }, + { + "stringValue": "st_FIN" + }, + { + "stringValue": "st_GBG" + }, + { + "stringValue": "st_GJT" + }, + { + "stringValue": "st_HAL" + }, + { + "stringValue": "st_HVN" + }, + { + "stringValue": "st_IBE" + }, + { + "stringValue": "st_ICE" + }, + { + "stringValue": "st_ITY" + }, + { + "stringValue": "st_JBU" + }, + { + "stringValue": "st_JST" + }, + { + "stringValue": "st_KAL" + }, + { + "stringValue": "st_KZR" + }, + { + "stringValue": "st_LAN" + }, + { + "stringValue": "st_LGL" + }, + { + "stringValue": "st_LOT" + }, + { + "stringValue": "st_LOT" + }, + { + "stringValue": "st_MAU" + }, + { + "stringValue": "st_NKS" + }, + { + "stringValue": "st_NOZ" + }, + { + "stringValue": "st_OCN" + }, + { + "stringValue": "st_OMA" + }, + { + "stringValue": "st_POE" + }, + { + "stringValue": "st_QFA" + }, + { + "stringValue": "st_QTR" + }, + { + "stringValue": "st_SAS" + }, + { + "stringValue": "st_SJX" + }, + { + "stringValue": "st_SKW" + }, + { + "stringValue": "st_SWA" + }, + { + "stringValue": "st_SWR" + }, + { + "stringValue": "st_TAP" + }, + { + "stringValue": "st_THA" + }, + { + "stringValue": "st_THY" + }, + { + "stringValue": "st_TSC" + }, + { + "stringValue": "st_TVS" + }, + { + "stringValue": "st_UAE" + }, + { + "stringValue": "st_UAL" + }, + { + "stringValue": "st_VIR" + }, + { + "stringValue": "st_VJH" + }, + { + "stringValue": "st_VLG" + }, + { + "stringValue": "st_WIF" + }, + { + "stringValue": "st_WJA" + }, + { + "stringValue": "st_XBO" + } + ] + } + }, + "st_VTI": { + "arrayValue": { + "values": [ + { + "stringValue": "st_ACA" + }, + { + "stringValue": "st_AFR" + }, + { + "stringValue": "st_BAW" + }, + { + "stringValue": "st_DLH" + }, + { + "stringValue": "st_FDB" + }, + { + "stringValue": "st_FIN" + }, + { + "stringValue": "st_KLM" + }, + { + "stringValue": "st_LOT" + }, + { + "stringValue": "st_QTR" + }, + { + "stringValue": "st_SWR" + }, + { + "stringValue": "st_VOZ" + } + ] + } + }, + "st_VRD": { + "arrayValue": { + "values": [ + { + "stringValue": "st_AAL" + }, + { + "stringValue": "st_DAL" + }, + { + "stringValue": "st_JBU" + }, + { + "stringValue": "st_SWA" + }, + { + "stringValue": "st_UAL" + } + ] + } + }, + "st_TVS": { + "arrayValue": { + "values": [ + { + "stringValue": "st_ACA" + }, + { + "stringValue": "st_AFR" + }, + { + "stringValue": "st_ARG" + }, + { + "stringValue": "st_AUA" + }, + { + "stringValue": "st_BAW" + }, + { + "stringValue": "st_CFG" + }, + { + "stringValue": "st_DLH" + }, + { + "stringValue": "st_ETD" + }, + { + "stringValue": "st_EWG" + }, + { + "stringValue": "st_FDB" + }, + { + "stringValue": "st_IBE" + }, + { + "stringValue": "st_LOT" + }, + { + "stringValue": "st_QTR" + }, + { + "stringValue": "st_SAS" + }, + { + "stringValue": "st_SWR" + }, + { + "stringValue": "st_TVS" + }, + { + "stringValue": "st_TVS" + }, + { + "stringValue": "st_UAE" + }, + { + "stringValue": "st_UAL" + } + ] + } + }, + "st_CAY": { + "arrayValue": { + "values": [ + { + "stringValue": "st_AAL" + } + ] + } + }, + "st_VXP": { + "arrayValue": { + "values": [ + { + "stringValue": "st_AAL" + }, + { + "stringValue": "st_ASA" + }, + { + "stringValue": "st_BAW" + }, + { + "stringValue": "st_DAL" + }, + { + "stringValue": "st_FFT" + }, + { + "stringValue": "st_HAL" + }, + { + "stringValue": "st_JBU" + }, + { + "stringValue": "st_MXY" + }, + { + "stringValue": "st_NKS" + }, + { + "stringValue": "st_SWA" + }, + { + "stringValue": "st_UAL" + } + ] + } + }, + "st_WIF": { + "arrayValue": { + "values": [ + { + "stringValue": "st_AAL" + }, + { + "stringValue": "st_AFR" + }, + { + "stringValue": "st_AUA" + }, + { + "stringValue": "st_BAW" + }, + { + "stringValue": "st_CAL" + }, + { + "stringValue": "st_CFG" + }, + { + "stringValue": "st_CPA" + }, + { + "stringValue": "st_DLH" + }, + { + "stringValue": "st_EDW" + }, + { + "stringValue": "st_ETD" + }, + { + "stringValue": "st_FIN" + }, + { + "stringValue": "st_IBE" + }, + { + "stringValue": "st_LAN" + }, + { + "stringValue": "st_LOT" + }, + { + "stringValue": "st_NBT" + }, + { + "stringValue": "st_NOZ" + }, + { + "stringValue": "st_NSZ" + }, + { + "stringValue": "st_OCN" + }, + { + "stringValue": "st_QTR" + }, + { + "stringValue": "st_SAS" + }, + { + "stringValue": "st_SWR" + }, + { + "stringValue": "st_TAP" + }, + { + "stringValue": "st_THA" + }, + { + "stringValue": "st_THY" + }, + { + "stringValue": "st_UAE" + }, + { + "stringValue": "st_UAL" + }, + { + "stringValue": "st_VLG" + }, + { + "stringValue": "st_WIF" + }, + { + "stringValue": "st_WIF" + } + ] + } + }, + "st_CNO": { + "arrayValue": { + "values": [ + { + "stringValue": "st_DLH" + }, + { + "stringValue": "st_ETD" + }, + { + "stringValue": "st_FIN" + }, + { + "stringValue": "st_SAS" + }, + { + "stringValue": "st_THA" + } + ] + } + }, + "st_TYA": { + "arrayValue": { + "values": [ + { + "stringValue": "st_POE" + } + ] + } + }, + "st_KII": { + "arrayValue": { + "values": [ + { + "stringValue": "st_AAL" + }, + { + "stringValue": "st_DAL" + }, + { + "stringValue": "st_UAL" + } + ] + } + }, + "st_EDW": { + "arrayValue": { + "values": [ + { + "stringValue": "st_AAL" + }, + { + "stringValue": "st_ACA" + }, + { + "stringValue": "st_AFR" + }, + { + "stringValue": "st_BAW" + }, + { + "stringValue": "st_BEL" + }, + { + "stringValue": "st_BTI" + }, + { + "stringValue": "st_CFG" + }, + { + "stringValue": "st_CPA" + }, + { + "stringValue": "st_CTN" + }, + { + "stringValue": "st_DAL" + }, + { + "stringValue": "st_DLH" + }, + { + "stringValue": "st_ETD" + }, + { + "stringValue": "st_FIN" + }, + { + "stringValue": "st_IBE" + }, + { + "stringValue": "st_ICE" + }, + { + "stringValue": "st_JBU" + }, + { + "stringValue": "st_LOT" + }, + { + "stringValue": "st_OAW" + }, + { + "stringValue": "st_QFA" + }, + { + "stringValue": "st_QTR" + }, + { + "stringValue": "st_SAS" + }, + { + "stringValue": "st_SWA" + }, + { + "stringValue": "st_SWR" + }, + { + "stringValue": "st_TAP" + }, + { + "stringValue": "st_THA" + }, + { + "stringValue": "st_THY" + }, + { + "stringValue": "st_UAE" + }, + { + "stringValue": "st_UAL" + }, + { + "stringValue": "st_WIF" + } + ] + } + }, + "st_VJH": { + "arrayValue": { + "values": [ + { + "stringValue": "st_ACA" + }, + { + "stringValue": "st_AUA" + }, + { + "stringValue": "st_BEL" + }, + { + "stringValue": "st_CFG" + }, + { + "stringValue": "st_DLH" + }, + { + "stringValue": "st_EWG" + }, + { + "stringValue": "st_FIN" + }, + { + "stringValue": "st_JST" + }, + { + "stringValue": "st_LOT" + }, + { + "stringValue": "st_OCN" + }, + { + "stringValue": "st_QFA" + }, + { + "stringValue": "st_SAS" + }, + { + "stringValue": "st_SWR" + }, + { + "stringValue": "st_UAE" + }, + { + "stringValue": "st_UAL" + } + ] + } + }, + "st_SCR": { + "arrayValue": { + "values": [ + { + "stringValue": "st_DLH" + } + ] + } + }, + "st_AER": { + "arrayValue": { + "values": [ + { + "stringValue": "st_ASA" + } + ] + } + }, + "st_PVD": { + "arrayValue": { + "values": [ + { + "stringValue": "st_DLH" + } + ] + } + }, + "st_LGL": { + "arrayValue": { + "values": [ + { + "stringValue": "st_ACA" + }, + { + "stringValue": "st_AFR" + }, + { + "stringValue": "st_AUA" + }, + { + "stringValue": "st_BAW" + }, + { + "stringValue": "st_BEL" + }, + { + "stringValue": "st_CAL" + }, + { + "stringValue": "st_CFG" + }, + { + "stringValue": "st_CLX" + }, + { + "stringValue": "st_CPA" + }, + { + "stringValue": "st_DAL" + }, + { + "stringValue": "st_DLA" + }, + { + "stringValue": "st_DLH" + }, + { + "stringValue": "st_ETD" + }, + { + "stringValue": "st_EWG" + }, + { + "stringValue": "st_FIN" + }, + { + "stringValue": "st_FWI" + }, + { + "stringValue": "st_IBE" + }, + { + "stringValue": "st_ICE" + }, + { + "stringValue": "st_ITY" + }, + { + "stringValue": "st_JBU" + }, + { + "stringValue": "st_LGL" + }, + { + "stringValue": "st_LGL" + }, + { + "stringValue": "st_LOT" + }, + { + "stringValue": "st_OCN" + }, + { + "stringValue": "st_OMA" + }, + { + "stringValue": "st_QFA" + }, + { + "stringValue": "st_QTR" + }, + { + "stringValue": "st_SAS" + }, + { + "stringValue": "st_SVA" + }, + { + "stringValue": "st_SWA" + }, + { + "stringValue": "st_SWR" + }, + { + "stringValue": "st_TAP" + }, + { + "stringValue": "st_THY" + }, + { + "stringValue": "st_UAE" + }, + { + "stringValue": "st_UAL" + }, + { + "stringValue": "st_VLG" + } + ] + } + }, + "st_GTI": { + "arrayValue": { + "values": [ + { + "stringValue": "st_AAL" + }, + { + "stringValue": "st_AAY" + }, + { + "stringValue": "st_ASA" + }, + { + "stringValue": "st_BAW" + }, + { + "stringValue": "st_DAL" + }, + { + "stringValue": "st_DLH" + }, + { + "stringValue": "st_FFT" + }, + { + "stringValue": "st_HAL" + }, + { + "stringValue": "st_JBU" + }, + { + "stringValue": "st_JST" + }, + { + "stringValue": "st_NKS" + }, + { + "stringValue": "st_QFA" + }, + { + "stringValue": "st_SWA" + }, + { + "stringValue": "st_UAL" + } + ] + } + }, + "st_FWI": { + "arrayValue": { + "values": [ + { + "stringValue": "st_ACA" + }, + { + "stringValue": "st_AFR" + }, + { + "stringValue": "st_BEL" + }, + { + "stringValue": "st_DLH" + }, + { + "stringValue": "st_IBE" + }, + { + "stringValue": "st_ITY" + }, + { + "stringValue": "st_LGL" + }, + { + "stringValue": "st_SWR" + }, + { + "stringValue": "st_TVF" + }, + { + "stringValue": "st_VLG" + } + ] + } + }, + "st_MSR": { + "arrayValue": { + "values": [ + { + "stringValue": "st_AAL" + }, + { + "stringValue": "st_ACA" + }, + { + "stringValue": "st_BAW" + }, + { + "stringValue": "st_DAL" + }, + { + "stringValue": "st_DLH" + }, + { + "stringValue": "st_IBE" + }, + { + "stringValue": "st_JBU" + }, + { + "stringValue": "st_SWR" + }, + { + "stringValue": "st_UAL" + } + ] + } + }, + "st_ABY": { + "arrayValue": { + "values": [ + { + "stringValue": "st_ETD" + }, + { + "stringValue": "st_FDB" + }, + { + "stringValue": "st_UAE" + } + ] + } + }, + "st_XS": { + "arrayValue": { + "values": [ + { + "stringValue": "st_BAW" + } + ] + } + }, + "st_UPS": { + "arrayValue": { + "values": [ + { + "stringValue": "st_AAL" + }, + { + "stringValue": "st_AAY" + }, + { + "stringValue": "st_ASA" + }, + { + "stringValue": "st_CTN" + }, + { + "stringValue": "st_DAL" + }, + { + "stringValue": "st_DLH" + }, + { + "stringValue": "st_EVA" + }, + { + "stringValue": "st_FFT" + }, + { + "stringValue": "st_FLE" + }, + { + "stringValue": "st_GPD" + }, + { + "stringValue": "st_HAL" + }, + { + "stringValue": "st_JBU" + }, + { + "stringValue": "st_JSX" + }, + { + "stringValue": "st_LOT" + }, + { + "stringValue": "st_MXY" + }, + { + "stringValue": "st_NKS" + }, + { + "stringValue": "st_OMA" + }, + { + "stringValue": "st_QFA" + }, + { + "stringValue": "st_RJA" + }, + { + "stringValue": "st_RVF" + }, + { + "stringValue": "st_SAA" + }, + { + "stringValue": "st_SIL" + }, + { + "stringValue": "st_SWA" + }, + { + "stringValue": "st_TDR" + }, + { + "stringValue": "st_TIN" + }, + { + "stringValue": "st_UAL" + }, + { + "stringValue": "st_VLG" + }, + { + "stringValue": "st_VXP" + } + ] + } + }, + "st_TTW": { + "arrayValue": { + "values": [ + { + "stringValue": "st_ACA" + }, + { + "stringValue": "st_AFR" + }, + { + "stringValue": "st_ASA" + }, + { + "stringValue": "st_CAL" + }, + { + "stringValue": "st_CPA" + }, + { + "stringValue": "st_CRK" + }, + { + "stringValue": "st_DAL" + }, + { + "stringValue": "st_EVA" + }, + { + "stringValue": "st_FIN" + }, + { + "stringValue": "st_HKE" + }, + { + "stringValue": "st_JJP" + }, + { + "stringValue": "st_KAL" + }, + { + "stringValue": "st_MDA" + }, + { + "stringValue": "st_SJX" + }, + { + "stringValue": "st_SKW" + }, + { + "stringValue": "st_SWA" + }, + { + "stringValue": "st_TTW" + }, + { + "stringValue": "st_TTW" + }, + { + "stringValue": "st_UAE" + }, + { + "stringValue": "st_UAL" + }, + { + "stringValue": "st_UIA" + } + ] + } + }, + "st_TOS": { + "arrayValue": { + "values": [ + { + "stringValue": "st_DAL" + }, + { + "stringValue": "st_SWA" + }, + { + "stringValue": "st_UAL" + } + ] + } + }, + "st_CSN": { + "arrayValue": { + "values": [ + { + "stringValue": "st_CPA" + } + ] + } + }, + "st_ROU": { + "arrayValue": { + "values": [ + { + "stringValue": "st_AAL" + }, + { + "stringValue": "st_AAY" + }, + { + "stringValue": "st_ABY" + }, + { + "stringValue": "st_ACA" + }, + { + "stringValue": "st_ACI" + }, + { + "stringValue": "st_AEA" + }, + { + "stringValue": "st_AEE" + }, + { + "stringValue": "st_AFR" + }, + { + "stringValue": "st_AIC" + }, + { + "stringValue": "st_AIE" + }, + { + "stringValue": "st_AIZ" + }, + { + "stringValue": "st_AKT" + }, + { + "stringValue": "st_AMX" + }, + { + "stringValue": "st_ANA" + }, + { + "stringValue": "st_ANT" + }, + { + "stringValue": "st_ANZ" + }, + { + "stringValue": "st_ARG" + }, + { + "stringValue": "st_ASA" + }, + { + "stringValue": "st_ASL" + }, + { + "stringValue": "st_AUA" + }, + { + "stringValue": "st_AVA" + }, + { + "stringValue": "st_AZU" + }, + { + "stringValue": "st_BAW" + }, + { + "stringValue": "st_BEE" + }, + { + "stringValue": "st_BEL" + }, + { + "stringValue": "st_BLS" + }, + { + "stringValue": "st_BTI" + }, + { + "stringValue": "st_BWA" + }, + { + "stringValue": "st_CAL" + }, + { + "stringValue": "st_CAV" + }, + { + "stringValue": "st_CAY" + }, + { + "stringValue": "st_CCM" + }, + { + "stringValue": "st_CES" + }, + { + "stringValue": "st_CFG" + }, + { + "stringValue": "st_CMP" + }, + { + "stringValue": "st_CNF" + }, + { + "stringValue": "st_CPA" + }, + { + "stringValue": "st_CRK" + }, + { + "stringValue": "st_CRL" + }, + { + "stringValue": "st_CRQ" + }, + { + "stringValue": "st_CSA" + }, + { + "stringValue": "st_CSZ" + }, + { + "stringValue": "st_CTN" + }, + { + "stringValue": "st_DAL" + }, + { + "stringValue": "st_DJT" + }, + { + "stringValue": "st_DLA" + }, + { + "stringValue": "st_DLH" + }, + { + "stringValue": "st_ECA" + }, + { + "stringValue": "st_EDW" + }, + { + "stringValue": "st_ELY" + }, + { + "stringValue": "st_ETD" + }, + { + "stringValue": "st_ETH" + }, + { + "stringValue": "st_EVA" + }, + { + "stringValue": "st_EWG" + }, + { + "stringValue": "st_FBU" + }, + { + "stringValue": "st_FC" + }, + { + "stringValue": "st_FDB" + }, + { + "stringValue": "st_FDY" + }, + { + "stringValue": "st_FFT" + }, + { + "stringValue": "st_FIN" + }, + { + "stringValue": "st_FJI" + }, + { + "stringValue": "st_FWI" + }, + { + "stringValue": "st_GFA" + }, + { + "stringValue": "st_GLA" + }, + { + "stringValue": "st_GLO" + }, + { + "stringValue": "st_GLR" + }, + { + "stringValue": "st_GWI" + }, + { + "stringValue": "st_GZ" + }, + { + "stringValue": "st_HAL" + }, + { + "stringValue": "st_HDA" + }, + { + "stringValue": "st_HKE" + }, + { + "stringValue": "st_HOP" + }, + { + "stringValue": "st_IBB" + }, + { + "stringValue": "st_IBE" + }, + { + "stringValue": "st_ICE" + }, + { + "stringValue": "st_ISR" + }, + { + "stringValue": "st_ISS" + }, + { + "stringValue": "st_ITY" + }, + { + "stringValue": "st_JAL" + }, + { + "stringValue": "st_JBU" + }, + { + "stringValue": "st_JST" + }, + { + "stringValue": "st_JSX" + }, + { + "stringValue": "st_JZA" + }, + { + "stringValue": "st_KAC" + }, + { + "stringValue": "st_KAL" + }, + { + "stringValue": "st_KLM" + }, + { + "stringValue": "st_KQA" + }, + { + "stringValue": "st_LAN" + }, + { + "stringValue": "st_LGL" + }, + { + "stringValue": "st_LIA" + }, + { + "stringValue": "st_LOG" + }, + { + "stringValue": "st_LOT" + }, + { + "stringValue": "st_LRC" + }, + { + "stringValue": "st_MAS" + }, + { + "stringValue": "st_MAU" + }, + { + "stringValue": "st_MDA" + }, + { + "stringValue": "st_MEA" + }, + { + "stringValue": "st_MXY" + }, + { + "stringValue": "st_NKS" + }, + { + "stringValue": "st_NLA" + }, + { + "stringValue": "st_NMB" + }, + { + "stringValue": "st_OCN" + }, + { + "stringValue": "st_OMA" + }, + { + "stringValue": "st_ONE" + }, + { + "stringValue": "st_PAL" + }, + { + "stringValue": "st_PCO" + }, + { + "stringValue": "st_PIA" + }, + { + "stringValue": "st_PSC" + }, + { + "stringValue": "st_QFA" + }, + { + "stringValue": "st_QTR" + }, + { + "stringValue": "st_REU" + }, + { + "stringValue": "st_RJA" + }, + { + "stringValue": "st_ROU" + }, + { + "stringValue": "st_RVF" + }, + { + "stringValue": "st_RWD" + }, + { + "stringValue": "st_RZO" + }, + { + "stringValue": "st_SAA" + }, + { + "stringValue": "st_SAS" + }, + { + "stringValue": "st_SCE" + }, + { + "stringValue": "st_SCX" + }, + { + "stringValue": "st_SEY" + }, + { + "stringValue": "st_SIL" + }, + { + "stringValue": "st_SKU" + }, + { + "stringValue": "st_SVA" + }, + { + "stringValue": "st_SWA" + }, + { + "stringValue": "st_SWR" + }, + { + "stringValue": "st_SXS" + }, + { + "stringValue": "st_TAI" + }, + { + "stringValue": "st_TAP" + }, + { + "stringValue": "st_TAR" + }, + { + "stringValue": "st_TGG" + }, + { + "stringValue": "st_THA" + }, + { + "stringValue": "st_THT" + }, + { + "stringValue": "st_THY" + }, + { + "stringValue": "st_TIN" + }, + { + "stringValue": "st_TRA" + }, + { + "stringValue": "st_TUI" + }, + { + "stringValue": "st_TVF" + }, + { + "stringValue": "st_UAE" + }, + { + "stringValue": "st_UAL" + }, + { + "stringValue": "st_VIR" + }, + { + "stringValue": "st_VJH" + }, + { + "stringValue": "st_VLG" + }, + { + "stringValue": "st_VOE" + }, + { + "stringValue": "st_VOZ" + }, + { + "stringValue": "st_VRE" + }, + { + "stringValue": "st_VTA" + }, + { + "stringValue": "st_VTI" + }, + { + "stringValue": "st_WIA" + }, + { + "stringValue": "st_WIF" + }, + { + "stringValue": "st_YB" + } + ] + } + }, + "st_WJA": { + "arrayValue": { + "values": [ + { + "stringValue": "st_0N" + }, + { + "stringValue": "st_4T" + }, + { + "stringValue": "st_AAL" + }, + { + "stringValue": "st_AAY" + }, + { + "stringValue": "st_ACA" + }, + { + "stringValue": "st_AEA" + }, + { + "stringValue": "st_AEE" + }, + { + "stringValue": "st_AFR" + }, + { + "stringValue": "st_AIE" + }, + { + "stringValue": "st_AIZ" + }, + { + "stringValue": "st_AKT" + }, + { + "stringValue": "st_AMX" + }, + { + "stringValue": "st_ANT" + }, + { + "stringValue": "st_ANZ" + }, + { + "stringValue": "st_ASA" + }, + { + "stringValue": "st_AUA" + }, + { + "stringValue": "st_AVA" + }, + { + "stringValue": "st_AZU" + }, + { + "stringValue": "st_BAW" + }, + { + "stringValue": "st_BEL" + }, + { + "stringValue": "st_BKP" + }, + { + "stringValue": "st_BLA" + }, + { + "stringValue": "st_BLS" + }, + { + "stringValue": "st_BTI" + }, + { + "stringValue": "st_BWA" + }, + { + "stringValue": "st_CAL" + }, + { + "stringValue": "st_CAV" + }, + { + "stringValue": "st_CAY" + }, + { + "stringValue": "st_CCM" + }, + { + "stringValue": "st_CES" + }, + { + "stringValue": "st_CFG" + }, + { + "stringValue": "st_CJT" + }, + { + "stringValue": "st_CMP" + }, + { + "stringValue": "st_CNF" + }, + { + "stringValue": "st_CPA" + }, + { + "stringValue": "st_CRK" + }, + { + "stringValue": "st_CRL" + }, + { + "stringValue": "st_CRQ" + }, + { + "stringValue": "st_CSA" + }, + { + "stringValue": "st_CTN" + }, + { + "stringValue": "st_DAL" + }, + { + "stringValue": "st_DLA" + }, + { + "stringValue": "st_DLH" + }, + { + "stringValue": "st_ELY" + }, + { + "stringValue": "st_ETD" + }, + { + "stringValue": "st_EVA" + }, + { + "stringValue": "st_EWG" + }, + { + "stringValue": "st_FBU" + }, + { + "stringValue": "st_FDB" + }, + { + "stringValue": "st_FDX" + }, + { + "stringValue": "st_FDY" + }, + { + "stringValue": "st_FFT" + }, + { + "stringValue": "st_FIN" + }, + { + "stringValue": "st_FJI" + }, + { + "stringValue": "st_FLE" + }, + { + "stringValue": "st_FWI" + }, + { + "stringValue": "st_GLO" + }, + { + "stringValue": "st_GLR" + }, + { + "stringValue": "st_GPD" + }, + { + "stringValue": "st_GZ" + }, + { + "stringValue": "st_HAL" + }, + { + "stringValue": "st_HDA" + }, + { + "stringValue": "st_HI" + }, + { + "stringValue": "st_HKE" + }, + { + "stringValue": "st_IBB" + }, + { + "stringValue": "st_IBE" + }, + { + "stringValue": "st_ICE" + }, + { + "stringValue": "st_IGO" + }, + { + "stringValue": "st_ITY" + }, + { + "stringValue": "st_JAL" + }, + { + "stringValue": "st_JBA" + }, + { + "stringValue": "st_JBU" + }, + { + "stringValue": "st_JJP" + }, + { + "stringValue": "st_JST" + }, + { + "stringValue": "st_JZA" + }, + { + "stringValue": "st_KAL" + }, + { + "stringValue": "st_KAP" + }, + { + "stringValue": "st_KLM" + }, + { + "stringValue": "st_KQA" + }, + { + "stringValue": "st_LAN" + }, + { + "stringValue": "st_LIA" + }, + { + "stringValue": "st_LOG" + }, + { + "stringValue": "st_LOT" + }, + { + "stringValue": "st_MEA" + }, + { + "stringValue": "st_MXY" + }, + { + "stringValue": "st_NKS" + }, + { + "stringValue": "st_NLA" + }, + { + "stringValue": "st_OAW" + }, + { + "stringValue": "st_OCN" + }, + { + "stringValue": "st_OMA" + }, + { + "stringValue": "st_ONE" + }, + { + "stringValue": "st_PAG" + }, + { + "stringValue": "st_PAL" + }, + { + "stringValue": "st_PBN" + }, + { + "stringValue": "st_PCO" + }, + { + "stringValue": "st_PIA" + }, + { + "stringValue": "st_POE" + }, + { + "stringValue": "st_POE_2025" + }, + { + "stringValue": "st_PSC" + }, + { + "stringValue": "st_PVL" + }, + { + "stringValue": "st_QFA" + }, + { + "stringValue": "st_QTR" + }, + { + "stringValue": "st_RJA" + }, + { + "stringValue": "st_RVF" + }, + { + "stringValue": "st_SAS" + }, + { + "stringValue": "st_SAT" + }, + { + "stringValue": "st_SCE" + }, + { + "stringValue": "st_SCX" + }, + { + "stringValue": "st_SJX" + }, + { + "stringValue": "st_SKW" + }, + { + "stringValue": "st_SVA" + }, + { + "stringValue": "st_SWA" + }, + { + "stringValue": "st_SWR" + }, + { + "stringValue": "st_SXS" + }, + { + "stringValue": "st_TAP" + }, + { + "stringValue": "st_THT" + }, + { + "stringValue": "st_THY" + }, + { + "stringValue": "st_TIN" + }, + { + "stringValue": "st_TOS" + }, + { + "stringValue": "st_TRA" + }, + { + "stringValue": "st_TSC" + }, + { + "stringValue": "st_TUI" + }, + { + "stringValue": "st_TVF" + }, + { + "stringValue": "st_UAE" + }, + { + "stringValue": "st_UAL" + }, + { + "stringValue": "st_VIR" + }, + { + "stringValue": "st_VIV" + }, + { + "stringValue": "st_VLG" + }, + { + "stringValue": "st_VOE" + }, + { + "stringValue": "st_VOZ" + }, + { + "stringValue": "st_VTI" + }, + { + "stringValue": "st_WIA" + }, + { + "stringValue": "st_WJA" + }, + { + "stringValue": "st_YB" + } + ] + } + }, + "st_BKP": { + "arrayValue": { + "values": [ + { + "stringValue": "st_AAR" + }, + { + "stringValue": "st_ACA" + }, + { + "stringValue": "st_AFR" + }, + { + "stringValue": "st_AMU" + }, + { + "stringValue": "st_ANA" + }, + { + "stringValue": "st_ASA" + }, + { + "stringValue": "st_AUA" + }, + { + "stringValue": "st_BAW" + }, + { + "stringValue": "st_BEL" + }, + { + "stringValue": "st_CAL" + }, + { + "stringValue": "st_CFG" + }, + { + "stringValue": "st_CPA" + }, + { + "stringValue": "st_CRK" + }, + { + "stringValue": "st_DAL" + }, + { + "stringValue": "st_DLH" + }, + { + "stringValue": "st_ELY" + }, + { + "stringValue": "st_ETD" + }, + { + "stringValue": "st_EVA" + }, + { + "stringValue": "st_EWG" + }, + { + "stringValue": "st_FIN" + }, + { + "stringValue": "st_HKE" + }, + { + "stringValue": "st_HVN" + }, + { + "stringValue": "st_ITY" + }, + { + "stringValue": "st_JST" + }, + { + "stringValue": "st_KAL" + }, + { + "stringValue": "st_KLM" + }, + { + "stringValue": "st_LOT" + }, + { + "stringValue": "st_OCN" + }, + { + "stringValue": "st_QFA" + }, + { + "stringValue": "st_QTR" + }, + { + "stringValue": "st_SAS" + }, + { + "stringValue": "st_SJX" + }, + { + "stringValue": "st_SWA" + }, + { + "stringValue": "st_SWR" + }, + { + "stringValue": "st_THY" + }, + { + "stringValue": "st_UAE" + }, + { + "stringValue": "st_UAL" + }, + { + "stringValue": "st_WJA" + } + ] + } + }, + "st_LHX": { + "arrayValue": { + "values": [ + { + "stringValue": "st_AAL" + }, + { + "stringValue": "st_ASA" + }, + { + "stringValue": "st_BAW" + }, + { + "stringValue": "st_CFG" + }, + { + "stringValue": "st_DAL" + }, + { + "stringValue": "st_ETD" + }, + { + "stringValue": "st_SWA" + }, + { + "stringValue": "st_UAL" + } + ] + } + }, + "st_AEE": { + "arrayValue": { + "values": [ + { + "stringValue": "st_AAL" + }, + { + "stringValue": "st_ACA" + }, + { + "stringValue": "st_AEA" + }, + { + "stringValue": "st_AFR" + }, + { + "stringValue": "st_ASA" + }, + { + "stringValue": "st_AUA" + }, + { + "stringValue": "st_BAW" + }, + { + "stringValue": "st_BEL" + }, + { + "stringValue": "st_CFG" + }, + { + "stringValue": "st_CPA" + }, + { + "stringValue": "st_DAL" + }, + { + "stringValue": "st_DLH" + }, + { + "stringValue": "st_ELY" + }, + { + "stringValue": "st_ETD" + }, + { + "stringValue": "st_EWG" + }, + { + "stringValue": "st_FIN" + }, + { + "stringValue": "st_IBE" + }, + { + "stringValue": "st_ITY" + }, + { + "stringValue": "st_JBU" + }, + { + "stringValue": "st_LOT" + }, + { + "stringValue": "st_NKS" + }, + { + "stringValue": "st_OCN" + }, + { + "stringValue": "st_QFA" + }, + { + "stringValue": "st_QTR" + }, + { + "stringValue": "st_SAS" + }, + { + "stringValue": "st_SWA" + }, + { + "stringValue": "st_SWR" + }, + { + "stringValue": "st_THY" + }, + { + "stringValue": "st_UAE" + }, + { + "stringValue": "st_UAL" + } + ] + } + }, + "st_EZY": { + "arrayValue": { + "values": [ + { + "stringValue": "st_AAL" + }, + { + "stringValue": "st_AFR" + }, + { + "stringValue": "st_BAW" + }, + { + "stringValue": "st_CPA" + }, + { + "stringValue": "st_DAL" + }, + { + "stringValue": "st_DLH" + }, + { + "stringValue": "st_EIN" + }, + { + "stringValue": "st_ETD" + }, + { + "stringValue": "st_FIN" + }, + { + "stringValue": "st_IBE" + }, + { + "stringValue": "st_ITY" + }, + { + "stringValue": "st_QTR" + }, + { + "stringValue": "st_SWA" + }, + { + "stringValue": "st_SWR" + }, + { + "stringValue": "st_TAP" + }, + { + "stringValue": "st_UAL" + }, + { + "stringValue": "st_VIR" + } + ] + } + }, + "st_FDB": { + "arrayValue": { + "values": [ + { + "stringValue": "st_AAF" + }, + { + "stringValue": "st_AAY" + }, + { + "stringValue": "st_ABV" + }, + { + "stringValue": "st_ABY" + }, + { + "stringValue": "st_ACA" + }, + { + "stringValue": "st_ACI" + }, + { + "stringValue": "st_AEA" + }, + { + "stringValue": "st_AEE" + }, + { + "stringValue": "st_AFR" + }, + { + "stringValue": "st_AIC" + }, + { + "stringValue": "st_AIZ" + }, + { + "stringValue": "st_AKT" + }, + { + "stringValue": "st_AMX" + }, + { + "stringValue": "st_ASA" + }, + { + "stringValue": "st_ASL" + }, + { + "stringValue": "st_AUA" + }, + { + "stringValue": "st_AVA" + }, + { + "stringValue": "st_AZU" + }, + { + "stringValue": "st_BAW" + }, + { + "stringValue": "st_BCY" + }, + { + "stringValue": "st_BEE" + }, + { + "stringValue": "st_BKP" + }, + { + "stringValue": "st_BLA" + }, + { + "stringValue": "st_BOS" + }, + { + "stringValue": "st_BTI" + }, + { + "stringValue": "st_CAV" + }, + { + "stringValue": "st_CAY" + }, + { + "stringValue": "st_CCM" + }, + { + "stringValue": "st_CFG" + }, + { + "stringValue": "st_CPA" + }, + { + "stringValue": "st_CRQ" + }, + { + "stringValue": "st_CSA" + }, + { + "stringValue": "st_CTN" + }, + { + "stringValue": "st_CTU" + }, + { + "stringValue": "st_DAL" + }, + { + "stringValue": "st_DJT" + }, + { + "stringValue": "st_DLA" + }, + { + "stringValue": "st_DLH" + }, + { + "stringValue": "st_DSM" + }, + { + "stringValue": "st_DTR" + }, + { + "stringValue": "st_EDW" + }, + { + "stringValue": "st_ELY" + }, + { + "stringValue": "st_ETD" + }, + { + "stringValue": "st_ETH" + }, + { + "stringValue": "st_EWG" + }, + { + "stringValue": "st_FAH" + }, + { + "stringValue": "st_FCM" + }, + { + "stringValue": "st_FDB" + }, + { + "stringValue": "st_FIN" + }, + { + "stringValue": "st_FPO" + }, + { + "stringValue": "st_GLG" + }, + { + "stringValue": "st_GLO" + }, + { + "stringValue": "st_GLR" + }, + { + "stringValue": "st_HAL" + }, + { + "stringValue": "st_HDA" + }, + { + "stringValue": "st_IBE" + }, + { + "stringValue": "st_IBS" + }, + { + "stringValue": "st_IGO" + }, + { + "stringValue": "st_ISR" + }, + { + "stringValue": "st_ITY" + }, + { + "stringValue": "st_JBU" + }, + { + "stringValue": "st_JJP" + }, + { + "stringValue": "st_JSA" + }, + { + "stringValue": "st_JST" + }, + { + "stringValue": "st_JSX" + }, + { + "stringValue": "st_JZR" + }, + { + "stringValue": "st_KAC" + }, + { + "stringValue": "st_KLM" + }, + { + "stringValue": "st_KQA" + }, + { + "stringValue": "st_KZR" + }, + { + "stringValue": "st_LAN" + }, + { + "stringValue": "st_LGL" + }, + { + "stringValue": "st_LNE" + }, + { + "stringValue": "st_LOG" + }, + { + "stringValue": "st_LOT" + }, + { + "stringValue": "st_LRC" + }, + { + "stringValue": "st_MAC" + }, + { + "stringValue": "st_MAU" + }, + { + "stringValue": "st_MXY" + }, + { + "stringValue": "st_NDA" + }, + { + "stringValue": "st_NKS" + }, + { + "stringValue": "st_NOZ" + }, + { + "stringValue": "st_OAL" + }, + { + "stringValue": "st_OAW" + }, + { + "stringValue": "st_OMA" + }, + { + "stringValue": "st_ONE" + }, + { + "stringValue": "st_PIA" + }, + { + "stringValue": "st_POE" + }, + { + "stringValue": "st_QFA" + }, + { + "stringValue": "st_QTR" + }, + { + "stringValue": "st_RBA" + }, + { + "stringValue": "st_RJA" + }, + { + "stringValue": "st_RWD" + }, + { + "stringValue": "st_SAA" + }, + { + "stringValue": "st_SAS" + }, + { + "stringValue": "st_SAT" + }, + { + "stringValue": "st_SBI" + }, + { + "stringValue": "st_SEY" + }, + { + "stringValue": "st_SGQ" + }, + { + "stringValue": "st_SKK" + }, + { + "stringValue": "st_SVA" + }, + { + "stringValue": "st_SWA" + }, + { + "stringValue": "st_SWR" + }, + { + "stringValue": "st_SXS" + }, + { + "stringValue": "st_TAI" + }, + { + "stringValue": "st_TAP" + }, + { + "stringValue": "st_TAY" + }, + { + "stringValue": "st_THY" + }, + { + "stringValue": "st_TIN" + }, + { + "stringValue": "st_TPC" + }, + { + "stringValue": "st_TRA" + }, + { + "stringValue": "st_TSC" + }, + { + "stringValue": "st_TTW" + }, + { + "stringValue": "st_TVS" + }, + { + "stringValue": "st_UAE" + }, + { + "stringValue": "st_UAL" + }, + { + "stringValue": "st_VGI" + }, + { + "stringValue": "st_VIR" + }, + { + "stringValue": "st_VJH" + }, + { + "stringValue": "st_VLG" + }, + { + "stringValue": "st_VOZ" + }, + { + "stringValue": "st_VTI" + }, + { + "stringValue": "st_VXP" + }, + { + "stringValue": "st_WIA" + }, + { + "stringValue": "st_WIF" + }, + { + "stringValue": "st_WJA" + } + ] + } + }, + "st_PVL": { + "arrayValue": { + "values": [ + { + "stringValue": "st_ACA" + }, + { + "stringValue": "st_POE" + }, + { + "stringValue": "st_TSC" + }, + { + "stringValue": "st_UAL" + }, + { + "stringValue": "st_WJA" + } + ] + } + }, + "st_GFA": { + "arrayValue": { + "values": [ + { + "stringValue": "st_ACA" + }, + { + "stringValue": "st_BAW" + }, + { + "stringValue": "st_DLH" + }, + { + "stringValue": "st_ETD" + }, + { + "stringValue": "st_QTR" + }, + { + "stringValue": "st_SVA" + }, + { + "stringValue": "st_UAL" + } + ] + } + }, + "st_KFS": { + "arrayValue": { + "values": [ + { + "stringValue": "st_DAL" + } + ] + } + }, + "st_FDY": { + "arrayValue": { + "values": [ + { + "stringValue": "st_AAH" + }, + { + "stringValue": "st_AAL" + }, + { + "stringValue": "st_AAY" + }, + { + "stringValue": "st_ACO" + }, + { + "stringValue": "st_AJT" + }, + { + "stringValue": "st_ASA" + }, + { + "stringValue": "st_ASH" + }, + { + "stringValue": "st_ASQ" + }, + { + "stringValue": "st_AWI" + }, + { + "stringValue": "st_BAW" + }, + { + "stringValue": "st_BRG" + }, + { + "stringValue": "st_BTQ" + }, + { + "stringValue": "st_BTZ" + }, + { + "stringValue": "st_CFS" + }, + { + "stringValue": "st_CKS" + }, + { + "stringValue": "st_CYO" + }, + { + "stringValue": "st_DAL" + }, + { + "stringValue": "st_EAT" + }, + { + "stringValue": "st_ENY" + }, + { + "stringValue": "st_FDX" + }, + { + "stringValue": "st_FFT" + }, + { + "stringValue": "st_FRG" + }, + { + "stringValue": "st_GPD" + }, + { + "stringValue": "st_GTI" + }, + { + "stringValue": "st_HAL" + }, + { + "stringValue": "st_JBU" + }, + { + "stringValue": "st_JIA" + }, + { + "stringValue": "st_JNY" + }, + { + "stringValue": "st_KAP" + }, + { + "stringValue": "st_KFS" + }, + { + "stringValue": "st_KII" + }, + { + "stringValue": "st_KYE" + }, + { + "stringValue": "st_LYC" + }, + { + "stringValue": "st_MGE" + }, + { + "stringValue": "st_MNU" + }, + { + "stringValue": "st_MTN" + }, + { + "stringValue": "st_MUI" + }, + { + "stringValue": "st_MXY" + }, + { + "stringValue": "st_NAC" + }, + { + "stringValue": "st_NKS" + }, + { + "stringValue": "st_OAE" + }, + { + "stringValue": "st_PAC" + }, + { + "stringValue": "st_PDT" + }, + { + "stringValue": "st_QXE" + }, + { + "stringValue": "st_RDS" + }, + { + "stringValue": "st_RPA" + }, + { + "stringValue": "st_RYA" + }, + { + "stringValue": "st_SBS" + }, + { + "stringValue": "st_SCX" + }, + { + "stringValue": "st_SIL" + }, + { + "stringValue": "st_SKW" + }, + { + "stringValue": "st_SPA" + }, + { + "stringValue": "st_STT" + }, + { + "stringValue": "st_SWA" + }, + { + "stringValue": "st_SWQ" + }, + { + "stringValue": "st_UAL" + }, + { + "stringValue": "st_UPS" + }, + { + "stringValue": "st_VID" + }, + { + "stringValue": "st_VTE" + }, + { + "stringValue": "st_VTS" + }, + { + "stringValue": "st_VXP" + }, + { + "stringValue": "st_WAF" + }, + { + "stringValue": "st_WAL" + }, + { + "stringValue": "st_WAV" + }, + { + "stringValue": "st_WWI" + } + ] + } + }, + "st_HKE": { + "arrayValue": { + "values": [ + { + "stringValue": "st_AAL" + }, + { + "stringValue": "st_AAY" + }, + { + "stringValue": "st_ACA" + }, + { + "stringValue": "st_AFR" + }, + { + "stringValue": "st_AMU" + }, + { + "stringValue": "st_ANZ" + }, + { + "stringValue": "st_ASA" + }, + { + "stringValue": "st_AUA" + }, + { + "stringValue": "st_BAW" + }, + { + "stringValue": "st_BEL" + }, + { + "stringValue": "st_BKP" + }, + { + "stringValue": "st_CPA" + }, + { + "stringValue": "st_CRK" + }, + { + "stringValue": "st_DAL" + }, + { + "stringValue": "st_DLH" + }, + { + "stringValue": "st_ETD" + }, + { + "stringValue": "st_EVA" + }, + { + "stringValue": "st_EWG" + }, + { + "stringValue": "st_FCM" + }, + { + "stringValue": "st_FFT" + }, + { + "stringValue": "st_FIN" + }, + { + "stringValue": "st_IBE" + }, + { + "stringValue": "st_IGO" + }, + { + "stringValue": "st_JBU" + }, + { + "stringValue": "st_JJP" + }, + { + "stringValue": "st_JST" + }, + { + "stringValue": "st_LAN" + }, + { + "stringValue": "st_QFA" + }, + { + "stringValue": "st_QTR" + }, + { + "stringValue": "st_SAS" + }, + { + "stringValue": "st_SJX" + }, + { + "stringValue": "st_SWA" + }, + { + "stringValue": "st_SWR" + }, + { + "stringValue": "st_TTW" + }, + { + "stringValue": "st_UAE" + }, + { + "stringValue": "st_UAL" + }, + { + "stringValue": "st_VLG" + }, + { + "stringValue": "st_VOZ" + }, + { + "stringValue": "st_WJA" + } + ] + } + }, + "st_KAL": { + "arrayValue": { + "values": [ + { + "stringValue": "st_AAL" + }, + { + "stringValue": "st_AAR" + }, + { + "stringValue": "st_ACA" + }, + { + "stringValue": "st_AEA" + }, + { + "stringValue": "st_AFR" + }, + { + "stringValue": "st_AJX" + }, + { + "stringValue": "st_AMU" + }, + { + "stringValue": "st_ANA" + }, + { + "stringValue": "st_ANZ" + }, + { + "stringValue": "st_ARG" + }, + { + "stringValue": "st_ASA" + }, + { + "stringValue": "st_AUA" + }, + { + "stringValue": "st_BAW" + }, + { + "stringValue": "st_BKP" + }, + { + "stringValue": "st_CAL" + }, + { + "stringValue": "st_CES" + }, + { + "stringValue": "st_CMP" + }, + { + "stringValue": "st_CPA" + }, + { + "stringValue": "st_CSH" + }, + { + "stringValue": "st_CXA" + }, + { + "stringValue": "st_DAL" + }, + { + "stringValue": "st_DLH" + }, + { + "stringValue": "st_EDV" + }, + { + "stringValue": "st_ENY" + }, + { + "stringValue": "st_ETD" + }, + { + "stringValue": "st_EVA" + }, + { + "stringValue": "st_FIN" + }, + { + "stringValue": "st_GIA" + }, + { + "stringValue": "st_HAL" + }, + { + "stringValue": "st_HVN" + }, + { + "stringValue": "st_IBE" + }, + { + "stringValue": "st_ITY" + }, + { + "stringValue": "st_JAL" + }, + { + "stringValue": "st_JBU" + }, + { + "stringValue": "st_JIA" + }, + { + "stringValue": "st_JNA" + }, + { + "stringValue": "st_JST" + }, + { + "stringValue": "st_JZA" + }, + { + "stringValue": "st_KAL" + }, + { + "stringValue": "st_KAL" + }, + { + "stringValue": "st_KLM" + }, + { + "stringValue": "st_LAN" + }, + { + "stringValue": "st_LOT" + }, + { + "stringValue": "st_MAS" + }, + { + "stringValue": "st_PAL" + }, + { + "stringValue": "st_QFA" + }, + { + "stringValue": "st_QTR" + }, + { + "stringValue": "st_QXE" + }, + { + "stringValue": "st_SAS" + }, + { + "stringValue": "st_SKW" + }, + { + "stringValue": "st_SVA" + }, + { + "stringValue": "st_SWA" + }, + { + "stringValue": "st_SWR" + }, + { + "stringValue": "st_TAP" + }, + { + "stringValue": "st_THA" + }, + { + "stringValue": "st_THY" + }, + { + "stringValue": "st_TTW" + }, + { + "stringValue": "st_UAE" + }, + { + "stringValue": "st_UAL" + }, + { + "stringValue": "st_VIR" + }, + { + "stringValue": "st_VOZ" + }, + { + "stringValue": "st_WJA" + } + ] + } + }, + "st_OAW": { + "arrayValue": { + "values": [ + { + "stringValue": "st_AFR" + }, + { + "stringValue": "st_AUA" + }, + { + "stringValue": "st_CFG" + }, + { + "stringValue": "st_DLH" + }, + { + "stringValue": "st_EDW" + }, + { + "stringValue": "st_ETD" + }, + { + "stringValue": "st_FIN" + }, + { + "stringValue": "st_IBE" + }, + { + "stringValue": "st_SWR" + }, + { + "stringValue": "st_UAE" + } + ] + } + }, + "st_J5": { + "arrayValue": { + "values": [ + { + "stringValue": "st_ASA" + }, + { + "stringValue": "st_DAL" + } + ] + } + }, + "st_UIA": { + "arrayValue": { + "values": [ + { + "stringValue": "st_CAL" + }, + { + "stringValue": "st_CPA" + }, + { + "stringValue": "st_DLH" + }, + { + "stringValue": "st_JJP" + }, + { + "stringValue": "st_TTW" + }, + { + "stringValue": "st_UAE" + }, + { + "stringValue": "st_UAL" + } + ] + } + }, + "st_TAP": { + "arrayValue": { + "values": [ + { + "stringValue": "st_AAL" + }, + { + "stringValue": "st_AAR" + }, + { + "stringValue": "st_ACA" + }, + { + "stringValue": "st_AEA" + }, + { + "stringValue": "st_AFR" + }, + { + "stringValue": "st_AIC" + }, + { + "stringValue": "st_ANA" + }, + { + "stringValue": "st_ARG" + }, + { + "stringValue": "st_ASA" + }, + { + "stringValue": "st_AUA" + }, + { + "stringValue": "st_AVA" + }, + { + "stringValue": "st_AZU" + }, + { + "stringValue": "st_BAW" + }, + { + "stringValue": "st_BEL" + }, + { + "stringValue": "st_BTI" + }, + { + "stringValue": "st_CAL" + }, + { + "stringValue": "st_CFG" + }, + { + "stringValue": "st_CMP" + }, + { + "stringValue": "st_CPA" + }, + { + "stringValue": "st_CTN" + }, + { + "stringValue": "st_DAL" + }, + { + "stringValue": "st_DLA" + }, + { + "stringValue": "st_DLH" + }, + { + "stringValue": "st_EDV" + }, + { + "stringValue": "st_EDW" + }, + { + "stringValue": "st_ELY" + }, + { + "stringValue": "st_ETD" + }, + { + "stringValue": "st_ETH" + }, + { + "stringValue": "st_EVA" + }, + { + "stringValue": "st_EWE" + }, + { + "stringValue": "st_EWG" + }, + { + "stringValue": "st_EZY" + }, + { + "stringValue": "st_FDB" + }, + { + "stringValue": "st_FFT" + }, + { + "stringValue": "st_FIN" + }, + { + "stringValue": "st_GLO" + }, + { + "stringValue": "st_HAL" + }, + { + "stringValue": "st_IBE" + }, + { + "stringValue": "st_ICE" + }, + { + "stringValue": "st_ITY" + }, + { + "stringValue": "st_JBU" + }, + { + "stringValue": "st_KAL" + }, + { + "stringValue": "st_KLM" + }, + { + "stringValue": "st_LAN" + }, + { + "stringValue": "st_LGL" + }, + { + "stringValue": "st_LOT" + }, + { + "stringValue": "st_MBU" + }, + { + "stringValue": "st_MXY" + }, + { + "stringValue": "st_NKS" + }, + { + "stringValue": "st_OCN" + }, + { + "stringValue": "st_POE" + }, + { + "stringValue": "st_POE_2025" + }, + { + "stringValue": "st_QFA" + }, + { + "stringValue": "st_QTR" + }, + { + "stringValue": "st_RPA" + }, + { + "stringValue": "st_RZO" + }, + { + "stringValue": "st_SAS" + }, + { + "stringValue": "st_SAT" + }, + { + "stringValue": "st_SIA" + }, + { + "stringValue": "st_SWA" + }, + { + "stringValue": "st_SWR" + }, + { + "stringValue": "st_TAM" + }, + { + "stringValue": "st_TAP" + }, + { + "stringValue": "st_TAP" + }, + { + "stringValue": "st_THA" + }, + { + "stringValue": "st_THY" + }, + { + "stringValue": "st_TRA" + }, + { + "stringValue": "st_TSC" + }, + { + "stringValue": "st_TVF" + }, + { + "stringValue": "st_UAE" + }, + { + "stringValue": "st_UAL" + }, + { + "stringValue": "st_VIR" + }, + { + "stringValue": "st_VLG" + }, + { + "stringValue": "st_VOZ" + }, + { + "stringValue": "st_WIF" + }, + { + "stringValue": "st_WJA" + } + ] + } + }, + "st_AFR": { + "arrayValue": { + "values": [ + { + "stringValue": "st_AAF" + }, + { + "stringValue": "st_AAL" + }, + { + "stringValue": "st_AAR" + }, + { + "stringValue": "st_AAY" + }, + { + "stringValue": "st_ABY" + }, + { + "stringValue": "st_ACA" + }, + { + "stringValue": "st_ACI" + }, + { + "stringValue": "st_ADY" + }, + { + "stringValue": "st_AEA" + }, + { + "stringValue": "st_AEE" + }, + { + "stringValue": "st_AFL" + }, + { + "stringValue": "st_AFR" + }, + { + "stringValue": "st_AIE" + }, + { + "stringValue": "st_AIZ" + }, + { + "stringValue": "st_AKT" + }, + { + "stringValue": "st_ALK" + }, + { + "stringValue": "st_AMX" + }, + { + "stringValue": "st_ANA" + }, + { + "stringValue": "st_ANK" + }, + { + "stringValue": "st_ANT" + }, + { + "stringValue": "st_ANZ" + }, + { + "stringValue": "st_ARE" + }, + { + "stringValue": "st_ARG" + }, + { + "stringValue": "st_ASA" + }, + { + "stringValue": "st_ASH" + }, + { + "stringValue": "st_AUA" + }, + { + "stringValue": "st_AVA" + }, + { + "stringValue": "st_AZU" + }, + { + "stringValue": "st_BAW" + }, + { + "stringValue": "st_BCV" + }, + { + "stringValue": "st_BCY" + }, + { + "stringValue": "st_BEE" + }, + { + "stringValue": "st_BEL" + }, + { + "stringValue": "st_BKP" + }, + { + "stringValue": "st_BRX" + }, + { + "stringValue": "st_BTI" + }, + { + "stringValue": "st_BWA" + }, + { + "stringValue": "st_CAL" + }, + { + "stringValue": "st_CAY" + }, + { + "stringValue": "st_CCA" + }, + { + "stringValue": "st_CCM" + }, + { + "stringValue": "st_CES" + }, + { + "stringValue": "st_CFE" + }, + { + "stringValue": "st_CFG" + }, + { + "stringValue": "st_CMP" + }, + { + "stringValue": "st_CPA" + }, + { + "stringValue": "st_CRK" + }, + { + "stringValue": "st_CRL" + }, + { + "stringValue": "st_CRQ" + }, + { + "stringValue": "st_CSA" + }, + { + "stringValue": "st_CSH" + }, + { + "stringValue": "st_CTN" + }, + { + "stringValue": "st_CXA" + }, + { + "stringValue": "st_DAL" + }, + { + "stringValue": "st_DJT" + }, + { + "stringValue": "st_DLA" + }, + { + "stringValue": "st_DLH" + }, + { + "stringValue": "st_DSM" + }, + { + "stringValue": "st_DTR" + }, + { + "stringValue": "st_EDV" + }, + { + "stringValue": "st_EDW" + }, + { + "stringValue": "st_EIN" + }, + { + "stringValue": "st_ELY" + }, + { + "stringValue": "st_ENY" + }, + { + "stringValue": "st_EST" + }, + { + "stringValue": "st_ETD" + }, + { + "stringValue": "st_ETH" + }, + { + "stringValue": "st_EVA" + }, + { + "stringValue": "st_EWE" + }, + { + "stringValue": "st_EWG" + }, + { + "stringValue": "st_EZY" + }, + { + "stringValue": "st_FBU" + }, + { + "stringValue": "st_FCM" + }, + { + "stringValue": "st_FDB" + }, + { + "stringValue": "st_FFT" + }, + { + "stringValue": "st_FIN" + }, + { + "stringValue": "st_FJI" + }, + { + "stringValue": "st_FLE" + }, + { + "stringValue": "st_FLI" + }, + { + "stringValue": "st_FPO" + }, + { + "stringValue": "st_FWI" + }, + { + "stringValue": "st_GFA" + }, + { + "stringValue": "st_GIA" + }, + { + "stringValue": "st_GLG" + }, + { + "stringValue": "st_GLO" + }, + { + "stringValue": "st_GLR" + }, + { + "stringValue": "st_GRL" + }, + { + "stringValue": "st_GZ" + }, + { + "stringValue": "st_HAL" + }, + { + "stringValue": "st_HKE" + }, + { + "stringValue": "st_HVN" + }, + { + "stringValue": "st_IBB" + }, + { + "stringValue": "st_IBE" + }, + { + "stringValue": "st_IBS" + }, + { + "stringValue": "st_ICE" + }, + { + "stringValue": "st_IGO" + }, + { + "stringValue": "st_IGT" + }, + { + "stringValue": "st_ISR" + }, + { + "stringValue": "st_ISS" + }, + { + "stringValue": "st_ITY" + }, + { + "stringValue": "st_JAL" + }, + { + "stringValue": "st_JBU" + }, + { + "stringValue": "st_JIA" + }, + { + "stringValue": "st_JST" + }, + { + "stringValue": "st_JTA" + }, + { + "stringValue": "st_JZA" + }, + { + "stringValue": "st_KAC" + }, + { + "stringValue": "st_KAL" + }, + { + "stringValue": "st_KAP" + }, + { + "stringValue": "st_KES" + }, + { + "stringValue": "st_KLM" + }, + { + "stringValue": "st_KMM" + }, + { + "stringValue": "st_KQA" + }, + { + "stringValue": "st_KZR" + }, + { + "stringValue": "st_LAN" + }, + { + "stringValue": "st_LGL" + }, + { + "stringValue": "st_LNE" + }, + { + "stringValue": "st_LOG" + }, + { + "stringValue": "st_LOT" + }, + { + "stringValue": "st_LPE" + }, + { + "stringValue": "st_LRC" + }, + { + "stringValue": "st_MAC" + }, + { + "stringValue": "st_MAS" + }, + { + "stringValue": "st_MAU" + }, + { + "stringValue": "st_MDA" + }, + { + "stringValue": "st_MEA" + }, + { + "stringValue": "st_MGY" + }, + { + "stringValue": "st_MXY" + }, + { + "stringValue": "st_NBT" + }, + { + "stringValue": "st_NDA" + }, + { + "stringValue": "st_NKS" + }, + { + "stringValue": "st_NOZ" + }, + { + "stringValue": "st_NSZ" + }, + { + "stringValue": "st_OAL" + }, + { + "stringValue": "st_OAW" + }, + { + "stringValue": "st_OCN" + }, + { + "stringValue": "st_OMA" + }, + { + "stringValue": "st_ONE" + }, + { + "stringValue": "st_PAL" + }, + { + "stringValue": "st_PGT" + }, + { + "stringValue": "st_POE" + }, + { + "stringValue": "st_POE_2025" + }, + { + "stringValue": "st_PRO" + }, + { + "stringValue": "st_PSC" + }, + { + "stringValue": "st_QFA" + }, + { + "stringValue": "st_QJ" + }, + { + "stringValue": "st_QNZ" + }, + { + "stringValue": "st_QTR" + }, + { + "stringValue": "st_RAM" + }, + { + "stringValue": "st_REU" + }, + { + "stringValue": "st_RJA" + }, + { + "stringValue": "st_ROU" + }, + { + "stringValue": "st_RPA" + }, + { + "stringValue": "st_RVF" + }, + { + "stringValue": "st_RZO" + }, + { + "stringValue": "st_SAA" + }, + { + "stringValue": "st_SAS" + }, + { + "stringValue": "st_SAT" + }, + { + "stringValue": "st_SBI" + }, + { + "stringValue": "st_SEY" + }, + { + "stringValue": "st_SJX" + }, + { + "stringValue": "st_SKK" + }, + { + "stringValue": "st_SKU" + }, + { + "stringValue": "st_SKW" + }, + { + "stringValue": "st_SKX" + }, + { + "stringValue": "st_SUS" + }, + { + "stringValue": "st_SVA" + }, + { + "stringValue": "st_SWA" + }, + { + "stringValue": "st_SWR" + }, + { + "stringValue": "st_SXS" + }, + { + "stringValue": "st_SZS" + }, + { + "stringValue": "st_TAI" + }, + { + "stringValue": "st_TAP" + }, + { + "stringValue": "st_TAR" + }, + { + "stringValue": "st_TCV" + }, + { + "stringValue": "st_THA" + }, + { + "stringValue": "st_THT" + }, + { + "stringValue": "st_THY" + }, + { + "stringValue": "st_TIN" + }, + { + "stringValue": "st_TJT" + }, + { + "stringValue": "st_TPC" + }, + { + "stringValue": "st_TRA" + }, + { + "stringValue": "st_TSC" + }, + { + "stringValue": "st_TTW" + }, + { + "stringValue": "st_TUI" + }, + { + "stringValue": "st_TVF" + }, + { + "stringValue": "st_TVS" + }, + { + "stringValue": "st_UAE" + }, + { + "stringValue": "st_UAL" + }, + { + "stringValue": "st_VIR" + }, + { + "stringValue": "st_VLG" + }, + { + "stringValue": "st_VOE" + }, + { + "stringValue": "st_VOZ" + }, + { + "stringValue": "st_VRE" + }, + { + "stringValue": "st_VTA" + }, + { + "stringValue": "st_VTI" + }, + { + "stringValue": "st_VXP" + }, + { + "stringValue": "st_WIA" + }, + { + "stringValue": "st_WIF" + }, + { + "stringValue": "st_WJA" + }, + { + "stringValue": "st_XBO" + } + ] + } + }, + "st_SAT": { + "arrayValue": { + "values": [ + { + "stringValue": "st_TAP" + } + ] + } + }, + "st_MAU": { + "arrayValue": { + "values": [ + { + "stringValue": "st_AFR" + }, + { + "stringValue": "st_AUA" + }, + { + "stringValue": "st_BAW" + }, + { + "stringValue": "st_DLH" + }, + { + "stringValue": "st_ITY" + }, + { + "stringValue": "st_LOT" + }, + { + "stringValue": "st_QFA" + }, + { + "stringValue": "st_SWR" + }, + { + "stringValue": "st_TRA" + }, + { + "stringValue": "st_VLG" + } + ] + } + }, + "st_SVA": { + "arrayValue": { + "values": [ + { + "stringValue": "st_AAL" + }, + { + "stringValue": "st_ACA" + }, + { + "stringValue": "st_AFR" + }, + { + "stringValue": "st_ALK" + }, + { + "stringValue": "st_ARG" + }, + { + "stringValue": "st_ASA" + }, + { + "stringValue": "st_BAW" + }, + { + "stringValue": "st_CAL" + }, + { + "stringValue": "st_CPA" + }, + { + "stringValue": "st_DAL" + }, + { + "stringValue": "st_DLH" + }, + { + "stringValue": "st_EVA" + }, + { + "stringValue": "st_EWG" + }, + { + "stringValue": "st_FDB" + }, + { + "stringValue": "st_GFA" + }, + { + "stringValue": "st_GIA" + }, + { + "stringValue": "st_IBE" + }, + { + "stringValue": "st_ITY" + }, + { + "stringValue": "st_JBU" + }, + { + "stringValue": "st_KAL" + }, + { + "stringValue": "st_KNE" + }, + { + "stringValue": "st_LAN" + }, + { + "stringValue": "st_LGL" + }, + { + "stringValue": "st_MAS" + }, + { + "stringValue": "st_OMA" + }, + { + "stringValue": "st_PAL" + }, + { + "stringValue": "st_POE" + }, + { + "stringValue": "st_QFA" + }, + { + "stringValue": "st_QTR" + }, + { + "stringValue": "st_RPA" + }, + { + "stringValue": "st_RXI" + }, + { + "stringValue": "st_SVA" + }, + { + "stringValue": "st_SVA" + }, + { + "stringValue": "st_SWA" + }, + { + "stringValue": "st_SWR" + }, + { + "stringValue": "st_THY" + }, + { + "stringValue": "st_TVF" + }, + { + "stringValue": "st_UAE" + }, + { + "stringValue": "st_UAL" + }, + { + "stringValue": "st_VIR" + }, + { + "stringValue": "st_VLG" + }, + { + "stringValue": "st_WJA" + } + ] + } + }, + "st_TF_2025": { + "arrayValue": { + "values": [ + { + "stringValue": "st_SAS" + } + ] + } + }, + "st_JUS": { + "arrayValue": { + "values": [ + { + "stringValue": "st_ASA" + } + ] + } + }, + "st_PTN": { + "arrayValue": { + "values": [ + { + "stringValue": "st_DLH" + } + ] + } + }, + "st_AEA": { + "arrayValue": { + "values": [ + { + "stringValue": "st_AAL" + }, + { + "stringValue": "st_ACA" + }, + { + "stringValue": "st_AEA" + }, + { + "stringValue": "st_AEA" + }, + { + "stringValue": "st_AEE" + }, + { + "stringValue": "st_AFR" + }, + { + "stringValue": "st_ARG" + }, + { + "stringValue": "st_ASA" + }, + { + "stringValue": "st_AUA" + }, + { + "stringValue": "st_AVA" + }, + { + "stringValue": "st_AZU" + }, + { + "stringValue": "st_BAW" + }, + { + "stringValue": "st_BEL" + }, + { + "stringValue": "st_CES" + }, + { + "stringValue": "st_CFG" + }, + { + "stringValue": "st_CMP" + }, + { + "stringValue": "st_CPA" + }, + { + "stringValue": "st_DAL" + }, + { + "stringValue": "st_DLA" + }, + { + "stringValue": "st_DLH" + }, + { + "stringValue": "st_ETD" + }, + { + "stringValue": "st_EWE" + }, + { + "stringValue": "st_EWG" + }, + { + "stringValue": "st_FDB" + }, + { + "stringValue": "st_FIN" + }, + { + "stringValue": "st_GLO" + }, + { + "stringValue": "st_IBB" + }, + { + "stringValue": "st_IBE" + }, + { + "stringValue": "st_ITY" + }, + { + "stringValue": "st_JBU" + }, + { + "stringValue": "st_KAL" + }, + { + "stringValue": "st_LAN" + }, + { + "stringValue": "st_NKS" + }, + { + "stringValue": "st_NOZ" + }, + { + "stringValue": "st_OCN" + }, + { + "stringValue": "st_QTR" + }, + { + "stringValue": "st_SAS" + }, + { + "stringValue": "st_SWA" + }, + { + "stringValue": "st_SWR" + }, + { + "stringValue": "st_TAP" + }, + { + "stringValue": "st_THY" + }, + { + "stringValue": "st_UAE" + }, + { + "stringValue": "st_UAL" + }, + { + "stringValue": "st_VIR" + }, + { + "stringValue": "st_VLG" + }, + { + "stringValue": "st_VOE" + } + ] + } + }, + "st_EVA": { + "arrayValue": { + "values": [ + { + "stringValue": "st_AAL" + }, + { + "stringValue": "st_AAR" + }, + { + "stringValue": "st_AAY" + }, + { + "stringValue": "st_ACA" + }, + { + "stringValue": "st_AFR" + }, + { + "stringValue": "st_AMU" + }, + { + "stringValue": "st_ANA" + }, + { + "stringValue": "st_ANZ" + }, + { + "stringValue": "st_APJ" + }, + { + "stringValue": "st_ASA" + }, + { + "stringValue": "st_ASH" + }, + { + "stringValue": "st_AUA" + }, + { + "stringValue": "st_AVA" + }, + { + "stringValue": "st_BAW" + }, + { + "stringValue": "st_BEL" + }, + { + "stringValue": "st_BKP" + }, + { + "stringValue": "st_CAL" + }, + { + "stringValue": "st_CES" + }, + { + "stringValue": "st_CFG" + }, + { + "stringValue": "st_CMP" + }, + { + "stringValue": "st_CPA" + }, + { + "stringValue": "st_CRK" + }, + { + "stringValue": "st_DAL" + }, + { + "stringValue": "st_DLA" + }, + { + "stringValue": "st_DLH" + }, + { + "stringValue": "st_EDV" + }, + { + "stringValue": "st_ENY" + }, + { + "stringValue": "st_ETD" + }, + { + "stringValue": "st_EVA" + }, + { + "stringValue": "st_EVA" + }, + { + "stringValue": "st_EWG" + }, + { + "stringValue": "st_FCM" + }, + { + "stringValue": "st_FFT" + }, + { + "stringValue": "st_FIN" + }, + { + "stringValue": "st_FLE" + }, + { + "stringValue": "st_HAL" + }, + { + "stringValue": "st_HKE" + }, + { + "stringValue": "st_HVN" + }, + { + "stringValue": "st_IBE" + }, + { + "stringValue": "st_ICE" + }, + { + "stringValue": "st_JAL" + }, + { + "stringValue": "st_JBU" + }, + { + "stringValue": "st_JJP" + }, + { + "stringValue": "st_JST" + }, + { + "stringValue": "st_JTA" + }, + { + "stringValue": "st_KAL" + }, + { + "stringValue": "st_KLM" + }, + { + "stringValue": "st_LAN" + }, + { + "stringValue": "st_LOT" + }, + { + "stringValue": "st_MAS" + }, + { + "stringValue": "st_MDA" + }, + { + "stringValue": "st_MXY" + }, + { + "stringValue": "st_NKS" + }, + { + "stringValue": "st_NOZ" + }, + { + "stringValue": "st_NSZ" + }, + { + "stringValue": "st_OCN" + }, + { + "stringValue": "st_OMA" + }, + { + "stringValue": "st_PAL" + }, + { + "stringValue": "st_POE" + }, + { + "stringValue": "st_POE_2025" + }, + { + "stringValue": "st_QFA" + }, + { + "stringValue": "st_QTR" + }, + { + "stringValue": "st_QXE" + }, + { + "stringValue": "st_SAS" + }, + { + "stringValue": "st_SIA" + }, + { + "stringValue": "st_SJX" + }, + { + "stringValue": "st_SKW" + }, + { + "stringValue": "st_SVA" + }, + { + "stringValue": "st_SWA" + }, + { + "stringValue": "st_SWR" + }, + { + "stringValue": "st_TAP" + }, + { + "stringValue": "st_TGW" + }, + { + "stringValue": "st_THA" + }, + { + "stringValue": "st_THY" + }, + { + "stringValue": "st_TRA" + }, + { + "stringValue": "st_TSC" + }, + { + "stringValue": "st_TTW" + }, + { + "stringValue": "st_UAE" + }, + { + "stringValue": "st_UAL" + }, + { + "stringValue": "st_UPS" + }, + { + "stringValue": "st_VIR" + }, + { + "stringValue": "st_VLG" + }, + { + "stringValue": "st_VOZ" + }, + { + "stringValue": "st_WEN" + }, + { + "stringValue": "st_WJA" + } + ] + } + }, + "st_FLI": { + "arrayValue": { + "values": [ + { + "stringValue": "st_DLH" + }, + { + "stringValue": "st_SAS" + } + ] + } + }, + "st_FJI": { + "arrayValue": { + "values": [ + { + "stringValue": "st_AAL" + }, + { + "stringValue": "st_AAY" + }, + { + "stringValue": "st_ACA" + }, + { + "stringValue": "st_ANZ" + }, + { + "stringValue": "st_ASA" + }, + { + "stringValue": "st_AUA" + }, + { + "stringValue": "st_BAW" + }, + { + "stringValue": "st_CPA" + }, + { + "stringValue": "st_DAL" + }, + { + "stringValue": "st_DLH" + }, + { + "stringValue": "st_FFT" + }, + { + "stringValue": "st_FIN" + }, + { + "stringValue": "st_FLE" + }, + { + "stringValue": "st_HAL" + }, + { + "stringValue": "st_JBU" + }, + { + "stringValue": "st_JST" + }, + { + "stringValue": "st_NKS" + }, + { + "stringValue": "st_QFA" + }, + { + "stringValue": "st_SKW" + }, + { + "stringValue": "st_SWA" + }, + { + "stringValue": "st_SWR" + }, + { + "stringValue": "st_UAE" + }, + { + "stringValue": "st_UAL" + }, + { + "stringValue": "st_VIR" + }, + { + "stringValue": "st_VOZ" + }, + { + "stringValue": "st_WJA" + } + ] + } + }, + "st_ANZ": { + "arrayValue": { + "values": [ + { + "stringValue": "st_AAL" + }, + { + "stringValue": "st_AAR" + }, + { + "stringValue": "st_ACA" + }, + { + "stringValue": "st_ACI" + }, + { + "stringValue": "st_AFR" + }, + { + "stringValue": "st_ALK" + }, + { + "stringValue": "st_AMX" + }, + { + "stringValue": "st_ANA" + }, + { + "stringValue": "st_ANG" + }, + { + "stringValue": "st_ANZ" + }, + { + "stringValue": "st_APP" + }, + { + "stringValue": "st_ARG" + }, + { + "stringValue": "st_ASA" + }, + { + "stringValue": "st_AUA" + }, + { + "stringValue": "st_AVA" + }, + { + "stringValue": "st_BAW" + }, + { + "stringValue": "st_BCY" + }, + { + "stringValue": "st_BEL" + }, + { + "stringValue": "st_CAL" + }, + { + "stringValue": "st_CES" + }, + { + "stringValue": "st_CMP" + }, + { + "stringValue": "st_CPA" + }, + { + "stringValue": "st_CRK" + }, + { + "stringValue": "st_CSA" + }, + { + "stringValue": "st_CSZ" + }, + { + "stringValue": "st_CTN" + }, + { + "stringValue": "st_DAL" + }, + { + "stringValue": "st_DLH" + }, + { + "stringValue": "st_EDW" + }, + { + "stringValue": "st_EIN" + }, + { + "stringValue": "st_ELY" + }, + { + "stringValue": "st_ENY" + }, + { + "stringValue": "st_ETD" + }, + { + "stringValue": "st_EVA" + }, + { + "stringValue": "st_EWG" + }, + { + "stringValue": "st_FBU" + }, + { + "stringValue": "st_FC" + }, + { + "stringValue": "st_FDB" + }, + { + "stringValue": "st_FIN" + }, + { + "stringValue": "st_FJI" + }, + { + "stringValue": "st_FWI" + }, + { + "stringValue": "st_GBB" + }, + { + "stringValue": "st_GLR" + }, + { + "stringValue": "st_GZ" + }, + { + "stringValue": "st_HAL" + }, + { + "stringValue": "st_HKE" + }, + { + "stringValue": "st_HVN" + }, + { + "stringValue": "st_ICE" + }, + { + "stringValue": "st_IGO" + }, + { + "stringValue": "st_ITY" + }, + { + "stringValue": "st_JAL" + }, + { + "stringValue": "st_JBU" + }, + { + "stringValue": "st_JST" + }, + { + "stringValue": "st_JZA" + }, + { + "stringValue": "st_KAL" + }, + { + "stringValue": "st_KLM" + }, + { + "stringValue": "st_KMM" + }, + { + "stringValue": "st_KNE" + }, + { + "stringValue": "st_LAN" + }, + { + "stringValue": "st_LOT" + }, + { + "stringValue": "st_MAS" + }, + { + "stringValue": "st_MDA" + }, + { + "stringValue": "st_MXY" + }, + { + "stringValue": "st_NTR" + }, + { + "stringValue": "st_OCN" + }, + { + "stringValue": "st_OMA" + }, + { + "stringValue": "st_PAL" + }, + { + "stringValue": "st_PIA" + }, + { + "stringValue": "st_POE" + }, + { + "stringValue": "st_PTN" + }, + { + "stringValue": "st_QFA" + }, + { + "stringValue": "st_QTR" + }, + { + "stringValue": "st_RPB" + }, + { + "stringValue": "st_SAA" + }, + { + "stringValue": "st_SAS" + }, + { + "stringValue": "st_SCE" + }, + { + "stringValue": "st_SEY" + }, + { + "stringValue": "st_SIA" + }, + { + "stringValue": "st_SJX" + }, + { + "stringValue": "st_SKW" + }, + { + "stringValue": "st_SLK" + }, + { + "stringValue": "st_SOL" + }, + { + "stringValue": "st_SWA" + }, + { + "stringValue": "st_SWR" + }, + { + "stringValue": "st_TAP" + }, + { + "stringValue": "st_THA" + }, + { + "stringValue": "st_THT" + }, + { + "stringValue": "st_THY" + }, + { + "stringValue": "st_TIN" + }, + { + "stringValue": "st_TPC" + }, + { + "stringValue": "st_TRA" + }, + { + "stringValue": "st_TVF" + }, + { + "stringValue": "st_TVS" + }, + { + "stringValue": "st_UAE" + }, + { + "stringValue": "st_UAL" + }, + { + "stringValue": "st_UIA" + }, + { + "stringValue": "st_VIR" + }, + { + "stringValue": "st_VLG" + }, + { + "stringValue": "st_VOZ" + }, + { + "stringValue": "st_VTA" + }, + { + "stringValue": "st_WIF" + }, + { + "stringValue": "st_WJA" + }, + { + "stringValue": "st_YB" + } + ] + } + }, + "st_EWG": { + "arrayValue": { + "values": [ + { + "stringValue": "st_AAF" + }, + { + "stringValue": "st_AAL" + }, + { + "stringValue": "st_AAY" + }, + { + "stringValue": "st_ACA" + }, + { + "stringValue": "st_ACI" + }, + { + "stringValue": "st_AEA" + }, + { + "stringValue": "st_AEE" + }, + { + "stringValue": "st_AFR" + }, + { + "stringValue": "st_AIE" + }, + { + "stringValue": "st_AIZ" + }, + { + "stringValue": "st_AKT" + }, + { + "stringValue": "st_AMX" + }, + { + "stringValue": "st_ANA" + }, + { + "stringValue": "st_ANZ" + }, + { + "stringValue": "st_ASA" + }, + { + "stringValue": "st_ASH" + }, + { + "stringValue": "st_ASL" + }, + { + "stringValue": "st_AUA" + }, + { + "stringValue": "st_AVA" + }, + { + "stringValue": "st_AWU" + }, + { + "stringValue": "st_AZU" + }, + { + "stringValue": "st_BAW" + }, + { + "stringValue": "st_BCV" + }, + { + "stringValue": "st_BCY" + }, + { + "stringValue": "st_BEE" + }, + { + "stringValue": "st_BEL" + }, + { + "stringValue": "st_BKP" + }, + { + "stringValue": "st_BLA" + }, + { + "stringValue": "st_BLS" + }, + { + "stringValue": "st_BOS" + }, + { + "stringValue": "st_BRX" + }, + { + "stringValue": "st_BTI" + }, + { + "stringValue": "st_BWA" + }, + { + "stringValue": "st_CAI" + }, + { + "stringValue": "st_CAY" + }, + { + "stringValue": "st_CCM" + }, + { + "stringValue": "st_CFG" + }, + { + "stringValue": "st_CMP" + }, + { + "stringValue": "st_CNF" + }, + { + "stringValue": "st_CPA" + }, + { + "stringValue": "st_CRK" + }, + { + "stringValue": "st_CRL" + }, + { + "stringValue": "st_CRQ" + }, + { + "stringValue": "st_CS" + }, + { + "stringValue": "st_CSA" + }, + { + "stringValue": "st_CTN" + }, + { + "stringValue": "st_DAL" + }, + { + "stringValue": "st_DJT" + }, + { + "stringValue": "st_DLA" + }, + { + "stringValue": "st_DLH" + }, + { + "stringValue": "st_DSM" + }, + { + "stringValue": "st_DTR" + }, + { + "stringValue": "st_ECA" + }, + { + "stringValue": "st_EDW" + }, + { + "stringValue": "st_ELY" + }, + { + "stringValue": "st_ETD" + }, + { + "stringValue": "st_EVA" + }, + { + "stringValue": "st_EWG" + }, + { + "stringValue": "st_FBU" + }, + { + "stringValue": "st_FDB" + }, + { + "stringValue": "st_FFT" + }, + { + "stringValue": "st_FIN" + }, + { + "stringValue": "st_FJI" + }, + { + "stringValue": "st_FPO" + }, + { + "stringValue": "st_FWI" + }, + { + "stringValue": "st_GFA" + }, + { + "stringValue": "st_GIA" + }, + { + "stringValue": "st_GLG" + }, + { + "stringValue": "st_GLO" + }, + { + "stringValue": "st_GLR" + }, + { + "stringValue": "st_GRL" + }, + { + "stringValue": "st_GZ" + }, + { + "stringValue": "st_HAL" + }, + { + "stringValue": "st_HDA" + }, + { + "stringValue": "st_HKE" + }, + { + "stringValue": "st_IBB" + }, + { + "stringValue": "st_IBE" + }, + { + "stringValue": "st_ICE" + }, + { + "stringValue": "st_IGO" + }, + { + "stringValue": "st_ISR" + }, + { + "stringValue": "st_ISS" + }, + { + "stringValue": "st_ITY" + }, + { + "stringValue": "st_IYE" + }, + { + "stringValue": "st_JBU" + }, + { + "stringValue": "st_JJP" + }, + { + "stringValue": "st_JSA" + }, + { + "stringValue": "st_JST" + }, + { + "stringValue": "st_JSX" + }, + { + "stringValue": "st_KAP" + }, + { + "stringValue": "st_KEN" + }, + { + "stringValue": "st_KLM" + }, + { + "stringValue": "st_KMM" + }, + { + "stringValue": "st_KNE" + }, + { + "stringValue": "st_KQA" + }, + { + "stringValue": "st_KZR" + }, + { + "stringValue": "st_LAN" + }, + { + "stringValue": "st_LDA" + }, + { + "stringValue": "st_LDM" + }, + { + "stringValue": "st_LGL" + }, + { + "stringValue": "st_LIA" + }, + { + "stringValue": "st_LNE" + }, + { + "stringValue": "st_LOG" + }, + { + "stringValue": "st_LOT" + }, + { + "stringValue": "st_LPA" + }, + { + "stringValue": "st_LRC" + }, + { + "stringValue": "st_MAU" + }, + { + "stringValue": "st_MBU" + }, + { + "stringValue": "st_MEA" + }, + { + "stringValue": "st_MMD" + }, + { + "stringValue": "st_MXY" + }, + { + "stringValue": "st_NKS" + }, + { + "stringValue": "st_NMB" + }, + { + "stringValue": "st_OAL" + }, + { + "stringValue": "st_OCN" + }, + { + "stringValue": "st_OMA" + }, + { + "stringValue": "st_ONE" + }, + { + "stringValue": "st_PAG" + }, + { + "stringValue": "st_PCO" + }, + { + "stringValue": "st_PIA" + }, + { + "stringValue": "st_POE" + }, + { + "stringValue": "st_QFA" + }, + { + "stringValue": "st_QTR" + }, + { + "stringValue": "st_RBA" + }, + { + "stringValue": "st_REU" + }, + { + "stringValue": "st_RJA" + }, + { + "stringValue": "st_RVF" + }, + { + "stringValue": "st_RWD" + }, + { + "stringValue": "st_RZO" + }, + { + "stringValue": "st_SAS" + }, + { + "stringValue": "st_SAT" + }, + { + "stringValue": "st_SCE" + }, + { + "stringValue": "st_SCX" + }, + { + "stringValue": "st_SEY" + }, + { + "stringValue": "st_SIL" + }, + { + "stringValue": "st_SKU" + }, + { + "stringValue": "st_SKX" + }, + { + "stringValue": "st_SVA" + }, + { + "stringValue": "st_SWA" + }, + { + "stringValue": "st_SWR" + }, + { + "stringValue": "st_SXS" + }, + { + "stringValue": "st_TAI" + }, + { + "stringValue": "st_TAP" + }, + { + "stringValue": "st_TCV" + }, + { + "stringValue": "st_TGW" + }, + { + "stringValue": "st_THT" + }, + { + "stringValue": "st_THY" + }, + { + "stringValue": "st_TOS" + }, + { + "stringValue": "st_TPC" + }, + { + "stringValue": "st_TRA" + }, + { + "stringValue": "st_TSC" + }, + { + "stringValue": "st_TTW" + }, + { + "stringValue": "st_TUI" + }, + { + "stringValue": "st_TVF" + }, + { + "stringValue": "st_TVS" + }, + { + "stringValue": "st_UAE" + }, + { + "stringValue": "st_UAL" + }, + { + "stringValue": "st_VIR" + }, + { + "stringValue": "st_VIV" + }, + { + "stringValue": "st_VJH" + }, + { + "stringValue": "st_VLG" + }, + { + "stringValue": "st_VOE" + }, + { + "stringValue": "st_VOZ" + }, + { + "stringValue": "st_VTI" + }, + { + "stringValue": "st_WIA" + }, + { + "stringValue": "st_WIF" + }, + { + "stringValue": "st_WJA" + } + ] + } + }, + "st_GIA": { + "arrayValue": { + "values": [ + { + "stringValue": "st_AAR" + }, + { + "stringValue": "st_ANA" + }, + { + "stringValue": "st_DAL" + }, + { + "stringValue": "st_KAL" + }, + { + "stringValue": "st_QFA" + }, + { + "stringValue": "st_SVA" + }, + { + "stringValue": "st_SWA" + }, + { + "stringValue": "st_VOZ" + } + ] + } + }, + "st_BEL": { + "arrayValue": { + "values": [ + { + "stringValue": "st_AAL" + }, + { + "stringValue": "st_ACA" + }, + { + "stringValue": "st_AEA" + }, + { + "stringValue": "st_AEE" + }, + { + "stringValue": "st_AFR" + }, + { + "stringValue": "st_ANA" + }, + { + "stringValue": "st_ARG" + }, + { + "stringValue": "st_ASA" + }, + { + "stringValue": "st_AVA" + }, + { + "stringValue": "st_BAW" + }, + { + "stringValue": "st_BCS" + }, + { + "stringValue": "st_BEL" + }, + { + "stringValue": "st_BEL" + }, + { + "stringValue": "st_BKP" + }, + { + "stringValue": "st_BTI" + }, + { + "stringValue": "st_CFG" + }, + { + "stringValue": "st_CLX" + }, + { + "stringValue": "st_CMP" + }, + { + "stringValue": "st_CPA" + }, + { + "stringValue": "st_DAL" + }, + { + "stringValue": "st_DLH" + }, + { + "stringValue": "st_EDW" + }, + { + "stringValue": "st_ETD" + }, + { + "stringValue": "st_EVA" + }, + { + "stringValue": "st_FIN" + }, + { + "stringValue": "st_FWI" + }, + { + "stringValue": "st_HKE" + }, + { + "stringValue": "st_IBE" + }, + { + "stringValue": "st_ICE" + }, + { + "stringValue": "st_JBU" + }, + { + "stringValue": "st_LAN" + }, + { + "stringValue": "st_LGL" + }, + { + "stringValue": "st_LOT" + }, + { + "stringValue": "st_NBT" + }, + { + "stringValue": "st_NOZ" + }, + { + "stringValue": "st_OMA" + }, + { + "stringValue": "st_QFA" + }, + { + "stringValue": "st_QTR" + }, + { + "stringValue": "st_RAM" + }, + { + "stringValue": "st_SAS" + }, + { + "stringValue": "st_SWA" + }, + { + "stringValue": "st_TAP" + }, + { + "stringValue": "st_THA" + }, + { + "stringValue": "st_THY" + }, + { + "stringValue": "st_TRA" + }, + { + "stringValue": "st_UAE" + }, + { + "stringValue": "st_UAL" + }, + { + "stringValue": "st_VIR" + }, + { + "stringValue": "st_VJH" + }, + { + "stringValue": "st_VLG" + } + ] + } + }, + "st_RZO": { + "arrayValue": { + "values": [ + { + "stringValue": "st_AAL" + }, + { + "stringValue": "st_ACA" + }, + { + "stringValue": "st_AFR" + }, + { + "stringValue": "st_DLH" + }, + { + "stringValue": "st_ETD" + }, + { + "stringValue": "st_IBE" + }, + { + "stringValue": "st_JBU" + }, + { + "stringValue": "st_SWA" + }, + { + "stringValue": "st_TAP" + }, + { + "stringValue": "st_UAE" + }, + { + "stringValue": "st_UAL" + } + ] + } + }, + "st_JSX": { + "arrayValue": { + "values": [ + { + "stringValue": "st_AAL" + }, + { + "stringValue": "st_AAY" + }, + { + "stringValue": "st_ACA" + }, + { + "stringValue": "st_ASA" + }, + { + "stringValue": "st_AUA" + }, + { + "stringValue": "st_BAW" + }, + { + "stringValue": "st_DAL" + }, + { + "stringValue": "st_DLH" + }, + { + "stringValue": "st_ETD" + }, + { + "stringValue": "st_FFT" + }, + { + "stringValue": "st_HAL" + }, + { + "stringValue": "st_JBU" + }, + { + "stringValue": "st_JST" + }, + { + "stringValue": "st_MXY" + }, + { + "stringValue": "st_NKS" + }, + { + "stringValue": "st_QFA" + }, + { + "stringValue": "st_QTR" + }, + { + "stringValue": "st_SAS" + }, + { + "stringValue": "st_SWA" + }, + { + "stringValue": "st_SWR" + }, + { + "stringValue": "st_UAL" + } + ] + } + }, + "st_SJX": { + "arrayValue": { + "values": [ + { + "stringValue": "st_AAL" + }, + { + "stringValue": "st_ACA" + }, + { + "stringValue": "st_AFR" + }, + { + "stringValue": "st_AMU" + }, + { + "stringValue": "st_ANA" + }, + { + "stringValue": "st_ANZ" + }, + { + "stringValue": "st_ASA" + }, + { + "stringValue": "st_AUA" + }, + { + "stringValue": "st_AXE" + }, + { + "stringValue": "st_BAW" + }, + { + "stringValue": "st_BEL" + }, + { + "stringValue": "st_BKP" + }, + { + "stringValue": "st_CAL" + }, + { + "stringValue": "st_CFG" + }, + { + "stringValue": "st_CPA" + }, + { + "stringValue": "st_CRK" + }, + { + "stringValue": "st_DAL" + }, + { + "stringValue": "st_DLH" + }, + { + "stringValue": "st_EDW" + }, + { + "stringValue": "st_ETD" + }, + { + "stringValue": "st_EVA" + }, + { + "stringValue": "st_FIN" + }, + { + "stringValue": "st_HKE" + }, + { + "stringValue": "st_HVN" + }, + { + "stringValue": "st_JAL" + }, + { + "stringValue": "st_JBU" + }, + { + "stringValue": "st_JJP" + }, + { + "stringValue": "st_JSA" + }, + { + "stringValue": "st_JST" + }, + { + "stringValue": "st_LOT" + }, + { + "stringValue": "st_MAS" + }, + { + "stringValue": "st_MXY" + }, + { + "stringValue": "st_OMA" + }, + { + "stringValue": "st_PAL" + }, + { + "stringValue": "st_POE" + }, + { + "stringValue": "st_QFA" + }, + { + "stringValue": "st_QTR" + }, + { + "stringValue": "st_QXE" + }, + { + "stringValue": "st_SJX" + }, + { + "stringValue": "st_SJX" + }, + { + "stringValue": "st_SKY" + }, + { + "stringValue": "st_SWA" + }, + { + "stringValue": "st_SWR" + }, + { + "stringValue": "st_THA" + }, + { + "stringValue": "st_TTW" + }, + { + "stringValue": "st_UAE" + }, + { + "stringValue": "st_UAL" + }, + { + "stringValue": "st_WJA" + } + ] + } + }, + "st_JBU": { + "arrayValue": { + "values": [ + { + "stringValue": "st_AAF" + }, + { + "stringValue": "st_AAL" + }, + { + "stringValue": "st_AAR" + }, + { + "stringValue": "st_AAY" + }, + { + "stringValue": "st_ACA" + }, + { + "stringValue": "st_ACI" + }, + { + "stringValue": "st_AEA" + }, + { + "stringValue": "st_AEE" + }, + { + "stringValue": "st_AFL" + }, + { + "stringValue": "st_AFR" + }, + { + "stringValue": "st_AIC" + }, + { + "stringValue": "st_AIE" + }, + { + "stringValue": "st_AIZ" + }, + { + "stringValue": "st_AKT" + }, + { + "stringValue": "st_AMX" + }, + { + "stringValue": "st_ANA" + }, + { + "stringValue": "st_ANT" + }, + { + "stringValue": "st_ANZ" + }, + { + "stringValue": "st_ARG" + }, + { + "stringValue": "st_ASA" + }, + { + "stringValue": "st_ASH" + }, + { + "stringValue": "st_ASL" + }, + { + "stringValue": "st_AUA" + }, + { + "stringValue": "st_AVA" + }, + { + "stringValue": "st_AZU" + }, + { + "stringValue": "st_AZV" + }, + { + "stringValue": "st_BAW" + }, + { + "stringValue": "st_BCY" + }, + { + "stringValue": "st_BEL" + }, + { + "stringValue": "st_BHS" + }, + { + "stringValue": "st_BLA" + }, + { + "stringValue": "st_BOS" + }, + { + "stringValue": "st_BTI" + }, + { + "stringValue": "st_BTQ" + }, + { + "stringValue": "st_BWA" + }, + { + "stringValue": "st_CAL" + }, + { + "stringValue": "st_CAV" + }, + { + "stringValue": "st_CAY" + }, + { + "stringValue": "st_CCM" + }, + { + "stringValue": "st_CFG" + }, + { + "stringValue": "st_CLX" + }, + { + "stringValue": "st_CMP" + }, + { + "stringValue": "st_CPA" + }, + { + "stringValue": "st_CRK" + }, + { + "stringValue": "st_CRL" + }, + { + "stringValue": "st_CTN" + }, + { + "stringValue": "st_DAL" + }, + { + "stringValue": "st_DJT" + }, + { + "stringValue": "st_DLA" + }, + { + "stringValue": "st_DLH" + }, + { + "stringValue": "st_DNU" + }, + { + "stringValue": "st_DWI" + }, + { + "stringValue": "st_EDV" + }, + { + "stringValue": "st_EDW" + }, + { + "stringValue": "st_EIN" + }, + { + "stringValue": "st_ELY" + }, + { + "stringValue": "st_ENY" + }, + { + "stringValue": "st_ETD" + }, + { + "stringValue": "st_EVA" + }, + { + "stringValue": "st_EWG" + }, + { + "stringValue": "st_FBU" + }, + { + "stringValue": "st_FDB" + }, + { + "stringValue": "st_FDX" + }, + { + "stringValue": "st_FDY" + }, + { + "stringValue": "st_FFT" + }, + { + "stringValue": "st_FIN" + }, + { + "stringValue": "st_FJI" + }, + { + "stringValue": "st_FLE" + }, + { + "stringValue": "st_FPO" + }, + { + "stringValue": "st_FWI" + }, + { + "stringValue": "st_FYW" + }, + { + "stringValue": "st_GFA" + }, + { + "stringValue": "st_GJS" + }, + { + "stringValue": "st_GLO" + }, + { + "stringValue": "st_GPD" + }, + { + "stringValue": "st_GTI" + }, + { + "stringValue": "st_GZ" + }, + { + "stringValue": "st_HAL" + }, + { + "stringValue": "st_HHN" + }, + { + "stringValue": "st_HKE" + }, + { + "stringValue": "st_HOP" + }, + { + "stringValue": "st_IBE" + }, + { + "stringValue": "st_ICE" + }, + { + "stringValue": "st_IGO" + }, + { + "stringValue": "st_ISR" + }, + { + "stringValue": "st_ITY" + }, + { + "stringValue": "st_JBU" + }, + { + "stringValue": "st_JIA" + }, + { + "stringValue": "st_JJP" + }, + { + "stringValue": "st_JSA" + }, + { + "stringValue": "st_JST" + }, + { + "stringValue": "st_JSX" + }, + { + "stringValue": "st_JZA" + }, + { + "stringValue": "st_KAC" + }, + { + "stringValue": "st_KAP" + }, + { + "stringValue": "st_KLM" + }, + { + "stringValue": "st_KQA" + }, + { + "stringValue": "st_LAN" + }, + { + "stringValue": "st_LGL" + }, + { + "stringValue": "st_LIA" + }, + { + "stringValue": "st_LOG" + }, + { + "stringValue": "st_LOT" + }, + { + "stringValue": "st_MHO" + }, + { + "stringValue": "st_MSR" + }, + { + "stringValue": "st_MXY" + }, + { + "stringValue": "st_NBT" + }, + { + "stringValue": "st_NHG" + }, + { + "stringValue": "st_NKS" + }, + { + "stringValue": "st_NLA" + }, + { + "stringValue": "st_NOZ" + }, + { + "stringValue": "st_OCN" + }, + { + "stringValue": "st_OMA" + }, + { + "stringValue": "st_PAG" + }, + { + "stringValue": "st_PAL" + }, + { + "stringValue": "st_PAM" + }, + { + "stringValue": "st_PDT" + }, + { + "stringValue": "st_PIA" + }, + { + "stringValue": "st_POE" + }, + { + "stringValue": "st_PSC" + }, + { + "stringValue": "st_PTB" + }, + { + "stringValue": "st_QFA" + }, + { + "stringValue": "st_QTR" + }, + { + "stringValue": "st_QXE" + }, + { + "stringValue": "st_RAM" + }, + { + "stringValue": "st_RBA" + }, + { + "stringValue": "st_RIO" + }, + { + "stringValue": "st_RJA" + }, + { + "stringValue": "st_RPA" + }, + { + "stringValue": "st_RWD" + }, + { + "stringValue": "st_RZO" + }, + { + "stringValue": "st_SAA" + }, + { + "stringValue": "st_SAS" + }, + { + "stringValue": "st_SBI" + }, + { + "stringValue": "st_SCX" + }, + { + "stringValue": "st_SEY" + }, + { + "stringValue": "st_SID" + }, + { + "stringValue": "st_SIL" + }, + { + "stringValue": "st_SJX" + }, + { + "stringValue": "st_SKU" + }, + { + "stringValue": "st_SKW" + }, + { + "stringValue": "st_SLX" + }, + { + "stringValue": "st_SVA" + }, + { + "stringValue": "st_SWA" + }, + { + "stringValue": "st_SWR" + }, + { + "stringValue": "st_SXS" + }, + { + "stringValue": "st_TAP" + }, + { + "stringValue": "st_THA" + }, + { + "stringValue": "st_THT" + }, + { + "stringValue": "st_THY" + }, + { + "stringValue": "st_TIB" + }, + { + "stringValue": "st_TOS" + }, + { + "stringValue": "st_TRA" + }, + { + "stringValue": "st_TSC" + }, + { + "stringValue": "st_TSD" + }, + { + "stringValue": "st_TTL" + }, + { + "stringValue": "st_TUI" + }, + { + "stringValue": "st_TVF" + }, + { + "stringValue": "st_UAE" + }, + { + "stringValue": "st_UAL" + }, + { + "stringValue": "st_UBT" + }, + { + "stringValue": "st_UCA" + }, + { + "stringValue": "st_UPS" + }, + { + "stringValue": "st_VIR" + }, + { + "stringValue": "st_VIV" + }, + { + "stringValue": "st_VLG" + }, + { + "stringValue": "st_VOE" + }, + { + "stringValue": "st_VOZ" + }, + { + "stringValue": "st_VRD" + }, + { + "stringValue": "st_VTE" + }, + { + "stringValue": "st_VXP" + }, + { + "stringValue": "st_WIA" + }, + { + "stringValue": "st_WIF" + }, + { + "stringValue": "st_WJA" + }, + { + "stringValue": "st_WSN" + }, + { + "stringValue": "st_YB" + } + ] + } + }, + "st_ABL": { + "arrayValue": { + "values": [ + { + "stringValue": "st_AAR" + }, + { + "stringValue": "st_JNA" + } + ] + } + }, + "st_QLK": { + "arrayValue": { + "values": [ + { + "stringValue": "st_AAL" + }, + { + "stringValue": "st_ACA" + }, + { + "stringValue": "st_ANA" + }, + { + "stringValue": "st_BAW" + }, + { + "stringValue": "st_CPA" + }, + { + "stringValue": "st_DLH" + }, + { + "stringValue": "st_UAE" + }, + { + "stringValue": "st_UAL" + } + ] + } + }, + "st_CXA": { + "arrayValue": { + "values": [ + { + "stringValue": "st_CES" + }, + { + "stringValue": "st_DAL" + }, + { + "stringValue": "st_KAL" + }, + { + "stringValue": "st_QTR" + } + ] + } + }, + "st_VLG": { + "arrayValue": { + "values": [ + { + "stringValue": "st_AAL" + }, + { + "stringValue": "st_AAR" + }, + { + "stringValue": "st_ACA" + }, + { + "stringValue": "st_AEA" + }, + { + "stringValue": "st_AFR" + }, + { + "stringValue": "st_AMX" + }, + { + "stringValue": "st_ARG" + }, + { + "stringValue": "st_ASA" + }, + { + "stringValue": "st_AUA" + }, + { + "stringValue": "st_AVA" + }, + { + "stringValue": "st_AZU" + }, + { + "stringValue": "st_BAW" + }, + { + "stringValue": "st_BEL" + }, + { + "stringValue": "st_BTI" + }, + { + "stringValue": "st_CFG" + }, + { + "stringValue": "st_CPA" + }, + { + "stringValue": "st_CRL" + }, + { + "stringValue": "st_DAL" + }, + { + "stringValue": "st_DLA" + }, + { + "stringValue": "st_DLH" + }, + { + "stringValue": "st_EIN" + }, + { + "stringValue": "st_ETD" + }, + { + "stringValue": "st_EVA" + }, + { + "stringValue": "st_EWE" + }, + { + "stringValue": "st_EWG" + }, + { + "stringValue": "st_FBU" + }, + { + "stringValue": "st_FDB" + }, + { + "stringValue": "st_FIN" + }, + { + "stringValue": "st_FWI" + }, + { + "stringValue": "st_GLO" + }, + { + "stringValue": "st_HAL" + }, + { + "stringValue": "st_HKE" + }, + { + "stringValue": "st_IBB" + }, + { + "stringValue": "st_IBE" + }, + { + "stringValue": "st_ICE" + }, + { + "stringValue": "st_IGO" + }, + { + "stringValue": "st_ITY" + }, + { + "stringValue": "st_JBU" + }, + { + "stringValue": "st_KLM" + }, + { + "stringValue": "st_LAN" + }, + { + "stringValue": "st_LGL" + }, + { + "stringValue": "st_LOT" + }, + { + "stringValue": "st_LVL" + }, + { + "stringValue": "st_MAU" + }, + { + "stringValue": "st_NBT" + }, + { + "stringValue": "st_NKS" + }, + { + "stringValue": "st_NOZ" + }, + { + "stringValue": "st_OCN" + }, + { + "stringValue": "st_OMA" + }, + { + "stringValue": "st_QFA" + }, + { + "stringValue": "st_QTR" + }, + { + "stringValue": "st_SAS" + }, + { + "stringValue": "st_SVA" + }, + { + "stringValue": "st_SWA" + }, + { + "stringValue": "st_SWR" + }, + { + "stringValue": "st_TAP" + }, + { + "stringValue": "st_THY" + }, + { + "stringValue": "st_TSC" + }, + { + "stringValue": "st_TVF" + }, + { + "stringValue": "st_UAE" + }, + { + "stringValue": "st_UAL" + }, + { + "stringValue": "st_UBT" + }, + { + "stringValue": "st_VIR" + }, + { + "stringValue": "st_VLG" + }, + { + "stringValue": "st_VLG" + }, + { + "stringValue": "st_VOE" + }, + { + "stringValue": "st_VOZ" + }, + { + "stringValue": "st_WIF" + } + ] + } + }, + "st_GLO": { + "arrayValue": { + "values": [ + { + "stringValue": "st_AAF" + }, + { + "stringValue": "st_AAL" + }, + { + "stringValue": "st_AAY" + }, + { + "stringValue": "st_ABY" + }, + { + "stringValue": "st_ACA" + }, + { + "stringValue": "st_ACI" + }, + { + "stringValue": "st_AEA" + }, + { + "stringValue": "st_AEE" + }, + { + "stringValue": "st_AFR" + }, + { + "stringValue": "st_AIE" + }, + { + "stringValue": "st_AIZ" + }, + { + "stringValue": "st_AKT" + }, + { + "stringValue": "st_AMU" + }, + { + "stringValue": "st_AMX" + }, + { + "stringValue": "st_ANT" + }, + { + "stringValue": "st_ARG" + }, + { + "stringValue": "st_ASA" + }, + { + "stringValue": "st_ASH" + }, + { + "stringValue": "st_AUA" + }, + { + "stringValue": "st_AVA" + }, + { + "stringValue": "st_AZU" + }, + { + "stringValue": "st_BAW" + }, + { + "stringValue": "st_BCY" + }, + { + "stringValue": "st_BEL" + }, + { + "stringValue": "st_BLA" + }, + { + "stringValue": "st_BLS" + }, + { + "stringValue": "st_BOS" + }, + { + "stringValue": "st_BRX" + }, + { + "stringValue": "st_BTI" + }, + { + "stringValue": "st_BWA" + }, + { + "stringValue": "st_CAI" + }, + { + "stringValue": "st_CAV" + }, + { + "stringValue": "st_CAY" + }, + { + "stringValue": "st_CCM" + }, + { + "stringValue": "st_CFG" + }, + { + "stringValue": "st_CMP" + }, + { + "stringValue": "st_CNF" + }, + { + "stringValue": "st_CPA" + }, + { + "stringValue": "st_CRK" + }, + { + "stringValue": "st_CRL" + }, + { + "stringValue": "st_CRQ" + }, + { + "stringValue": "st_CSA" + }, + { + "stringValue": "st_CTN" + }, + { + "stringValue": "st_DAL" + }, + { + "stringValue": "st_DJT" + }, + { + "stringValue": "st_DLA" + }, + { + "stringValue": "st_DLH" + }, + { + "stringValue": "st_DTR" + }, + { + "stringValue": "st_ELY" + }, + { + "stringValue": "st_ETD" + }, + { + "stringValue": "st_ETH" + }, + { + "stringValue": "st_EWG" + }, + { + "stringValue": "st_FDB" + }, + { + "stringValue": "st_FDY" + }, + { + "stringValue": "st_FFT" + }, + { + "stringValue": "st_FIN" + }, + { + "stringValue": "st_FJI" + }, + { + "stringValue": "st_FLI" + }, + { + "stringValue": "st_FPO" + }, + { + "stringValue": "st_FWI" + }, + { + "stringValue": "st_GFA" + }, + { + "stringValue": "st_GLO" + }, + { + "stringValue": "st_GPD" + }, + { + "stringValue": "st_GWI" + }, + { + "stringValue": "st_GZ" + }, + { + "stringValue": "st_HAL" + }, + { + "stringValue": "st_HDA" + }, + { + "stringValue": "st_HKE" + }, + { + "stringValue": "st_IBB" + }, + { + "stringValue": "st_IBE" + }, + { + "stringValue": "st_ICE" + }, + { + "stringValue": "st_ISR" + }, + { + "stringValue": "st_ISS" + }, + { + "stringValue": "st_IYE" + }, + { + "stringValue": "st_JBU" + }, + { + "stringValue": "st_JST" + }, + { + "stringValue": "st_JSX" + }, + { + "stringValue": "st_JZR" + }, + { + "stringValue": "st_KAC" + }, + { + "stringValue": "st_KAP" + }, + { + "stringValue": "st_KEN" + }, + { + "stringValue": "st_KLM" + }, + { + "stringValue": "st_KNE" + }, + { + "stringValue": "st_KQA" + }, + { + "stringValue": "st_LAN" + }, + { + "stringValue": "st_LGL" + }, + { + "stringValue": "st_LIA" + }, + { + "stringValue": "st_LOG" + }, + { + "stringValue": "st_LOT" + }, + { + "stringValue": "st_MAC" + }, + { + "stringValue": "st_MEA" + }, + { + "stringValue": "st_MHV" + }, + { + "stringValue": "st_MMD" + }, + { + "stringValue": "st_NKS" + }, + { + "stringValue": "st_OAW" + }, + { + "stringValue": "st_OMA" + }, + { + "stringValue": "st_PGT" + }, + { + "stringValue": "st_POE" + }, + { + "stringValue": "st_PTB" + }, + { + "stringValue": "st_QFA" + }, + { + "stringValue": "st_QTR" + }, + { + "stringValue": "st_RBA" + }, + { + "stringValue": "st_REU" + }, + { + "stringValue": "st_RJA" + }, + { + "stringValue": "st_RVF" + }, + { + "stringValue": "st_RWD" + }, + { + "stringValue": "st_RZO" + }, + { + "stringValue": "st_SAA" + }, + { + "stringValue": "st_SAS" + }, + { + "stringValue": "st_SCX" + }, + { + "stringValue": "st_SEY" + }, + { + "stringValue": "st_SIL" + }, + { + "stringValue": "st_SKU" + }, + { + "stringValue": "st_SVA" + }, + { + "stringValue": "st_SWA" + }, + { + "stringValue": "st_SWR" + }, + { + "stringValue": "st_SXS" + }, + { + "stringValue": "st_TAM" + }, + { + "stringValue": "st_TAP" + }, + { + "stringValue": "st_TCV" + }, + { + "stringValue": "st_THT" + }, + { + "stringValue": "st_THY" + }, + { + "stringValue": "st_TIN" + }, + { + "stringValue": "st_TOS" + }, + { + "stringValue": "st_TPC" + }, + { + "stringValue": "st_TRA" + }, + { + "stringValue": "st_TSC" + }, + { + "stringValue": "st_TTW" + }, + { + "stringValue": "st_TUI" + }, + { + "stringValue": "st_TVF" + }, + { + "stringValue": "st_UAE" + }, + { + "stringValue": "st_UAL" + }, + { + "stringValue": "st_VIR" + }, + { + "stringValue": "st_VLG" + }, + { + "stringValue": "st_VOE" + }, + { + "stringValue": "st_VRE" + }, + { + "stringValue": "st_VTE" + }, + { + "stringValue": "st_VTI" + }, + { + "stringValue": "st_WIA" + }, + { + "stringValue": "st_WIF" + }, + { + "stringValue": "st_WJA" + } + ] + } + }, + "st_DNU": { + "arrayValue": { + "values": [ + { + "stringValue": "st_DLH" + }, + { + "stringValue": "st_FIN" + }, + { + "stringValue": "st_JBU" + }, + { + "stringValue": "st_LOT" + }, + { + "stringValue": "st_SAS" + } + ] + } + }, + "st_MDA": { + "arrayValue": { + "values": [ + { + "stringValue": "st_CPA" + }, + { + "stringValue": "st_EVA" + }, + { + "stringValue": "st_JAL" + }, + { + "stringValue": "st_JJP" + }, + { + "stringValue": "st_TTW" + }, + { + "stringValue": "st_UAL" + } + ] + } + }, + "st_EDV": { + "arrayValue": { + "values": [ + { + "stringValue": "st_AAL" + }, + { + "stringValue": "st_ACA" + }, + { + "stringValue": "st_AFR" + }, + { + "stringValue": "st_ANA" + }, + { + "stringValue": "st_ASA" + }, + { + "stringValue": "st_BAW" + }, + { + "stringValue": "st_CPA" + }, + { + "stringValue": "st_DAL" + }, + { + "stringValue": "st_DLH" + }, + { + "stringValue": "st_EIN" + }, + { + "stringValue": "st_EVA" + }, + { + "stringValue": "st_FFT" + }, + { + "stringValue": "st_HAL" + }, + { + "stringValue": "st_IBE" + }, + { + "stringValue": "st_JAL" + }, + { + "stringValue": "st_JBU" + }, + { + "stringValue": "st_KAL" + }, + { + "stringValue": "st_LAN" + }, + { + "stringValue": "st_MXY" + }, + { + "stringValue": "st_NKS" + }, + { + "stringValue": "st_SCX" + }, + { + "stringValue": "st_SWA" + }, + { + "stringValue": "st_TAP" + }, + { + "stringValue": "st_UAL" + }, + { + "stringValue": "st_VIR" + } + ] + } + }, + "st_VOI": { + "arrayValue": { + "values": [ + { + "stringValue": "st_AAL" + }, + { + "stringValue": "st_ASA" + }, + { + "stringValue": "st_DAL" + }, + { + "stringValue": "st_DLH" + }, + { + "stringValue": "st_SWA" + }, + { + "stringValue": "st_UAL" + } + ] + } + }, + "st_NAN": { + "arrayValue": { + "values": [ + { + "stringValue": "st_AFR" + } + ] + } + }, + "st_DLH": { + "arrayValue": { + "values": [ + { + "stringValue": "st_AAL" + }, + { + "stringValue": "st_AAR" + }, + { + "stringValue": "st_AAY" + }, + { + "stringValue": "st_ACA" + }, + { + "stringValue": "st_ACI" + }, + { + "stringValue": "st_AEA" + }, + { + "stringValue": "st_AEE" + }, + { + "stringValue": "st_AFR" + }, + { + "stringValue": "st_AIC" + }, + { + "stringValue": "st_ALK" + }, + { + "stringValue": "st_AMU" + }, + { + "stringValue": "st_AMX" + }, + { + "stringValue": "st_ANA" + }, + { + "stringValue": "st_ANZ" + }, + { + "stringValue": "st_ARG" + }, + { + "stringValue": "st_ASA" + }, + { + "stringValue": "st_ASH" + }, + { + "stringValue": "st_ASL" + }, + { + "stringValue": "st_AUA" + }, + { + "stringValue": "st_AVA" + }, + { + "stringValue": "st_AZU" + }, + { + "stringValue": "st_BAW" + }, + { + "stringValue": "st_BCS" + }, + { + "stringValue": "st_BCY" + }, + { + "stringValue": "st_BEL" + }, + { + "stringValue": "st_BKP" + }, + { + "stringValue": "st_BTI" + }, + { + "stringValue": "st_BWA" + }, + { + "stringValue": "st_CAL" + }, + { + "stringValue": "st_CCA" + }, + { + "stringValue": "st_CFG" + }, + { + "stringValue": "st_CMP" + }, + { + "stringValue": "st_CNO" + }, + { + "stringValue": "st_CPA" + }, + { + "stringValue": "st_CRK" + }, + { + "stringValue": "st_CRL" + }, + { + "stringValue": "st_CSZ" + }, + { + "stringValue": "st_CTN" + }, + { + "stringValue": "st_DAL" + }, + { + "stringValue": "st_DHA" + }, + { + "stringValue": "st_DLA" + }, + { + "stringValue": "st_DLH" + }, + { + "stringValue": "st_DLH" + }, + { + "stringValue": "st_DNU" + }, + { + "stringValue": "st_DTR" + }, + { + "stringValue": "st_DWI" + }, + { + "stringValue": "st_EDV" + }, + { + "stringValue": "st_EDW" + }, + { + "stringValue": "st_EIN" + }, + { + "stringValue": "st_ELY" + }, + { + "stringValue": "st_ENY" + }, + { + "stringValue": "st_ETD" + }, + { + "stringValue": "st_ETH" + }, + { + "stringValue": "st_EVA" + }, + { + "stringValue": "st_EWG" + }, + { + "stringValue": "st_EZY" + }, + { + "stringValue": "st_FBU" + }, + { + "stringValue": "st_FCM" + }, + { + "stringValue": "st_FDB" + }, + { + "stringValue": "st_FFT" + }, + { + "stringValue": "st_FIN" + }, + { + "stringValue": "st_FJI" + }, + { + "stringValue": "st_FLE" + }, + { + "stringValue": "st_FLI" + }, + { + "stringValue": "st_FWI" + }, + { + "stringValue": "st_GFA" + }, + { + "stringValue": "st_GJS" + }, + { + "stringValue": "st_GLO" + }, + { + "stringValue": "st_GRL" + }, + { + "stringValue": "st_GTI" + }, + { + "stringValue": "st_HAL" + }, + { + "stringValue": "st_HKC" + }, + { + "stringValue": "st_HKE" + }, + { + "stringValue": "st_HVN" + }, + { + "stringValue": "st_IBB" + }, + { + "stringValue": "st_IBE" + }, + { + "stringValue": "st_ICE" + }, + { + "stringValue": "st_IGO" + }, + { + "stringValue": "st_ITY" + }, + { + "stringValue": "st_JAL" + }, + { + "stringValue": "st_JBU" + }, + { + "stringValue": "st_JIA" + }, + { + "stringValue": "st_JJP" + }, + { + "stringValue": "st_JST" + }, + { + "stringValue": "st_JSX" + }, + { + "stringValue": "st_JZA" + }, + { + "stringValue": "st_KAL" + }, + { + "stringValue": "st_KAP" + }, + { + "stringValue": "st_KLM" + }, + { + "stringValue": "st_KMM" + }, + { + "stringValue": "st_KQA" + }, + { + "stringValue": "st_KZR" + }, + { + "stringValue": "st_LAN" + }, + { + "stringValue": "st_LGL" + }, + { + "stringValue": "st_LOT" + }, + { + "stringValue": "st_MAS" + }, + { + "stringValue": "st_MAU" + }, + { + "stringValue": "st_MMD" + }, + { + "stringValue": "st_MSR" + }, + { + "stringValue": "st_MXY" + }, + { + "stringValue": "st_NBT" + }, + { + "stringValue": "st_NGN" + }, + { + "stringValue": "st_NKS" + }, + { + "stringValue": "st_NOZ" + }, + { + "stringValue": "st_NSZ" + }, + { + "stringValue": "st_OAW" + }, + { + "stringValue": "st_OCN" + }, + { + "stringValue": "st_OMA" + }, + { + "stringValue": "st_PAL" + }, + { + "stringValue": "st_PCO" + }, + { + "stringValue": "st_PDT" + }, + { + "stringValue": "st_PGT" + }, + { + "stringValue": "st_POE" + }, + { + "stringValue": "st_PTN" + }, + { + "stringValue": "st_PVD" + }, + { + "stringValue": "st_PWF" + }, + { + "stringValue": "st_QFA" + }, + { + "stringValue": "st_QLK" + }, + { + "stringValue": "st_QTR" + }, + { + "stringValue": "st_QXE" + }, + { + "stringValue": "st_RAM" + }, + { + "stringValue": "st_RPA" + }, + { + "stringValue": "st_RYR" + }, + { + "stringValue": "st_RZO" + }, + { + "stringValue": "st_SAA" + }, + { + "stringValue": "st_SAS" + }, + { + "stringValue": "st_SCR" + }, + { + "stringValue": "st_SEY" + }, + { + "stringValue": "st_SIA" + }, + { + "stringValue": "st_SJX" + }, + { + "stringValue": "st_SKU" + }, + { + "stringValue": "st_SKV" + }, + { + "stringValue": "st_SKW" + }, + { + "stringValue": "st_SVA" + }, + { + "stringValue": "st_SVS" + }, + { + "stringValue": "st_SWA" + }, + { + "stringValue": "st_SWR" + }, + { + "stringValue": "st_SXS" + }, + { + "stringValue": "st_SZS" + }, + { + "stringValue": "st_TAM" + }, + { + "stringValue": "st_TAP" + }, + { + "stringValue": "st_TGW" + }, + { + "stringValue": "st_THA" + }, + { + "stringValue": "st_THT" + }, + { + "stringValue": "st_THY" + }, + { + "stringValue": "st_TRA" + }, + { + "stringValue": "st_TSC" + }, + { + "stringValue": "st_TUI" + }, + { + "stringValue": "st_TVF" + }, + { + "stringValue": "st_TVS" + }, + { + "stringValue": "st_UAE" + }, + { + "stringValue": "st_UAL" + }, + { + "stringValue": "st_UIA" + }, + { + "stringValue": "st_UPS" + }, + { + "stringValue": "st_VIR" + }, + { + "stringValue": "st_VIV" + }, + { + "stringValue": "st_VJH" + }, + { + "stringValue": "st_VJT" + }, + { + "stringValue": "st_VLG" + }, + { + "stringValue": "st_VOE" + }, + { + "stringValue": "st_VOI" + }, + { + "stringValue": "st_VOZ" + }, + { + "stringValue": "st_WIF" + }, + { + "stringValue": "st_WJA" + }, + { + "stringValue": "st_WZZ" + }, + { + "stringValue": "st_XBO" + }, + { + "stringValue": "st_YB" + } + ] + } + }, + "st_TVJ": { + "arrayValue": { + "values": [ + { + "stringValue": "st_UAL" + } + ] + } + }, + "st_TRA": { + "arrayValue": { + "values": [ + { + "stringValue": "st_AAL" + }, + { + "stringValue": "st_AAY" + }, + { + "stringValue": "st_ACA" + }, + { + "stringValue": "st_AEA" + }, + { + "stringValue": "st_AEE" + }, + { + "stringValue": "st_AFL" + }, + { + "stringValue": "st_AFR" + }, + { + "stringValue": "st_AIE" + }, + { + "stringValue": "st_AIZ" + }, + { + "stringValue": "st_AKT" + }, + { + "stringValue": "st_AMX" + }, + { + "stringValue": "st_ANT" + }, + { + "stringValue": "st_ASA" + }, + { + "stringValue": "st_ASH" + }, + { + "stringValue": "st_AUA" + }, + { + "stringValue": "st_AZU" + }, + { + "stringValue": "st_BAW" + }, + { + "stringValue": "st_BCV" + }, + { + "stringValue": "st_BCY" + }, + { + "stringValue": "st_BEE" + }, + { + "stringValue": "st_BEL" + }, + { + "stringValue": "st_BLA" + }, + { + "stringValue": "st_BOS" + }, + { + "stringValue": "st_BRX" + }, + { + "stringValue": "st_BTI" + }, + { + "stringValue": "st_CAL" + }, + { + "stringValue": "st_CAY" + }, + { + "stringValue": "st_CCM" + }, + { + "stringValue": "st_CFG" + }, + { + "stringValue": "st_CPA" + }, + { + "stringValue": "st_CRK" + }, + { + "stringValue": "st_CRL" + }, + { + "stringValue": "st_CRQ" + }, + { + "stringValue": "st_CSA" + }, + { + "stringValue": "st_CTN" + }, + { + "stringValue": "st_DAL" + }, + { + "stringValue": "st_DJT" + }, + { + "stringValue": "st_DLA" + }, + { + "stringValue": "st_DLH" + }, + { + "stringValue": "st_DWI" + }, + { + "stringValue": "st_ECA" + }, + { + "stringValue": "st_EDW" + }, + { + "stringValue": "st_ELY" + }, + { + "stringValue": "st_ETD" + }, + { + "stringValue": "st_EVA" + }, + { + "stringValue": "st_EWG" + }, + { + "stringValue": "st_FBU" + }, + { + "stringValue": "st_FDB" + }, + { + "stringValue": "st_FFT" + }, + { + "stringValue": "st_FIN" + }, + { + "stringValue": "st_FJI" + }, + { + "stringValue": "st_FLE" + }, + { + "stringValue": "st_FPO" + }, + { + "stringValue": "st_FWI" + }, + { + "stringValue": "st_GLO" + }, + { + "stringValue": "st_HAL" + }, + { + "stringValue": "st_HDA" + }, + { + "stringValue": "st_IBB" + }, + { + "stringValue": "st_IBE" + }, + { + "stringValue": "st_ICE" + }, + { + "stringValue": "st_ISR" + }, + { + "stringValue": "st_JBU" + }, + { + "stringValue": "st_JJP" + }, + { + "stringValue": "st_JSA" + }, + { + "stringValue": "st_JST" + }, + { + "stringValue": "st_JSX" + }, + { + "stringValue": "st_KLC" + }, + { + "stringValue": "st_KLM" + }, + { + "stringValue": "st_KMM" + }, + { + "stringValue": "st_KQA" + }, + { + "stringValue": "st_LAN" + }, + { + "stringValue": "st_LGL" + }, + { + "stringValue": "st_LIA" + }, + { + "stringValue": "st_LOG" + }, + { + "stringValue": "st_LOT" + }, + { + "stringValue": "st_MAU" + }, + { + "stringValue": "st_MDA" + }, + { + "stringValue": "st_MEA" + }, + { + "stringValue": "st_MXY" + }, + { + "stringValue": "st_NKS" + }, + { + "stringValue": "st_NOZ" + }, + { + "stringValue": "st_OAL" + }, + { + "stringValue": "st_OAW" + }, + { + "stringValue": "st_OCN" + }, + { + "stringValue": "st_PAG" + }, + { + "stringValue": "st_PCO" + }, + { + "stringValue": "st_PIA" + }, + { + "stringValue": "st_POE" + }, + { + "stringValue": "st_PTB" + }, + { + "stringValue": "st_QFA" + }, + { + "stringValue": "st_QTR" + }, + { + "stringValue": "st_REU" + }, + { + "stringValue": "st_RJA" + }, + { + "stringValue": "st_RZO" + }, + { + "stringValue": "st_SAA" + }, + { + "stringValue": "st_SAS" + }, + { + "stringValue": "st_SAT" + }, + { + "stringValue": "st_SCE" + }, + { + "stringValue": "st_SCX" + }, + { + "stringValue": "st_SKV" + }, + { + "stringValue": "st_SWA" + }, + { + "stringValue": "st_SWR" + }, + { + "stringValue": "st_SXS" + }, + { + "stringValue": "st_TAP" + }, + { + "stringValue": "st_TCV" + }, + { + "stringValue": "st_TGG" + }, + { + "stringValue": "st_THT" + }, + { + "stringValue": "st_THY" + }, + { + "stringValue": "st_TOS" + }, + { + "stringValue": "st_TPC" + }, + { + "stringValue": "st_TRA" + }, + { + "stringValue": "st_TUI" + }, + { + "stringValue": "st_TVF" + }, + { + "stringValue": "st_UAE" + }, + { + "stringValue": "st_UAL" + }, + { + "stringValue": "st_VIR" + }, + { + "stringValue": "st_VJH" + }, + { + "stringValue": "st_VLG" + }, + { + "stringValue": "st_VOE" + }, + { + "stringValue": "st_VRE" + }, + { + "stringValue": "st_WIA" + }, + { + "stringValue": "st_WIF" + }, + { + "stringValue": "st_WJA" + } + ] + } + }, + "st_BCY": { + "arrayValue": { + "values": [ + { + "stringValue": "st_AFR" + }, + { + "stringValue": "st_ANZ" + }, + { + "stringValue": "st_DLH" + }, + { + "stringValue": "st_FIN" + }, + { + "stringValue": "st_IBE" + }, + { + "stringValue": "st_SAS" + }, + { + "stringValue": "st_UAE" + } + ] + } + }, + "st_AKX": { + "arrayValue": { + "values": [ + { + "stringValue": "st_UAL" + } + ] + } + }, + "st_ELY": { + "arrayValue": { + "values": [ + { + "stringValue": "st_AAL" + }, + { + "stringValue": "st_ACA" + }, + { + "stringValue": "st_AEE" + }, + { + "stringValue": "st_AFR" + }, + { + "stringValue": "st_AIZ" + }, + { + "stringValue": "st_ANA" + }, + { + "stringValue": "st_BAW" + }, + { + "stringValue": "st_BKP" + }, + { + "stringValue": "st_CPA" + }, + { + "stringValue": "st_DAL" + }, + { + "stringValue": "st_DLH" + }, + { + "stringValue": "st_ELY" + }, + { + "stringValue": "st_ELY" + }, + { + "stringValue": "st_ETD" + }, + { + "stringValue": "st_FDB" + }, + { + "stringValue": "st_ITY" + }, + { + "stringValue": "st_JBU" + }, + { + "stringValue": "st_LAN" + }, + { + "stringValue": "st_SKW" + }, + { + "stringValue": "st_SWA" + }, + { + "stringValue": "st_SWR" + }, + { + "stringValue": "st_TAP" + }, + { + "stringValue": "st_THA" + }, + { + "stringValue": "st_UAE" + }, + { + "stringValue": "st_UAL" + } + ] + } + }, + "st_SKU": { + "arrayValue": { + "values": [ + { + "stringValue": "st_ACA" + }, + { + "stringValue": "st_AFR" + }, + { + "stringValue": "st_ARG" + }, + { + "stringValue": "st_AVA" + }, + { + "stringValue": "st_BAW" + }, + { + "stringValue": "st_CMP" + }, + { + "stringValue": "st_DAL" + }, + { + "stringValue": "st_DLH" + }, + { + "stringValue": "st_IBE" + }, + { + "stringValue": "st_QFA" + }, + { + "stringValue": "st_SKU" + }, + { + "stringValue": "st_SKU" + }, + { + "stringValue": "st_SWA" + }, + { + "stringValue": "st_THY" + }, + { + "stringValue": "st_UAL" + } + ] + } + }, + "st_CSZ": { + "arrayValue": { + "values": [ + { + "stringValue": "st_ACA" + }, + { + "stringValue": "st_CPA" + }, + { + "stringValue": "st_DLH" + }, + { + "stringValue": "st_UAL" + } + ] + } + }, + "st_KEN": { + "arrayValue": { + "values": [ + { + "stringValue": "st_ASA" + } + ] + } + }, + "st_ATN": { + "arrayValue": { + "values": [ + { + "stringValue": "st_UAL" + } + ] + } + }, + "st_BAW": { + "arrayValue": { + "values": [ + { + "stringValue": "st_AAL" + }, + { + "stringValue": "st_AAR" + }, + { + "stringValue": "st_AAY" + }, + { + "stringValue": "st_ACA" + }, + { + "stringValue": "st_AEA" + }, + { + "stringValue": "st_AEE" + }, + { + "stringValue": "st_AFR" + }, + { + "stringValue": "st_AIC" + }, + { + "stringValue": "st_AIE" + }, + { + "stringValue": "st_AKT" + }, + { + "stringValue": "st_ALK" + }, + { + "stringValue": "st_AMX" + }, + { + "stringValue": "st_ANA" + }, + { + "stringValue": "st_ANE" + }, + { + "stringValue": "st_ANG" + }, + { + "stringValue": "st_ANZ" + }, + { + "stringValue": "st_ARE" + }, + { + "stringValue": "st_ARG" + }, + { + "stringValue": "st_ASA" + }, + { + "stringValue": "st_ASH" + }, + { + "stringValue": "st_ASL" + }, + { + "stringValue": "st_AUA" + }, + { + "stringValue": "st_AUR" + }, + { + "stringValue": "st_AVA" + }, + { + "stringValue": "st_AZU" + }, + { + "stringValue": "st_BAW" + }, + { + "stringValue": "st_BEL" + }, + { + "stringValue": "st_BKP" + }, + { + "stringValue": "st_BTI" + }, + { + "stringValue": "st_BWA" + }, + { + "stringValue": "st_CAL" + }, + { + "stringValue": "st_CAY" + }, + { + "stringValue": "st_CES" + }, + { + "stringValue": "st_CFG" + }, + { + "stringValue": "st_CKS" + }, + { + "stringValue": "st_CMP" + }, + { + "stringValue": "st_CPA" + }, + { + "stringValue": "st_CRK" + }, + { + "stringValue": "st_CSA" + }, + { + "stringValue": "st_CSH" + }, + { + "stringValue": "st_CTN" + }, + { + "stringValue": "st_DAL" + }, + { + "stringValue": "st_DLA" + }, + { + "stringValue": "st_DLH" + }, + { + "stringValue": "st_DSM" + }, + { + "stringValue": "st_EDV" + }, + { + "stringValue": "st_EDW" + }, + { + "stringValue": "st_EIN" + }, + { + "stringValue": "st_ELY" + }, + { + "stringValue": "st_ENY" + }, + { + "stringValue": "st_ETD" + }, + { + "stringValue": "st_ETH" + }, + { + "stringValue": "st_EVA" + }, + { + "stringValue": "st_EWE" + }, + { + "stringValue": "st_EWG" + }, + { + "stringValue": "st_EZY" + }, + { + "stringValue": "st_FCM" + }, + { + "stringValue": "st_FDB" + }, + { + "stringValue": "st_FDY" + }, + { + "stringValue": "st_FFT" + }, + { + "stringValue": "st_FIN" + }, + { + "stringValue": "st_FJI" + }, + { + "stringValue": "st_FLE" + }, + { + "stringValue": "st_GFA" + }, + { + "stringValue": "st_GLO" + }, + { + "stringValue": "st_GTI" + }, + { + "stringValue": "st_HAL" + }, + { + "stringValue": "st_HDA" + }, + { + "stringValue": "st_HKE" + }, + { + "stringValue": "st_HVN" + }, + { + "stringValue": "st_IBB" + }, + { + "stringValue": "st_IBE" + }, + { + "stringValue": "st_ICE" + }, + { + "stringValue": "st_IGO" + }, + { + "stringValue": "st_ITY" + }, + { + "stringValue": "st_JAL" + }, + { + "stringValue": "st_JBU" + }, + { + "stringValue": "st_JIA" + }, + { + "stringValue": "st_JJP" + }, + { + "stringValue": "st_JSA" + }, + { + "stringValue": "st_JST" + }, + { + "stringValue": "st_JSX" + }, + { + "stringValue": "st_JZA" + }, + { + "stringValue": "st_KAC" + }, + { + "stringValue": "st_KAL" + }, + { + "stringValue": "st_KAP" + }, + { + "stringValue": "st_KLM" + }, + { + "stringValue": "st_KMM" + }, + { + "stringValue": "st_KNE" + }, + { + "stringValue": "st_KQA" + }, + { + "stringValue": "st_KZR" + }, + { + "stringValue": "st_LAN" + }, + { + "stringValue": "st_LAP" + }, + { + "stringValue": "st_LGL" + }, + { + "stringValue": "st_LHX" + }, + { + "stringValue": "st_LIA" + }, + { + "stringValue": "st_LNE" + }, + { + "stringValue": "st_LOG" + }, + { + "stringValue": "st_LOT" + }, + { + "stringValue": "st_LPE" + }, + { + "stringValue": "st_LXP" + }, + { + "stringValue": "st_MAS" + }, + { + "stringValue": "st_MAU" + }, + { + "stringValue": "st_MSR" + }, + { + "stringValue": "st_MXY" + }, + { + "stringValue": "st_NBT" + }, + { + "stringValue": "st_NKS" + }, + { + "stringValue": "st_NMB" + }, + { + "stringValue": "st_NOZ" + }, + { + "stringValue": "st_NQN" + }, + { + "stringValue": "st_NSZ" + }, + { + "stringValue": "st_OAL" + }, + { + "stringValue": "st_OCN" + }, + { + "stringValue": "st_OMA" + }, + { + "stringValue": "st_PAL" + }, + { + "stringValue": "st_PCO" + }, + { + "stringValue": "st_PDT" + }, + { + "stringValue": "st_PIA" + }, + { + "stringValue": "st_POE" + }, + { + "stringValue": "st_POE_2025" + }, + { + "stringValue": "st_QFA" + }, + { + "stringValue": "st_QLK" + }, + { + "stringValue": "st_QTR" + }, + { + "stringValue": "st_QXE" + }, + { + "stringValue": "st_RAM" + }, + { + "stringValue": "st_RBA" + }, + { + "stringValue": "st_REU" + }, + { + "stringValue": "st_RJA" + }, + { + "stringValue": "st_ROT" + }, + { + "stringValue": "st_RPA" + }, + { + "stringValue": "st_SAA" + }, + { + "stringValue": "st_SAS" + }, + { + "stringValue": "st_SCE" + }, + { + "stringValue": "st_SCX" + }, + { + "stringValue": "st_SEY" + }, + { + "stringValue": "st_SIA" + }, + { + "stringValue": "st_SJX" + }, + { + "stringValue": "st_SKU" + }, + { + "stringValue": "st_SKW" + }, + { + "stringValue": "st_SNR" + }, + { + "stringValue": "st_STK" + }, + { + "stringValue": "st_SVA" + }, + { + "stringValue": "st_SWA" + }, + { + "stringValue": "st_SWR" + }, + { + "stringValue": "st_SZS" + }, + { + "stringValue": "st_TAI" + }, + { + "stringValue": "st_TAM" + }, + { + "stringValue": "st_TAP" + }, + { + "stringValue": "st_THA" + }, + { + "stringValue": "st_THY" + }, + { + "stringValue": "st_TIN" + }, + { + "stringValue": "st_TRA" + }, + { + "stringValue": "st_TSC" + }, + { + "stringValue": "st_TUI" + }, + { + "stringValue": "st_TVF" + }, + { + "stringValue": "st_TVS" + }, + { + "stringValue": "st_UAE" + }, + { + "stringValue": "st_UAL" + }, + { + "stringValue": "st_UBT" + }, + { + "stringValue": "st_VIR" + }, + { + "stringValue": "st_VLG" + }, + { + "stringValue": "st_VOE" + }, + { + "stringValue": "st_VOZ" + }, + { + "stringValue": "st_VXP" + }, + { + "stringValue": "st_WEN" + }, + { + "stringValue": "st_WIA" + }, + { + "stringValue": "st_WIF" + }, + { + "stringValue": "st_WJA" + }, + { + "stringValue": "st_XBO" + }, + { + "stringValue": "st_XS" + }, + { + "stringValue": "st_YB" + } + ] + } + }, + "st_APZ": { + "arrayValue": { + "values": [ + { + "stringValue": "st_AAL" + }, + { + "stringValue": "st_ASA" + }, + { + "stringValue": "st_DAL" + }, + { + "stringValue": "st_SWA" + }, + { + "stringValue": "st_UAL" + } + ] + } + }, + "st_LAN": { + "arrayValue": { + "values": [ + { + "stringValue": "st_AAL" + }, + { + "stringValue": "st_AAR" + }, + { + "stringValue": "st_AAY" + }, + { + "stringValue": "st_ACA" + }, + { + "stringValue": "st_AEA" + }, + { + "stringValue": "st_AFL" + }, + { + "stringValue": "st_AFR" + }, + { + "stringValue": "st_AIZ" + }, + { + "stringValue": "st_AMX" + }, + { + "stringValue": "st_ANA" + }, + { + "stringValue": "st_ANE" + }, + { + "stringValue": "st_ANZ" + }, + { + "stringValue": "st_ARG" + }, + { + "stringValue": "st_ASA" + }, + { + "stringValue": "st_AUA" + }, + { + "stringValue": "st_AUT" + }, + { + "stringValue": "st_AVA" + }, + { + "stringValue": "st_AZU" + }, + { + "stringValue": "st_BAW" + }, + { + "stringValue": "st_BCV" + }, + { + "stringValue": "st_BCY" + }, + { + "stringValue": "st_BEL" + }, + { + "stringValue": "st_BTI" + }, + { + "stringValue": "st_CAL" + }, + { + "stringValue": "st_CFE" + }, + { + "stringValue": "st_CFG" + }, + { + "stringValue": "st_CKS" + }, + { + "stringValue": "st_CLH" + }, + { + "stringValue": "st_CMP" + }, + { + "stringValue": "st_CPA" + }, + { + "stringValue": "st_CRK" + }, + { + "stringValue": "st_CSA" + }, + { + "stringValue": "st_DAL" + }, + { + "stringValue": "st_DLA" + }, + { + "stringValue": "st_DLH" + }, + { + "stringValue": "st_DNA" + }, + { + "stringValue": "st_DWI" + }, + { + "stringValue": "st_EDV" + }, + { + "stringValue": "st_EDW" + }, + { + "stringValue": "st_ELY" + }, + { + "stringValue": "st_ETD" + }, + { + "stringValue": "st_EVA" + }, + { + "stringValue": "st_EWE" + }, + { + "stringValue": "st_EWG" + }, + { + "stringValue": "st_EWL" + }, + { + "stringValue": "st_FBU" + }, + { + "stringValue": "st_FDB" + }, + { + "stringValue": "st_FFT" + }, + { + "stringValue": "st_FIN" + }, + { + "stringValue": "st_FLE" + }, + { + "stringValue": "st_FPO" + }, + { + "stringValue": "st_FTA" + }, + { + "stringValue": "st_FWI" + }, + { + "stringValue": "st_FXI" + }, + { + "stringValue": "st_GLG" + }, + { + "stringValue": "st_GLO" + }, + { + "stringValue": "st_GPD" + }, + { + "stringValue": "st_GWI" + }, + { + "stringValue": "st_GZ" + }, + { + "stringValue": "st_HAL" + }, + { + "stringValue": "st_HKE" + }, + { + "stringValue": "st_IBB" + }, + { + "stringValue": "st_IBE" + }, + { + "stringValue": "st_IBS" + }, + { + "stringValue": "st_ICE" + }, + { + "stringValue": "st_ISR" + }, + { + "stringValue": "st_ITY" + }, + { + "stringValue": "st_JAL" + }, + { + "stringValue": "st_JBU" + }, + { + "stringValue": "st_JJP" + }, + { + "stringValue": "st_JSA" + }, + { + "stringValue": "st_JST" + }, + { + "stringValue": "st_KAL" + }, + { + "stringValue": "st_KLM" + }, + { + "stringValue": "st_KMM" + }, + { + "stringValue": "st_KQA" + }, + { + "stringValue": "st_LAN" + }, + { + "stringValue": "st_LOG" + }, + { + "stringValue": "st_LOT" + }, + { + "stringValue": "st_LRC" + }, + { + "stringValue": "st_MAS" + }, + { + "stringValue": "st_MDA" + }, + { + "stringValue": "st_MXY" + }, + { + "stringValue": "st_NKS" + }, + { + "stringValue": "st_NOZ" + }, + { + "stringValue": "st_OCN" + }, + { + "stringValue": "st_OMA" + }, + { + "stringValue": "st_PGA" + }, + { + "stringValue": "st_POE" + }, + { + "stringValue": "st_PTB" + }, + { + "stringValue": "st_PTN" + }, + { + "stringValue": "st_QFA" + }, + { + "stringValue": "st_QTR" + }, + { + "stringValue": "st_QXE" + }, + { + "stringValue": "st_RBA" + }, + { + "stringValue": "st_RJA" + }, + { + "stringValue": "st_RPA" + }, + { + "stringValue": "st_RPB" + }, + { + "stringValue": "st_SAS" + }, + { + "stringValue": "st_SCE" + }, + { + "stringValue": "st_SKW" + }, + { + "stringValue": "st_SUS" + }, + { + "stringValue": "st_SVA" + }, + { + "stringValue": "st_SWA" + }, + { + "stringValue": "st_SWR" + }, + { + "stringValue": "st_SXD" + }, + { + "stringValue": "st_TAM" + }, + { + "stringValue": "st_TAP" + }, + { + "stringValue": "st_TGG" + }, + { + "stringValue": "st_THA" + }, + { + "stringValue": "st_THT" + }, + { + "stringValue": "st_THY" + }, + { + "stringValue": "st_TRA" + }, + { + "stringValue": "st_TSC" + }, + { + "stringValue": "st_TUI" + }, + { + "stringValue": "st_TVF" + }, + { + "stringValue": "st_UAE" + }, + { + "stringValue": "st_UAL" + }, + { + "stringValue": "st_UCA" + }, + { + "stringValue": "st_VIR" + }, + { + "stringValue": "st_VIV" + }, + { + "stringValue": "st_VJT" + }, + { + "stringValue": "st_VLG" + }, + { + "stringValue": "st_VOE" + }, + { + "stringValue": "st_VOZ" + }, + { + "stringValue": "st_VTA" + }, + { + "stringValue": "st_WEN" + }, + { + "stringValue": "st_WIA" + }, + { + "stringValue": "st_WIF" + }, + { + "stringValue": "st_WJA" + } + ] + } + }, + "st_JZA": { + "arrayValue": { + "values": [ + { + "stringValue": "st_AAH" + }, + { + "stringValue": "st_AAL" + }, + { + "stringValue": "st_AAR" + }, + { + "stringValue": "st_AAY" + }, + { + "stringValue": "st_ABX" + }, + { + "stringValue": "st_ABY" + }, + { + "stringValue": "st_ACA" + }, + { + "stringValue": "st_ACI" + }, + { + "stringValue": "st_ACO" + }, + { + "stringValue": "st_AEA" + }, + { + "stringValue": "st_AEE" + }, + { + "stringValue": "st_AER" + }, + { + "stringValue": "st_AFR" + }, + { + "stringValue": "st_AIC" + }, + { + "stringValue": "st_AIE" + }, + { + "stringValue": "st_AIZ" + }, + { + "stringValue": "st_AJI" + }, + { + "stringValue": "st_AJT" + }, + { + "stringValue": "st_AKT" + }, + { + "stringValue": "st_AMF" + }, + { + "stringValue": "st_AMX" + }, + { + "stringValue": "st_ANA" + }, + { + "stringValue": "st_ANT" + }, + { + "stringValue": "st_ANZ" + }, + { + "stringValue": "st_ARG" + }, + { + "stringValue": "st_ASA" + }, + { + "stringValue": "st_ASH" + }, + { + "stringValue": "st_ASL" + }, + { + "stringValue": "st_ATN" + }, + { + "stringValue": "st_AUA" + }, + { + "stringValue": "st_AVA" + }, + { + "stringValue": "st_AWI" + }, + { + "stringValue": "st_AZU" + }, + { + "stringValue": "st_BAW" + }, + { + "stringValue": "st_BEE" + }, + { + "stringValue": "st_BEL" + }, + { + "stringValue": "st_BLS" + }, + { + "stringValue": "st_BRG" + }, + { + "stringValue": "st_BTI" + }, + { + "stringValue": "st_BTQ" + }, + { + "stringValue": "st_BWA" + }, + { + "stringValue": "st_CAL" + }, + { + "stringValue": "st_CAV" + }, + { + "stringValue": "st_CAY" + }, + { + "stringValue": "st_CCM" + }, + { + "stringValue": "st_CES" + }, + { + "stringValue": "st_CFG" + }, + { + "stringValue": "st_CFS" + }, + { + "stringValue": "st_CKS" + }, + { + "stringValue": "st_CMP" + }, + { + "stringValue": "st_CNF" + }, + { + "stringValue": "st_CPA" + }, + { + "stringValue": "st_CRK" + }, + { + "stringValue": "st_CRQ" + }, + { + "stringValue": "st_CSA" + }, + { + "stringValue": "st_CSB" + }, + { + "stringValue": "st_CSZ" + }, + { + "stringValue": "st_CTN" + }, + { + "stringValue": "st_DAL" + }, + { + "stringValue": "st_DJT" + }, + { + "stringValue": "st_DLA" + }, + { + "stringValue": "st_DLH" + }, + { + "stringValue": "st_EAL" + }, + { + "stringValue": "st_EDV" + }, + { + "stringValue": "st_EDW" + }, + { + "stringValue": "st_ELY" + }, + { + "stringValue": "st_ENY" + }, + { + "stringValue": "st_ETD" + }, + { + "stringValue": "st_ETH" + }, + { + "stringValue": "st_EVA" + }, + { + "stringValue": "st_EWG" + }, + { + "stringValue": "st_FBU" + }, + { + "stringValue": "st_FC" + }, + { + "stringValue": "st_FDB" + }, + { + "stringValue": "st_FDX" + }, + { + "stringValue": "st_FDY" + }, + { + "stringValue": "st_FFT" + }, + { + "stringValue": "st_FIN" + }, + { + "stringValue": "st_FJI" + }, + { + "stringValue": "st_FLE" + }, + { + "stringValue": "st_FRG" + }, + { + "stringValue": "st_FTO" + }, + { + "stringValue": "st_FWI" + }, + { + "stringValue": "st_GFA" + }, + { + "stringValue": "st_GJS" + }, + { + "stringValue": "st_GLA" + }, + { + "stringValue": "st_GLO" + }, + { + "stringValue": "st_GLR" + }, + { + "stringValue": "st_GPD" + }, + { + "stringValue": "st_GUN" + }, + { + "stringValue": "st_GWI" + }, + { + "stringValue": "st_GZ" + }, + { + "stringValue": "st_HAL" + }, + { + "stringValue": "st_HDA" + }, + { + "stringValue": "st_HI" + }, + { + "stringValue": "st_HKE" + }, + { + "stringValue": "st_HOP" + }, + { + "stringValue": "st_IBB" + }, + { + "stringValue": "st_IBE" + }, + { + "stringValue": "st_ICE" + }, + { + "stringValue": "st_IFL" + }, + { + "stringValue": "st_ISR" + }, + { + "stringValue": "st_ISS" + }, + { + "stringValue": "st_ITY" + }, + { + "stringValue": "st_J5" + }, + { + "stringValue": "st_JAL" + }, + { + "stringValue": "st_JBA" + }, + { + "stringValue": "st_JBU" + }, + { + "stringValue": "st_JIA" + }, + { + "stringValue": "st_JST" + }, + { + "stringValue": "st_JSX" + }, + { + "stringValue": "st_JUS" + }, + { + "stringValue": "st_JZA" + }, + { + "stringValue": "st_KAC" + }, + { + "stringValue": "st_KAL" + }, + { + "stringValue": "st_KAP" + }, + { + "stringValue": "st_KEN" + }, + { + "stringValue": "st_KFA" + }, + { + "stringValue": "st_KFS" + }, + { + "stringValue": "st_KII" + }, + { + "stringValue": "st_KLM" + }, + { + "stringValue": "st_KQA" + }, + { + "stringValue": "st_KYE" + }, + { + "stringValue": "st_LAN" + }, + { + "stringValue": "st_LGL" + }, + { + "stringValue": "st_LIA" + }, + { + "stringValue": "st_LOG" + }, + { + "stringValue": "st_LOT" + }, + { + "stringValue": "st_LRC" + }, + { + "stringValue": "st_LYC" + }, + { + "stringValue": "st_MAS" + }, + { + "stringValue": "st_MAU" + }, + { + "stringValue": "st_MDA" + }, + { + "stringValue": "st_MEA" + }, + { + "stringValue": "st_MGE" + }, + { + "stringValue": "st_MNU" + }, + { + "stringValue": "st_MTN" + }, + { + "stringValue": "st_MXY" + }, + { + "stringValue": "st_NAC" + }, + { + "stringValue": "st_NCR" + }, + { + "stringValue": "st_NKS" + }, + { + "stringValue": "st_NLA" + }, + { + "stringValue": "st_NMB" + }, + { + "stringValue": "st_OAE" + }, + { + "stringValue": "st_OCN" + }, + { + "stringValue": "st_OMA" + }, + { + "stringValue": "st_ONE" + }, + { + "stringValue": "st_PAC" + }, + { + "stringValue": "st_PAL" + }, + { + "stringValue": "st_PCO" + }, + { + "stringValue": "st_PDT" + }, + { + "stringValue": "st_PIA" + }, + { + "stringValue": "st_POE" + }, + { + "stringValue": "st_PSC" + }, + { + "stringValue": "st_PVL" + }, + { + "stringValue": "st_QFA" + }, + { + "stringValue": "st_QTR" + }, + { + "stringValue": "st_QXE" + }, + { + "stringValue": "st_RBA" + }, + { + "stringValue": "st_REU" + }, + { + "stringValue": "st_RJA" + }, + { + "stringValue": "st_ROU" + }, + { + "stringValue": "st_RPA" + }, + { + "stringValue": "st_RVF" + }, + { + "stringValue": "st_RWD" + }, + { + "stringValue": "st_RYA" + }, + { + "stringValue": "st_RZO" + }, + { + "stringValue": "st_SAA" + }, + { + "stringValue": "st_SAS" + }, + { + "stringValue": "st_SBS" + }, + { + "stringValue": "st_SCE" + }, + { + "stringValue": "st_SCX" + }, + { + "stringValue": "st_SEY" + }, + { + "stringValue": "st_SIL" + }, + { + "stringValue": "st_SKU" + }, + { + "stringValue": "st_SKW" + }, + { + "stringValue": "st_SKZ" + }, + { + "stringValue": "st_SNC" + }, + { + "stringValue": "st_SVA" + }, + { + "stringValue": "st_SWA" + }, + { + "stringValue": "st_SWG" + }, + { + "stringValue": "st_SWR" + }, + { + "stringValue": "st_SXS" + }, + { + "stringValue": "st_TAI" + }, + { + "stringValue": "st_TAP" + }, + { + "stringValue": "st_TAR" + }, + { + "stringValue": "st_TGG" + }, + { + "stringValue": "st_THA" + }, + { + "stringValue": "st_THT" + }, + { + "stringValue": "st_THY" + }, + { + "stringValue": "st_TIN" + }, + { + "stringValue": "st_TOS" + }, + { + "stringValue": "st_TRA" + }, + { + "stringValue": "st_TSC" + }, + { + "stringValue": "st_TUI" + }, + { + "stringValue": "st_TVF" + }, + { + "stringValue": "st_UAE" + }, + { + "stringValue": "st_UAL" + }, + { + "stringValue": "st_UCA" + }, + { + "stringValue": "st_UPS" + }, + { + "stringValue": "st_USC" + }, + { + "stringValue": "st_VES" + }, + { + "stringValue": "st_VIR" + }, + { + "stringValue": "st_VJH" + }, + { + "stringValue": "st_VLG" + }, + { + "stringValue": "st_VOE" + }, + { + "stringValue": "st_VOZ" + }, + { + "stringValue": "st_VRE" + }, + { + "stringValue": "st_VTA" + }, + { + "stringValue": "st_VTE" + }, + { + "stringValue": "st_VTI" + }, + { + "stringValue": "st_VTS" + }, + { + "stringValue": "st_VXP" + }, + { + "stringValue": "st_WAF" + }, + { + "stringValue": "st_WAV" + }, + { + "stringValue": "st_WEN" + }, + { + "stringValue": "st_WGN" + }, + { + "stringValue": "st_WIA" + }, + { + "stringValue": "st_WIF" + }, + { + "stringValue": "st_WJA" + }, + { + "stringValue": "st_WSG" + }, + { + "stringValue": "st_WSW" + }, + { + "stringValue": "st_YB" + } + ] + } + }, + "st_RJA": { + "arrayValue": { + "values": [ + { + "stringValue": "st_AAL" + }, + { + "stringValue": "st_ACA" + }, + { + "stringValue": "st_JBU" + }, + { + "stringValue": "st_QTR" + }, + { + "stringValue": "st_UAL" + } + ] + } + }, + "st_CRL": { + "arrayValue": { + "values": [ + { + "stringValue": "st_ACA" + }, + { + "stringValue": "st_AFR" + }, + { + "stringValue": "st_CPA" + }, + { + "stringValue": "st_DLH" + }, + { + "stringValue": "st_SWR" + }, + { + "stringValue": "st_TVF" + }, + { + "stringValue": "st_VLG" + } + ] + } + }, + "st_GZ": { + "arrayValue": { + "values": [ + { + "stringValue": "st_ANZ" + } + ] + } + }, + "st_LYM": { + "arrayValue": { + "values": [ + { + "stringValue": "st_AAL" + }, + { + "stringValue": "st_DAL" + }, + { + "stringValue": "st_SWA" + }, + { + "stringValue": "st_UAL" + } + ] + } + }, + "st_TIN": { + "arrayValue": { + "values": [ + { + "stringValue": "st_AAY" + }, + { + "stringValue": "st_ACA" + }, + { + "stringValue": "st_AIE" + }, + { + "stringValue": "st_AIZ" + }, + { + "stringValue": "st_AKT" + }, + { + "stringValue": "st_AMX" + }, + { + "stringValue": "st_ANT" + }, + { + "stringValue": "st_ASA" + }, + { + "stringValue": "st_AUA" + }, + { + "stringValue": "st_BCY" + }, + { + "stringValue": "st_BLS" + }, + { + "stringValue": "st_DAL" + }, + { + "stringValue": "st_DLH" + }, + { + "stringValue": "st_DTR" + }, + { + "stringValue": "st_DUB" + }, + { + "stringValue": "st_EDW" + }, + { + "stringValue": "st_FFT" + }, + { + "stringValue": "st_GLO" + }, + { + "stringValue": "st_HAL" + }, + { + "stringValue": "st_ISA" + }, + { + "stringValue": "st_ISS" + }, + { + "stringValue": "st_JST" + }, + { + "stringValue": "st_LOT" + }, + { + "stringValue": "st_PCO" + }, + { + "stringValue": "st_POE" + }, + { + "stringValue": "st_QFA" + }, + { + "stringValue": "st_RSP" + }, + { + "stringValue": "st_SPA" + }, + { + "stringValue": "st_SWA" + }, + { + "stringValue": "st_SWR" + }, + { + "stringValue": "st_WIA" + }, + { + "stringValue": "st_WJA" + }, + { + "stringValue": "st_YB" + } + ] + } + }, + "st_SWG": { + "arrayValue": { + "values": [ + { + "stringValue": "st_ACA" + }, + { + "stringValue": "st_CPA" + }, + { + "stringValue": "st_UAL" + } + ] + } + }, + "st_AAY": { + "arrayValue": { + "values": [ + { + "stringValue": "st_4T" + }, + { + "stringValue": "st_AAY" + }, + { + "stringValue": "st_ACA" + }, + { + "stringValue": "st_ACI" + }, + { + "stringValue": "st_AEA" + }, + { + "stringValue": "st_AFR" + }, + { + "stringValue": "st_AIE" + }, + { + "stringValue": "st_AIZ" + }, + { + "stringValue": "st_AKT" + }, + { + "stringValue": "st_AMX" + }, + { + "stringValue": "st_ANT" + }, + { + "stringValue": "st_ASA" + }, + { + "stringValue": "st_ASH" + }, + { + "stringValue": "st_ASL" + }, + { + "stringValue": "st_ATV" + }, + { + "stringValue": "st_AUA" + }, + { + "stringValue": "st_AVA" + }, + { + "stringValue": "st_AWI" + }, + { + "stringValue": "st_AZU" + }, + { + "stringValue": "st_BAW" + }, + { + "stringValue": "st_BEE" + }, + { + "stringValue": "st_BEL" + }, + { + "stringValue": "st_BLA" + }, + { + "stringValue": "st_BTI" + }, + { + "stringValue": "st_BTQ" + }, + { + "stringValue": "st_BWA" + }, + { + "stringValue": "st_CAV" + }, + { + "stringValue": "st_CAY" + }, + { + "stringValue": "st_CCM" + }, + { + "stringValue": "st_CFG" + }, + { + "stringValue": "st_CFS" + }, + { + "stringValue": "st_CMP" + }, + { + "stringValue": "st_CPA" + }, + { + "stringValue": "st_CRK" + }, + { + "stringValue": "st_CRL" + }, + { + "stringValue": "st_CRQ" + }, + { + "stringValue": "st_CS" + }, + { + "stringValue": "st_CTN" + }, + { + "stringValue": "st_DAL" + }, + { + "stringValue": "st_DJT" + }, + { + "stringValue": "st_DLA" + }, + { + "stringValue": "st_DLH" + }, + { + "stringValue": "st_ELY" + }, + { + "stringValue": "st_ETD" + }, + { + "stringValue": "st_EVA" + }, + { + "stringValue": "st_EWG" + }, + { + "stringValue": "st_FC" + }, + { + "stringValue": "st_FDB" + }, + { + "stringValue": "st_FDY" + }, + { + "stringValue": "st_FFT" + }, + { + "stringValue": "st_FIN" + }, + { + "stringValue": "st_FJI" + }, + { + "stringValue": "st_FLE" + }, + { + "stringValue": "st_FLI" + }, + { + "stringValue": "st_FPO" + }, + { + "stringValue": "st_FWI" + }, + { + "stringValue": "st_GJS" + }, + { + "stringValue": "st_GLO" + }, + { + "stringValue": "st_GTI" + }, + { + "stringValue": "st_GZ" + }, + { + "stringValue": "st_HAL" + }, + { + "stringValue": "st_HDA" + }, + { + "stringValue": "st_HI" + }, + { + "stringValue": "st_HKE" + }, + { + "stringValue": "st_HOP" + }, + { + "stringValue": "st_IBE" + }, + { + "stringValue": "st_ICE" + }, + { + "stringValue": "st_ISR" + }, + { + "stringValue": "st_ISS" + }, + { + "stringValue": "st_ITY" + }, + { + "stringValue": "st_IYE" + }, + { + "stringValue": "st_JBU" + }, + { + "stringValue": "st_JIA" + }, + { + "stringValue": "st_JSX" + }, + { + "stringValue": "st_JZR" + }, + { + "stringValue": "st_KAP" + }, + { + "stringValue": "st_KEN" + }, + { + "stringValue": "st_KLM" + }, + { + "stringValue": "st_KMM" + }, + { + "stringValue": "st_KQA" + }, + { + "stringValue": "st_KSZ" + }, + { + "stringValue": "st_LAN" + }, + { + "stringValue": "st_LIA" + }, + { + "stringValue": "st_LOF" + }, + { + "stringValue": "st_LOG" + }, + { + "stringValue": "st_LOT" + }, + { + "stringValue": "st_MHO" + }, + { + "stringValue": "st_MXY" + }, + { + "stringValue": "st_NBT" + }, + { + "stringValue": "st_NDA" + }, + { + "stringValue": "st_NKS" + }, + { + "stringValue": "st_OAW" + }, + { + "stringValue": "st_OCN" + }, + { + "stringValue": "st_OMA" + }, + { + "stringValue": "st_PAG" + }, + { + "stringValue": "st_PCO" + }, + { + "stringValue": "st_PIA" + }, + { + "stringValue": "st_POE" + }, + { + "stringValue": "st_PSC" + }, + { + "stringValue": "st_PTN" + }, + { + "stringValue": "st_QFA" + }, + { + "stringValue": "st_RBA" + }, + { + "stringValue": "st_RJA" + }, + { + "stringValue": "st_ROT" + }, + { + "stringValue": "st_RPA" + }, + { + "stringValue": "st_RPB" + }, + { + "stringValue": "st_RVF" + }, + { + "stringValue": "st_RXI" + }, + { + "stringValue": "st_RZO" + }, + { + "stringValue": "st_SAS" + }, + { + "stringValue": "st_SCE" + }, + { + "stringValue": "st_SCX" + }, + { + "stringValue": "st_SEY" + }, + { + "stringValue": "st_SIL" + }, + { + "stringValue": "st_SVA" + }, + { + "stringValue": "st_SWA" + }, + { + "stringValue": "st_SWR" + }, + { + "stringValue": "st_SXS" + }, + { + "stringValue": "st_THT" + }, + { + "stringValue": "st_TIN" + }, + { + "stringValue": "st_TOS" + }, + { + "stringValue": "st_TRA" + }, + { + "stringValue": "st_TUI" + }, + { + "stringValue": "st_TVF" + }, + { + "stringValue": "st_UAE" + }, + { + "stringValue": "st_UAL" + }, + { + "stringValue": "st_VIR" + }, + { + "stringValue": "st_VIV" + }, + { + "stringValue": "st_VJH" + }, + { + "stringValue": "st_VJT" + }, + { + "stringValue": "st_VLG" + }, + { + "stringValue": "st_VOE" + }, + { + "stringValue": "st_VOZ" + }, + { + "stringValue": "st_VRE" + }, + { + "stringValue": "st_VTE" + }, + { + "stringValue": "st_VTI" + }, + { + "stringValue": "st_VXP" + }, + { + "stringValue": "st_WIA" + }, + { + "stringValue": "st_WIF" + }, + { + "stringValue": "st_WJA" + }, + { + "stringValue": "st_WSG" + }, + { + "stringValue": "st_WSN" + }, + { + "stringValue": "st_YB" + } + ] + } + }, + "st_VIV": { + "arrayValue": { + "values": [ + { + "stringValue": "st_AAL" + }, + { + "stringValue": "st_AAY" + }, + { + "stringValue": "st_ACA" + }, + { + "stringValue": "st_AIE" + }, + { + "stringValue": "st_ASA" + }, + { + "stringValue": "st_AUA" + }, + { + "stringValue": "st_AVA" + }, + { + "stringValue": "st_BPC" + }, + { + "stringValue": "st_BTQ" + }, + { + "stringValue": "st_CNF" + }, + { + "stringValue": "st_CS" + }, + { + "stringValue": "st_DAL" + }, + { + "stringValue": "st_DLH" + }, + { + "stringValue": "st_DWI" + }, + { + "stringValue": "st_EDW" + }, + { + "stringValue": "st_ETD" + }, + { + "stringValue": "st_EWG" + }, + { + "stringValue": "st_FIN" + }, + { + "stringValue": "st_FLE" + }, + { + "stringValue": "st_FPO" + }, + { + "stringValue": "st_FWI" + }, + { + "stringValue": "st_GLG" + }, + { + "stringValue": "st_GLO" + }, + { + "stringValue": "st_GLR" + }, + { + "stringValue": "st_IBB" + }, + { + "stringValue": "st_IBE" + }, + { + "stringValue": "st_ITY" + }, + { + "stringValue": "st_JBU" + }, + { + "stringValue": "st_JJP" + }, + { + "stringValue": "st_JSA" + }, + { + "stringValue": "st_JST" + }, + { + "stringValue": "st_JSX" + }, + { + "stringValue": "st_LAN" + }, + { + "stringValue": "st_LHX" + }, + { + "stringValue": "st_LRC" + }, + { + "stringValue": "st_MXY" + }, + { + "stringValue": "st_NBT" + }, + { + "stringValue": "st_NKS" + }, + { + "stringValue": "st_NOZ" + }, + { + "stringValue": "st_NSZ" + }, + { + "stringValue": "st_OCN" + }, + { + "stringValue": "st_POE" + }, + { + "stringValue": "st_QFA" + }, + { + "stringValue": "st_SWA" + }, + { + "stringValue": "st_SWR" + }, + { + "stringValue": "st_TAI" + }, + { + "stringValue": "st_TIN" + }, + { + "stringValue": "st_TRA" + }, + { + "stringValue": "st_TSC" + }, + { + "stringValue": "st_TVF" + }, + { + "stringValue": "st_UAE" + }, + { + "stringValue": "st_UAL" + }, + { + "stringValue": "st_UBT" + }, + { + "stringValue": "st_VIV" + }, + { + "stringValue": "st_VLG" + }, + { + "stringValue": "st_VOE" + }, + { + "stringValue": "st_WJA" + }, + { + "stringValue": "st_YB" + } + ] + } + }, + "st_AUA": { + "arrayValue": { + "values": [ + { + "stringValue": "st_AAL" + }, + { + "stringValue": "st_AAR" + }, + { + "stringValue": "st_AAY" + }, + { + "stringValue": "st_ACA" + }, + { + "stringValue": "st_AEA" + }, + { + "stringValue": "st_AEE" + }, + { + "stringValue": "st_AFR" + }, + { + "stringValue": "st_AIC" + }, + { + "stringValue": "st_AMX" + }, + { + "stringValue": "st_ANA" + }, + { + "stringValue": "st_ANZ" + }, + { + "stringValue": "st_ARG" + }, + { + "stringValue": "st_ASA" + }, + { + "stringValue": "st_AUA" + }, + { + "stringValue": "st_AUA" + }, + { + "stringValue": "st_AVA" + }, + { + "stringValue": "st_BAW" + }, + { + "stringValue": "st_BKP" + }, + { + "stringValue": "st_BTI" + }, + { + "stringValue": "st_CAL" + }, + { + "stringValue": "st_CES" + }, + { + "stringValue": "st_CFG" + }, + { + "stringValue": "st_CPA" + }, + { + "stringValue": "st_CRK" + }, + { + "stringValue": "st_CS" + }, + { + "stringValue": "st_CTN" + }, + { + "stringValue": "st_DAL" + }, + { + "stringValue": "st_DLH" + }, + { + "stringValue": "st_ENY" + }, + { + "stringValue": "st_ETD" + }, + { + "stringValue": "st_ETH" + }, + { + "stringValue": "st_EVA" + }, + { + "stringValue": "st_FDB" + }, + { + "stringValue": "st_FFT" + }, + { + "stringValue": "st_FIN" + }, + { + "stringValue": "st_FJI" + }, + { + "stringValue": "st_GLO" + }, + { + "stringValue": "st_GRL" + }, + { + "stringValue": "st_HAL" + }, + { + "stringValue": "st_HKE" + }, + { + "stringValue": "st_HVN" + }, + { + "stringValue": "st_IBE" + }, + { + "stringValue": "st_ICE" + }, + { + "stringValue": "st_ITY" + }, + { + "stringValue": "st_JAL" + }, + { + "stringValue": "st_JBU" + }, + { + "stringValue": "st_JST" + }, + { + "stringValue": "st_JSX" + }, + { + "stringValue": "st_KAL" + }, + { + "stringValue": "st_KLM" + }, + { + "stringValue": "st_LAN" + }, + { + "stringValue": "st_LGL" + }, + { + "stringValue": "st_LOT" + }, + { + "stringValue": "st_MAU" + }, + { + "stringValue": "st_NBT" + }, + { + "stringValue": "st_NKS" + }, + { + "stringValue": "st_NOZ" + }, + { + "stringValue": "st_OAW" + }, + { + "stringValue": "st_PAL" + }, + { + "stringValue": "st_POE" + }, + { + "stringValue": "st_QFA" + }, + { + "stringValue": "st_QTR" + }, + { + "stringValue": "st_SAS" + }, + { + "stringValue": "st_SWA" + }, + { + "stringValue": "st_SWR" + }, + { + "stringValue": "st_TAP" + }, + { + "stringValue": "st_TGW" + }, + { + "stringValue": "st_THA" + }, + { + "stringValue": "st_THY" + }, + { + "stringValue": "st_TSC" + }, + { + "stringValue": "st_TVS" + }, + { + "stringValue": "st_UAE" + }, + { + "stringValue": "st_UAL" + }, + { + "stringValue": "st_VIR" + }, + { + "stringValue": "st_VJH" + }, + { + "stringValue": "st_VLG" + }, + { + "stringValue": "st_VOZ" + }, + { + "stringValue": "st_WIF" + }, + { + "stringValue": "st_WJA" + }, + { + "stringValue": "st_XBO" + } + ] + } + }, + "st_RBA": { + "arrayValue": { + "values": [ + { + "stringValue": "st_CPA" + } + ] + } + }, + "st_YB": { + "arrayValue": { + "values": [ + { + "stringValue": "st_ACA" + }, + { + "stringValue": "st_ASA" + }, + { + "stringValue": "st_BAW" + }, + { + "stringValue": "st_DAL" + }, + { + "stringValue": "st_DLH" + }, + { + "stringValue": "st_HAL" + }, + { + "stringValue": "st_POE" + }, + { + "stringValue": "st_WJA" + } + ] + } + }, + "st_DAL": { + "arrayValue": { + "values": [ + { + "stringValue": "st_AAL" + }, + { + "stringValue": "st_AAR" + }, + { + "stringValue": "st_AAY" + }, + { + "stringValue": "st_ABX" + }, + { + "stringValue": "st_ACA" + }, + { + "stringValue": "st_AEA" + }, + { + "stringValue": "st_AEE" + }, + { + "stringValue": "st_AFR" + }, + { + "stringValue": "st_AIC" + }, + { + "stringValue": "st_AIE" + }, + { + "stringValue": "st_AIZ" + }, + { + "stringValue": "st_AKT" + }, + { + "stringValue": "st_AMF" + }, + { + "stringValue": "st_AMX" + }, + { + "stringValue": "st_ANA" + }, + { + "stringValue": "st_ANT" + }, + { + "stringValue": "st_ANZ" + }, + { + "stringValue": "st_APZ" + }, + { + "stringValue": "st_ARG" + }, + { + "stringValue": "st_ASA" + }, + { + "stringValue": "st_ASH" + }, + { + "stringValue": "st_ASQ" + }, + { + "stringValue": "st_AUA" + }, + { + "stringValue": "st_AVA" + }, + { + "stringValue": "st_AWI" + }, + { + "stringValue": "st_AZU" + }, + { + "stringValue": "st_BAW" + }, + { + "stringValue": "st_BEL" + }, + { + "stringValue": "st_BKP" + }, + { + "stringValue": "st_BTI" + }, + { + "stringValue": "st_BTQ" + }, + { + "stringValue": "st_BWA" + }, + { + "stringValue": "st_CAL" + }, + { + "stringValue": "st_CES" + }, + { + "stringValue": "st_CFG" + }, + { + "stringValue": "st_CFS" + }, + { + "stringValue": "st_CKS" + }, + { + "stringValue": "st_CMP" + }, + { + "stringValue": "st_CPA" + }, + { + "stringValue": "st_CRK" + }, + { + "stringValue": "st_CSH" + }, + { + "stringValue": "st_CTN" + }, + { + "stringValue": "st_CXA" + }, + { + "stringValue": "st_DAL" + }, + { + "stringValue": "st_DAL" + }, + { + "stringValue": "st_DLA" + }, + { + "stringValue": "st_DLH" + }, + { + "stringValue": "st_DWI" + }, + { + "stringValue": "st_EDV" + }, + { + "stringValue": "st_EDW" + }, + { + "stringValue": "st_EIN" + }, + { + "stringValue": "st_ELY" + }, + { + "stringValue": "st_ENY" + }, + { + "stringValue": "st_ETD" + }, + { + "stringValue": "st_ETH" + }, + { + "stringValue": "st_EVA" + }, + { + "stringValue": "st_EWG" + }, + { + "stringValue": "st_EZY" + }, + { + "stringValue": "st_FDB" + }, + { + "stringValue": "st_FDX" + }, + { + "stringValue": "st_FDY" + }, + { + "stringValue": "st_FFT" + }, + { + "stringValue": "st_FIN" + }, + { + "stringValue": "st_FJI" + }, + { + "stringValue": "st_FLE" + }, + { + "stringValue": "st_GIA" + }, + { + "stringValue": "st_GJS" + }, + { + "stringValue": "st_GLO" + }, + { + "stringValue": "st_GPD" + }, + { + "stringValue": "st_GTI" + }, + { + "stringValue": "st_GUN" + }, + { + "stringValue": "st_HAL" + }, + { + "stringValue": "st_HI" + }, + { + "stringValue": "st_HKE" + }, + { + "stringValue": "st_HVN" + }, + { + "stringValue": "st_IBE" + }, + { + "stringValue": "st_ICE" + }, + { + "stringValue": "st_IGO" + }, + { + "stringValue": "st_ITY" + }, + { + "stringValue": "st_J5" + }, + { + "stringValue": "st_JAL" + }, + { + "stringValue": "st_JBU" + }, + { + "stringValue": "st_JIA" + }, + { + "stringValue": "st_JJA" + }, + { + "stringValue": "st_JJP" + }, + { + "stringValue": "st_JNA" + }, + { + "stringValue": "st_JST" + }, + { + "stringValue": "st_JSX" + }, + { + "stringValue": "st_JZA" + }, + { + "stringValue": "st_KAL" + }, + { + "stringValue": "st_KAP" + }, + { + "stringValue": "st_KFS" + }, + { + "stringValue": "st_KII" + }, + { + "stringValue": "st_KLM" + }, + { + "stringValue": "st_KQA" + }, + { + "stringValue": "st_LAN" + }, + { + "stringValue": "st_LGL" + }, + { + "stringValue": "st_LHX" + }, + { + "stringValue": "st_LOT" + }, + { + "stringValue": "st_LPE" + }, + { + "stringValue": "st_LYM" + }, + { + "stringValue": "st_MAS" + }, + { + "stringValue": "st_MSR" + }, + { + "stringValue": "st_MXY" + }, + { + "stringValue": "st_NBT" + }, + { + "stringValue": "st_NKS" + }, + { + "stringValue": "st_NOZ" + }, + { + "stringValue": "st_OCN" + }, + { + "stringValue": "st_PAG" + }, + { + "stringValue": "st_PAL" + }, + { + "stringValue": "st_PCO" + }, + { + "stringValue": "st_PDT" + }, + { + "stringValue": "st_POE" + }, + { + "stringValue": "st_POE_2025" + }, + { + "stringValue": "st_QFA" + }, + { + "stringValue": "st_QTR" + }, + { + "stringValue": "st_QXE" + }, + { + "stringValue": "st_RAM" + }, + { + "stringValue": "st_RPA" + }, + { + "stringValue": "st_RYR" + }, + { + "stringValue": "st_SAA" + }, + { + "stringValue": "st_SAS" + }, + { + "stringValue": "st_SCX" + }, + { + "stringValue": "st_SIA" + }, + { + "stringValue": "st_SJX" + }, + { + "stringValue": "st_SKU" + }, + { + "stringValue": "st_SKW" + }, + { + "stringValue": "st_SVA" + }, + { + "stringValue": "st_SWA" + }, + { + "stringValue": "st_SWR" + }, + { + "stringValue": "st_SXS" + }, + { + "stringValue": "st_TAM" + }, + { + "stringValue": "st_TAP" + }, + { + "stringValue": "st_THA" + }, + { + "stringValue": "st_THT" + }, + { + "stringValue": "st_THY" + }, + { + "stringValue": "st_TOS" + }, + { + "stringValue": "st_TRA" + }, + { + "stringValue": "st_TSC" + }, + { + "stringValue": "st_TTW" + }, + { + "stringValue": "st_TVF" + }, + { + "stringValue": "st_UAE" + }, + { + "stringValue": "st_UAL" + }, + { + "stringValue": "st_UCA" + }, + { + "stringValue": "st_UPS" + }, + { + "stringValue": "st_VIR" + }, + { + "stringValue": "st_VIV" + }, + { + "stringValue": "st_VJT" + }, + { + "stringValue": "st_VLG" + }, + { + "stringValue": "st_VOE" + }, + { + "stringValue": "st_VOI" + }, + { + "stringValue": "st_VOZ" + }, + { + "stringValue": "st_VRD" + }, + { + "stringValue": "st_VTE" + }, + { + "stringValue": "st_VXP" + }, + { + "stringValue": "st_WEN" + }, + { + "stringValue": "st_WJA" + }, + { + "stringValue": "st_WSN" + }, + { + "stringValue": "st_YB" + } + ] + } + }, + "st_ASA": { + "arrayValue": { + "values": [ + { + "stringValue": "st_4T" + }, + { + "stringValue": "st_AAL" + }, + { + "stringValue": "st_AAR" + }, + { + "stringValue": "st_AAY" + }, + { + "stringValue": "st_ABY" + }, + { + "stringValue": "st_ACA" + }, + { + "stringValue": "st_ACI" + }, + { + "stringValue": "st_ACO" + }, + { + "stringValue": "st_AEA" + }, + { + "stringValue": "st_AEE" + }, + { + "stringValue": "st_AER" + }, + { + "stringValue": "st_AFR" + }, + { + "stringValue": "st_AIC" + }, + { + "stringValue": "st_AIE" + }, + { + "stringValue": "st_AIZ" + }, + { + "stringValue": "st_AKT" + }, + { + "stringValue": "st_ALK" + }, + { + "stringValue": "st_AMF" + }, + { + "stringValue": "st_AMX" + }, + { + "stringValue": "st_ANA" + }, + { + "stringValue": "st_ANT" + }, + { + "stringValue": "st_ANZ" + }, + { + "stringValue": "st_APZ" + }, + { + "stringValue": "st_ARG" + }, + { + "stringValue": "st_ASA" + }, + { + "stringValue": "st_ASH" + }, + { + "stringValue": "st_AUA" + }, + { + "stringValue": "st_AVA" + }, + { + "stringValue": "st_AVN" + }, + { + "stringValue": "st_AZU" + }, + { + "stringValue": "st_BAW" + }, + { + "stringValue": "st_BEL" + }, + { + "stringValue": "st_BGA" + }, + { + "stringValue": "st_BKP" + }, + { + "stringValue": "st_BLA" + }, + { + "stringValue": "st_BLS" + }, + { + "stringValue": "st_BRG" + }, + { + "stringValue": "st_BTI" + }, + { + "stringValue": "st_BTQ" + }, + { + "stringValue": "st_BWA" + }, + { + "stringValue": "st_CAL" + }, + { + "stringValue": "st_CAV" + }, + { + "stringValue": "st_CAY" + }, + { + "stringValue": "st_CCM" + }, + { + "stringValue": "st_CES" + }, + { + "stringValue": "st_CFG" + }, + { + "stringValue": "st_CFS" + }, + { + "stringValue": "st_CKS" + }, + { + "stringValue": "st_CMP" + }, + { + "stringValue": "st_CPA" + }, + { + "stringValue": "st_CRK" + }, + { + "stringValue": "st_CRQ" + }, + { + "stringValue": "st_CS" + }, + { + "stringValue": "st_CSA" + }, + { + "stringValue": "st_CTN" + }, + { + "stringValue": "st_DAL" + }, + { + "stringValue": "st_DJT" + }, + { + "stringValue": "st_DLA" + }, + { + "stringValue": "st_DLH" + }, + { + "stringValue": "st_DNA" + }, + { + "stringValue": "st_DTR" + }, + { + "stringValue": "st_DWI" + }, + { + "stringValue": "st_EDV" + }, + { + "stringValue": "st_EIN" + }, + { + "stringValue": "st_ELY" + }, + { + "stringValue": "st_ENY" + }, + { + "stringValue": "st_ETD" + }, + { + "stringValue": "st_ETH" + }, + { + "stringValue": "st_EVA" + }, + { + "stringValue": "st_EWG" + }, + { + "stringValue": "st_EXV" + }, + { + "stringValue": "st_FBU" + }, + { + "stringValue": "st_FC" + }, + { + "stringValue": "st_FDB" + }, + { + "stringValue": "st_FDX" + }, + { + "stringValue": "st_FDY" + }, + { + "stringValue": "st_FEG" + }, + { + "stringValue": "st_FFT" + }, + { + "stringValue": "st_FIN" + }, + { + "stringValue": "st_FJI" + }, + { + "stringValue": "st_FLE" + }, + { + "stringValue": "st_FLI" + }, + { + "stringValue": "st_FPO" + }, + { + "stringValue": "st_FWI" + }, + { + "stringValue": "st_GFA" + }, + { + "stringValue": "st_GIA" + }, + { + "stringValue": "st_GJS" + }, + { + "stringValue": "st_GLO" + }, + { + "stringValue": "st_GLR" + }, + { + "stringValue": "st_GPD" + }, + { + "stringValue": "st_GRL" + }, + { + "stringValue": "st_GTI" + }, + { + "stringValue": "st_GUN" + }, + { + "stringValue": "st_GZ" + }, + { + "stringValue": "st_HAL" + }, + { + "stringValue": "st_HI" + }, + { + "stringValue": "st_HKE" + }, + { + "stringValue": "st_HVN" + }, + { + "stringValue": "st_IBB" + }, + { + "stringValue": "st_IBE" + }, + { + "stringValue": "st_ICE" + }, + { + "stringValue": "st_ISR" + }, + { + "stringValue": "st_ITY" + }, + { + "stringValue": "st_IYE" + }, + { + "stringValue": "st_J5" + }, + { + "stringValue": "st_JAL" + }, + { + "stringValue": "st_JBU" + }, + { + "stringValue": "st_JIA" + }, + { + "stringValue": "st_JJP" + }, + { + "stringValue": "st_JSX" + }, + { + "stringValue": "st_JUS" + }, + { + "stringValue": "st_JZA" + }, + { + "stringValue": "st_KAC" + }, + { + "stringValue": "st_KAL" + }, + { + "stringValue": "st_KAP" + }, + { + "stringValue": "st_KEN" + }, + { + "stringValue": "st_KLM" + }, + { + "stringValue": "st_KMM" + }, + { + "stringValue": "st_KNE" + }, + { + "stringValue": "st_KQA" + }, + { + "stringValue": "st_KZR" + }, + { + "stringValue": "st_LAN" + }, + { + "stringValue": "st_LBT" + }, + { + "stringValue": "st_LGL" + }, + { + "stringValue": "st_LHX" + }, + { + "stringValue": "st_LIA" + }, + { + "stringValue": "st_LLL" + }, + { + "stringValue": "st_LNK" + }, + { + "stringValue": "st_LOG" + }, + { + "stringValue": "st_LOT" + }, + { + "stringValue": "st_MAS" + }, + { + "stringValue": "st_MAU" + }, + { + "stringValue": "st_MEA" + }, + { + "stringValue": "st_MMD" + }, + { + "stringValue": "st_MXY" + }, + { + "stringValue": "st_NGN" + }, + { + "stringValue": "st_NKS" + }, + { + "stringValue": "st_OAW" + }, + { + "stringValue": "st_OCN" + }, + { + "stringValue": "st_OMA" + }, + { + "stringValue": "st_PCO" + }, + { + "stringValue": "st_PDT" + }, + { + "stringValue": "st_POE" + }, + { + "stringValue": "st_PSC" + }, + { + "stringValue": "st_PTB" + }, + { + "stringValue": "st_QFA" + }, + { + "stringValue": "st_QTR" + }, + { + "stringValue": "st_QXE" + }, + { + "stringValue": "st_RAM" + }, + { + "stringValue": "st_RBA" + }, + { + "stringValue": "st_REU" + }, + { + "stringValue": "st_RJA" + }, + { + "stringValue": "st_RPA" + }, + { + "stringValue": "st_RVF" + }, + { + "stringValue": "st_RZO" + }, + { + "stringValue": "st_SAA" + }, + { + "stringValue": "st_SAS" + }, + { + "stringValue": "st_SBI" + }, + { + "stringValue": "st_SCX" + }, + { + "stringValue": "st_SEY" + }, + { + "stringValue": "st_SIL" + }, + { + "stringValue": "st_SJX" + }, + { + "stringValue": "st_SKU" + }, + { + "stringValue": "st_SKW" + }, + { + "stringValue": "st_SVA" + }, + { + "stringValue": "st_SWA" + }, + { + "stringValue": "st_SWR" + }, + { + "stringValue": "st_SXS" + }, + { + "stringValue": "st_TAP" + }, + { + "stringValue": "st_THA" + }, + { + "stringValue": "st_THT" + }, + { + "stringValue": "st_THY" + }, + { + "stringValue": "st_TIN" + }, + { + "stringValue": "st_TOS" + }, + { + "stringValue": "st_TPC" + }, + { + "stringValue": "st_TRA" + }, + { + "stringValue": "st_TSC" + }, + { + "stringValue": "st_TTW" + }, + { + "stringValue": "st_TUI" + }, + { + "stringValue": "st_TVF" + }, + { + "stringValue": "st_TZP" + }, + { + "stringValue": "st_UAE" + }, + { + "stringValue": "st_UAL" + }, + { + "stringValue": "st_UCA" + }, + { + "stringValue": "st_UPS" + }, + { + "stringValue": "st_VIR" + }, + { + "stringValue": "st_VIV" + }, + { + "stringValue": "st_VJH" + }, + { + "stringValue": "st_VLG" + }, + { + "stringValue": "st_VOE" + }, + { + "stringValue": "st_VOZ" + }, + { + "stringValue": "st_VRE" + }, + { + "stringValue": "st_VTA" + }, + { + "stringValue": "st_VTE" + }, + { + "stringValue": "st_VTS" + }, + { + "stringValue": "st_VXP" + }, + { + "stringValue": "st_WIA" + }, + { + "stringValue": "st_WIF" + }, + { + "stringValue": "st_WJA" + }, + { + "stringValue": "st_WSN" + }, + { + "stringValue": "st_YB" + } + ] + } + }, + "st_TGW": { + "arrayValue": { + "values": [ + { + "stringValue": "st_AUA" + }, + { + "stringValue": "st_DLH" + }, + { + "stringValue": "st_EVA" + }, + { + "stringValue": "st_EWG" + }, + { + "stringValue": "st_OCN" + }, + { + "stringValue": "st_SIA" + }, + { + "stringValue": "st_SWR" + } + ] + } + }, + "st_RPA": { + "arrayValue": { + "values": [ + { + "stringValue": "st_AAL" + }, + { + "stringValue": "st_AAY" + }, + { + "stringValue": "st_ACA" + }, + { + "stringValue": "st_AFR" + }, + { + "stringValue": "st_ASA" + }, + { + "stringValue": "st_BAW" + }, + { + "stringValue": "st_CAL" + }, + { + "stringValue": "st_CMP" + }, + { + "stringValue": "st_CPA" + }, + { + "stringValue": "st_DAL" + }, + { + "stringValue": "st_DLH" + }, + { + "stringValue": "st_ETD" + }, + { + "stringValue": "st_FFT" + }, + { + "stringValue": "st_HAL" + }, + { + "stringValue": "st_IBE" + }, + { + "stringValue": "st_JBU" + }, + { + "stringValue": "st_LAN" + }, + { + "stringValue": "st_MXY" + }, + { + "stringValue": "st_NKS" + }, + { + "stringValue": "st_QFA" + }, + { + "stringValue": "st_SVA" + }, + { + "stringValue": "st_SWA" + }, + { + "stringValue": "st_TAP" + }, + { + "stringValue": "st_UAE" + }, + { + "stringValue": "st_UAL" + } + ] + } + }, + "st_AAR": { + "arrayValue": { + "values": [ + { + "stringValue": "st_AAL" + }, + { + "stringValue": "st_AAR" + }, + { + "stringValue": "st_AAR" + }, + { + "stringValue": "st_ABL" + }, + { + "stringValue": "st_ACA" + }, + { + "stringValue": "st_AFR" + }, + { + "stringValue": "st_AMU" + }, + { + "stringValue": "st_ANA" + }, + { + "stringValue": "st_ANZ" + }, + { + "stringValue": "st_ASA" + }, + { + "stringValue": "st_ASV" + }, + { + "stringValue": "st_AUA" + }, + { + "stringValue": "st_BAW" + }, + { + "stringValue": "st_BKP" + }, + { + "stringValue": "st_CAL" + }, + { + "stringValue": "st_CMP" + }, + { + "stringValue": "st_CPA" + }, + { + "stringValue": "st_CRK" + }, + { + "stringValue": "st_DAL" + }, + { + "stringValue": "st_DLH" + }, + { + "stringValue": "st_ETD" + }, + { + "stringValue": "st_EVA" + }, + { + "stringValue": "st_FIN" + }, + { + "stringValue": "st_GIA" + }, + { + "stringValue": "st_HAL" + }, + { + "stringValue": "st_HVN" + }, + { + "stringValue": "st_IBE" + }, + { + "stringValue": "st_ITY" + }, + { + "stringValue": "st_JBU" + }, + { + "stringValue": "st_JJP" + }, + { + "stringValue": "st_JNA" + }, + { + "stringValue": "st_JST" + }, + { + "stringValue": "st_JZA" + }, + { + "stringValue": "st_KAL" + }, + { + "stringValue": "st_KZR" + }, + { + "stringValue": "st_LAN" + }, + { + "stringValue": "st_LOT" + }, + { + "stringValue": "st_QFA" + }, + { + "stringValue": "st_QTR" + }, + { + "stringValue": "st_QXE" + }, + { + "stringValue": "st_SAS" + }, + { + "stringValue": "st_SWA" + }, + { + "stringValue": "st_SWR" + }, + { + "stringValue": "st_TAP" + }, + { + "stringValue": "st_THA" + }, + { + "stringValue": "st_THY" + }, + { + "stringValue": "st_UAE" + }, + { + "stringValue": "st_UAL" + }, + { + "stringValue": "st_VIR" + }, + { + "stringValue": "st_VLG" + }, + { + "stringValue": "st_VOZ" + } + ] + } + }, + "st_HDA": { + "arrayValue": { + "values": [ + { + "stringValue": "st_CPA" + }, + { + "stringValue": "st_QFA" + } + ] + } + }, + "st_ANA": { + "arrayValue": { + "values": [ + { + "stringValue": "st_AAL" + }, + { + "stringValue": "st_AAR" + }, + { + "stringValue": "st_ACA" + }, + { + "stringValue": "st_AFR" + }, + { + "stringValue": "st_AIC" + }, + { + "stringValue": "st_ANA" + }, + { + "stringValue": "st_ANA" + }, + { + "stringValue": "st_ANZ" + }, + { + "stringValue": "st_APJ" + }, + { + "stringValue": "st_ASA" + }, + { + "stringValue": "st_ASH" + }, + { + "stringValue": "st_AUA" + }, + { + "stringValue": "st_AVA" + }, + { + "stringValue": "st_BAW" + }, + { + "stringValue": "st_BEL" + }, + { + "stringValue": "st_BKP" + }, + { + "stringValue": "st_CAL" + }, + { + "stringValue": "st_CPA" + }, + { + "stringValue": "st_CRK" + }, + { + "stringValue": "st_DAL" + }, + { + "stringValue": "st_DLH" + }, + { + "stringValue": "st_EDV" + }, + { + "stringValue": "st_ELY" + }, + { + "stringValue": "st_ENY" + }, + { + "stringValue": "st_ETD" + }, + { + "stringValue": "st_EVA" + }, + { + "stringValue": "st_EWG" + }, + { + "stringValue": "st_FFT" + }, + { + "stringValue": "st_FIN" + }, + { + "stringValue": "st_GIA" + }, + { + "stringValue": "st_HAL" + }, + { + "stringValue": "st_HVN" + }, + { + "stringValue": "st_IBE" + }, + { + "stringValue": "st_ITY" + }, + { + "stringValue": "st_JAL" + }, + { + "stringValue": "st_JBU" + }, + { + "stringValue": "st_JIA" + }, + { + "stringValue": "st_JJP" + }, + { + "stringValue": "st_JST" + }, + { + "stringValue": "st_JZA" + }, + { + "stringValue": "st_KAL" + }, + { + "stringValue": "st_LAN" + }, + { + "stringValue": "st_LOT" + }, + { + "stringValue": "st_MAS" + }, + { + "stringValue": "st_PAL" + }, + { + "stringValue": "st_QFA" + }, + { + "stringValue": "st_QLK" + }, + { + "stringValue": "st_QTR" + }, + { + "stringValue": "st_QXE" + }, + { + "stringValue": "st_SAS" + }, + { + "stringValue": "st_SJX" + }, + { + "stringValue": "st_SKW" + }, + { + "stringValue": "st_SWA" + }, + { + "stringValue": "st_SWR" + }, + { + "stringValue": "st_TAP" + }, + { + "stringValue": "st_THA" + }, + { + "stringValue": "st_THY" + }, + { + "stringValue": "st_UAE" + }, + { + "stringValue": "st_UAL" + }, + { + "stringValue": "st_VIR" + }, + { + "stringValue": "st_VOZ" + } + ] + } + }, + "st_TUI": { + "arrayValue": { + "values": [ + { + "stringValue": "st_AAL" + }, + { + "stringValue": "st_AAY" + }, + { + "stringValue": "st_ACA" + }, + { + "stringValue": "st_ACI" + }, + { + "stringValue": "st_AEA" + }, + { + "stringValue": "st_AEE" + }, + { + "stringValue": "st_AFR" + }, + { + "stringValue": "st_AIE" + }, + { + "stringValue": "st_AIZ" + }, + { + "stringValue": "st_AKT" + }, + { + "stringValue": "st_AMX" + }, + { + "stringValue": "st_ANG" + }, + { + "stringValue": "st_ANK" + }, + { + "stringValue": "st_ANT" + }, + { + "stringValue": "st_ASA" + }, + { + "stringValue": "st_ASH" + }, + { + "stringValue": "st_ASL" + }, + { + "stringValue": "st_AUA" + }, + { + "stringValue": "st_AWU" + }, + { + "stringValue": "st_AZU" + }, + { + "stringValue": "st_BAW" + }, + { + "stringValue": "st_BCV" + }, + { + "stringValue": "st_BCY" + }, + { + "stringValue": "st_BEL" + }, + { + "stringValue": "st_BGA" + }, + { + "stringValue": "st_BRX" + }, + { + "stringValue": "st_BTI" + }, + { + "stringValue": "st_BWA" + }, + { + "stringValue": "st_CAY" + }, + { + "stringValue": "st_CFG" + }, + { + "stringValue": "st_CNF" + }, + { + "stringValue": "st_CPA" + }, + { + "stringValue": "st_CRG" + }, + { + "stringValue": "st_CRL" + }, + { + "stringValue": "st_CRQ" + }, + { + "stringValue": "st_CSA" + }, + { + "stringValue": "st_CTN" + }, + { + "stringValue": "st_DAL" + }, + { + "stringValue": "st_DJT" + }, + { + "stringValue": "st_DLA" + }, + { + "stringValue": "st_DLH" + }, + { + "stringValue": "st_DTG" + }, + { + "stringValue": "st_DTR" + }, + { + "stringValue": "st_DWI" + }, + { + "stringValue": "st_ECA" + }, + { + "stringValue": "st_EDW" + }, + { + "stringValue": "st_EFW" + }, + { + "stringValue": "st_ELY" + }, + { + "stringValue": "st_EST" + }, + { + "stringValue": "st_ETD" + }, + { + "stringValue": "st_EWG" + }, + { + "stringValue": "st_FBU" + }, + { + "stringValue": "st_FDY" + }, + { + "stringValue": "st_FFT" + }, + { + "stringValue": "st_FIN" + }, + { + "stringValue": "st_FJI" + }, + { + "stringValue": "st_FLE" + }, + { + "stringValue": "st_FLI" + }, + { + "stringValue": "st_FPO" + }, + { + "stringValue": "st_FVJ" + }, + { + "stringValue": "st_FWI" + }, + { + "stringValue": "st_GFA" + }, + { + "stringValue": "st_GJT" + }, + { + "stringValue": "st_GLO" + }, + { + "stringValue": "st_GLR" + }, + { + "stringValue": "st_GPD" + }, + { + "stringValue": "st_GRL" + }, + { + "stringValue": "st_GZ" + }, + { + "stringValue": "st_HPK" + }, + { + "stringValue": "st_IBB" + }, + { + "stringValue": "st_IBE" + }, + { + "stringValue": "st_ICE" + }, + { + "stringValue": "st_IGC" + }, + { + "stringValue": "st_ISR" + }, + { + "stringValue": "st_ITY" + }, + { + "stringValue": "st_IYE" + }, + { + "stringValue": "st_JBU" + }, + { + "stringValue": "st_JJP" + }, + { + "stringValue": "st_JSA" + }, + { + "stringValue": "st_JST" + }, + { + "stringValue": "st_JSX" + }, + { + "stringValue": "st_JU" + }, + { + "stringValue": "st_KAP" + }, + { + "stringValue": "st_KLM" + }, + { + "stringValue": "st_KMM" + }, + { + "stringValue": "st_KNE" + }, + { + "stringValue": "st_KQA" + }, + { + "stringValue": "st_KZR" + }, + { + "stringValue": "st_LAN" + }, + { + "stringValue": "st_LGL" + }, + { + "stringValue": "st_LOG" + }, + { + "stringValue": "st_LOT" + }, + { + "stringValue": "st_LPE" + }, + { + "stringValue": "st_MEA" + }, + { + "stringValue": "st_MHV" + }, + { + "stringValue": "st_MMD" + }, + { + "stringValue": "st_MXY" + }, + { + "stringValue": "st_NDA" + }, + { + "stringValue": "st_NGN" + }, + { + "stringValue": "st_NKS" + }, + { + "stringValue": "st_OAW" + }, + { + "stringValue": "st_OMA" + }, + { + "stringValue": "st_OMS" + }, + { + "stringValue": "st_PCO" + }, + { + "stringValue": "st_POE" + }, + { + "stringValue": "st_QFA" + }, + { + "stringValue": "st_QTR" + }, + { + "stringValue": "st_RAM" + }, + { + "stringValue": "st_REU" + }, + { + "stringValue": "st_RJA" + }, + { + "stringValue": "st_RXA" + }, + { + "stringValue": "st_RZO" + }, + { + "stringValue": "st_SAA" + }, + { + "stringValue": "st_SAS" + }, + { + "stringValue": "st_SAT" + }, + { + "stringValue": "st_SCE" + }, + { + "stringValue": "st_SCR" + }, + { + "stringValue": "st_SOL" + }, + { + "stringValue": "st_SWR" + }, + { + "stringValue": "st_SXS" + }, + { + "stringValue": "st_TAP" + }, + { + "stringValue": "st_TCV" + }, + { + "stringValue": "st_THT" + }, + { + "stringValue": "st_TMG_cd" + }, + { + "stringValue": "st_TRA" + }, + { + "stringValue": "st_TUI" + }, + { + "stringValue": "st_TVF" + }, + { + "stringValue": "st_TVS" + }, + { + "stringValue": "st_UAE" + }, + { + "stringValue": "st_UAL" + }, + { + "stringValue": "st_VIR" + }, + { + "stringValue": "st_VLG" + }, + { + "stringValue": "st_VOE" + }, + { + "stringValue": "st_VRE" + }, + { + "stringValue": "st_WIF" + }, + { + "stringValue": "st_WJA" + } + ] + } + }, + "st_CES": { + "arrayValue": { + "values": [ + { + "stringValue": "st_AAL" + }, + { + "stringValue": "st_ACA" + }, + { + "stringValue": "st_AEA" + }, + { + "stringValue": "st_AFR" + }, + { + "stringValue": "st_AMX" + }, + { + "stringValue": "st_ANZ" + }, + { + "stringValue": "st_ARG" + }, + { + "stringValue": "st_ASA" + }, + { + "stringValue": "st_AUA" + }, + { + "stringValue": "st_BAW" + }, + { + "stringValue": "st_CAL" + }, + { + "stringValue": "st_CES" + }, + { + "stringValue": "st_CSA" + }, + { + "stringValue": "st_CXA" + }, + { + "stringValue": "st_DAL" + }, + { + "stringValue": "st_ETD" + }, + { + "stringValue": "st_EVA" + }, + { + "stringValue": "st_FIN" + }, + { + "stringValue": "st_GIA" + }, + { + "stringValue": "st_HAL" + }, + { + "stringValue": "st_HVN" + }, + { + "stringValue": "st_ITY" + }, + { + "stringValue": "st_JJP" + }, + { + "stringValue": "st_JSA" + }, + { + "stringValue": "st_JST" + }, + { + "stringValue": "st_KAL" + }, + { + "stringValue": "st_KLM" + }, + { + "stringValue": "st_KQA" + }, + { + "stringValue": "st_LOT" + }, + { + "stringValue": "st_MEA" + }, + { + "stringValue": "st_NKS" + }, + { + "stringValue": "st_QFA" + }, + { + "stringValue": "st_RBA" + }, + { + "stringValue": "st_SAS" + }, + { + "stringValue": "st_SWA" + }, + { + "stringValue": "st_SWR" + }, + { + "stringValue": "st_THY" + }, + { + "stringValue": "st_UAL" + }, + { + "stringValue": "st_VIR" + }, + { + "stringValue": "st_VOZ" + }, + { + "stringValue": "st_VTA" + }, + { + "stringValue": "st_WJA" + } + ] + } + }, + "st_TWB": { + "arrayValue": { + "values": [ + { + "stringValue": "st_UAL" + } + ] + } + }, + "st_CFS": { + "arrayValue": { + "values": [ + { + "stringValue": "st_AAL" + }, + { + "stringValue": "st_ASA" + }, + { + "stringValue": "st_DAL" + }, + { + "stringValue": "st_HAL" + }, + { + "stringValue": "st_SWA" + }, + { + "stringValue": "st_UAL" + } + ] + } + }, + "st_POE": { + "arrayValue": { + "values": [ + { + "stringValue": "st_0N" + }, + { + "stringValue": "st_4T" + }, + { + "stringValue": "st_AAL" + }, + { + "stringValue": "st_AAY" + }, + { + "stringValue": "st_ACA" + }, + { + "stringValue": "st_AEA" + }, + { + "stringValue": "st_AFR" + }, + { + "stringValue": "st_AIE" + }, + { + "stringValue": "st_AKT" + }, + { + "stringValue": "st_AMX" + }, + { + "stringValue": "st_ANT" + }, + { + "stringValue": "st_ANZ" + }, + { + "stringValue": "st_ASA" + }, + { + "stringValue": "st_AUA" + }, + { + "stringValue": "st_AVA" + }, + { + "stringValue": "st_AZU" + }, + { + "stringValue": "st_BAW" + }, + { + "stringValue": "st_BCY" + }, + { + "stringValue": "st_BLA" + }, + { + "stringValue": "st_BLS" + }, + { + "stringValue": "st_BTI" + }, + { + "stringValue": "st_BWA" + }, + { + "stringValue": "st_CAL" + }, + { + "stringValue": "st_CAV" + }, + { + "stringValue": "st_CAY" + }, + { + "stringValue": "st_CFG" + }, + { + "stringValue": "st_CJT" + }, + { + "stringValue": "st_CPA" + }, + { + "stringValue": "st_CRK" + }, + { + "stringValue": "st_CRQ" + }, + { + "stringValue": "st_DAL" + }, + { + "stringValue": "st_DJT" + }, + { + "stringValue": "st_DLH" + }, + { + "stringValue": "st_ELY" + }, + { + "stringValue": "st_ETD" + }, + { + "stringValue": "st_EVA" + }, + { + "stringValue": "st_FDB" + }, + { + "stringValue": "st_FDX" + }, + { + "stringValue": "st_FFT" + }, + { + "stringValue": "st_FLE" + }, + { + "stringValue": "st_GLO" + }, + { + "stringValue": "st_GLR" + }, + { + "stringValue": "st_GPD" + }, + { + "stringValue": "st_HAL" + }, + { + "stringValue": "st_ICE" + }, + { + "stringValue": "st_IGO" + }, + { + "stringValue": "st_ISR" + }, + { + "stringValue": "st_J5" + }, + { + "stringValue": "st_JBU" + }, + { + "stringValue": "st_JZA" + }, + { + "stringValue": "st_JZR" + }, + { + "stringValue": "st_KAP" + }, + { + "stringValue": "st_LAN" + }, + { + "stringValue": "st_LIA" + }, + { + "stringValue": "st_LOG" + }, + { + "stringValue": "st_LOT" + }, + { + "stringValue": "st_NKS" + }, + { + "stringValue": "st_NLA" + }, + { + "stringValue": "st_OAW" + }, + { + "stringValue": "st_PAG" + }, + { + "stringValue": "st_PAL" + }, + { + "stringValue": "st_PCO" + }, + { + "stringValue": "st_PIA" + }, + { + "stringValue": "st_POE" + }, + { + "stringValue": "st_POE_2025" + }, + { + "stringValue": "st_PVL" + }, + { + "stringValue": "st_QFA" + }, + { + "stringValue": "st_QTR" + }, + { + "stringValue": "st_RAM" + }, + { + "stringValue": "st_RBA" + }, + { + "stringValue": "st_SAS" + }, + { + "stringValue": "st_SAT" + }, + { + "stringValue": "st_SJX" + }, + { + "stringValue": "st_SVA" + }, + { + "stringValue": "st_SWA" + }, + { + "stringValue": "st_SWR" + }, + { + "stringValue": "st_TAP" + }, + { + "stringValue": "st_TIN" + }, + { + "stringValue": "st_TPC" + }, + { + "stringValue": "st_TRA" + }, + { + "stringValue": "st_TSC" + }, + { + "stringValue": "st_TUI" + }, + { + "stringValue": "st_TYA" + }, + { + "stringValue": "st_UAE" + }, + { + "stringValue": "st_UAL" + }, + { + "stringValue": "st_VIR" + }, + { + "stringValue": "st_WEN" + }, + { + "stringValue": "st_WJA" + }, + { + "stringValue": "st_WSG" + }, + { + "stringValue": "st_YB" + } + ] + } + }, + "st_AVA": { + "arrayValue": { + "values": [ + { + "stringValue": "st_AAL" + }, + { + "stringValue": "st_AAY" + }, + { + "stringValue": "st_ACA" + }, + { + "stringValue": "st_AEA" + }, + { + "stringValue": "st_AFR" + }, + { + "stringValue": "st_AMX" + }, + { + "stringValue": "st_ANA" + }, + { + "stringValue": "st_ARG" + }, + { + "stringValue": "st_ASA" + }, + { + "stringValue": "st_AUA" + }, + { + "stringValue": "st_AVA" + }, + { + "stringValue": "st_AVA" + }, + { + "stringValue": "st_AZU" + }, + { + "stringValue": "st_BAW" + }, + { + "stringValue": "st_BEL" + }, + { + "stringValue": "st_CMP" + }, + { + "stringValue": "st_CPA" + }, + { + "stringValue": "st_DAL" + }, + { + "stringValue": "st_DLH" + }, + { + "stringValue": "st_ETD" + }, + { + "stringValue": "st_EVA" + }, + { + "stringValue": "st_EWE" + }, + { + "stringValue": "st_EWG" + }, + { + "stringValue": "st_FFT" + }, + { + "stringValue": "st_FIN" + }, + { + "stringValue": "st_GLO" + }, + { + "stringValue": "st_HAL" + }, + { + "stringValue": "st_IBB" + }, + { + "stringValue": "st_IBE" + }, + { + "stringValue": "st_ICE" + }, + { + "stringValue": "st_ITY" + }, + { + "stringValue": "st_JBU" + }, + { + "stringValue": "st_JST" + }, + { + "stringValue": "st_JZA" + }, + { + "stringValue": "st_LAN" + }, + { + "stringValue": "st_LOT" + }, + { + "stringValue": "st_MXY" + }, + { + "stringValue": "st_NKS" + }, + { + "stringValue": "st_NOZ" + }, + { + "stringValue": "st_OCN" + }, + { + "stringValue": "st_POE" + }, + { + "stringValue": "st_QFA" + }, + { + "stringValue": "st_QTR" + }, + { + "stringValue": "st_SAS" + }, + { + "stringValue": "st_SKU" + }, + { + "stringValue": "st_SKW" + }, + { + "stringValue": "st_SWA" + }, + { + "stringValue": "st_SWR" + }, + { + "stringValue": "st_TAP" + }, + { + "stringValue": "st_THY" + }, + { + "stringValue": "st_TSC" + }, + { + "stringValue": "st_UAE" + }, + { + "stringValue": "st_UAL" + }, + { + "stringValue": "st_VIR" + }, + { + "stringValue": "st_VLG" + }, + { + "stringValue": "st_VOE" + }, + { + "stringValue": "st_WJA" + } + ] + } + }, + "st_VJT": { + "arrayValue": { + "values": [ + { + "stringValue": "st_DAL" + }, + { + "stringValue": "st_DLH" + }, + { + "stringValue": "st_LAN" + }, + { + "stringValue": "st_QFA" + }, + { + "stringValue": "st_SWA" + }, + { + "stringValue": "st_SWR" + }, + { + "stringValue": "st_UAE" + }, + { + "stringValue": "st_UAL" + } + ] + } + }, + "st_OMA": { + "arrayValue": { + "values": [ + { + "stringValue": "st_AAL" + }, + { + "stringValue": "st_ACA" + }, + { + "stringValue": "st_BAW" + }, + { + "stringValue": "st_BEL" + }, + { + "stringValue": "st_CFG" + }, + { + "stringValue": "st_CLX" + }, + { + "stringValue": "st_CPA" + }, + { + "stringValue": "st_DLH" + }, + { + "stringValue": "st_ETD" + }, + { + "stringValue": "st_EVA" + }, + { + "stringValue": "st_EWG" + }, + { + "stringValue": "st_FDB" + }, + { + "stringValue": "st_JAL" + }, + { + "stringValue": "st_KLM" + }, + { + "stringValue": "st_LGL" + }, + { + "stringValue": "st_LOT" + }, + { + "stringValue": "st_OCN" + }, + { + "stringValue": "st_QFA" + }, + { + "stringValue": "st_QTR" + }, + { + "stringValue": "st_SAS" + }, + { + "stringValue": "st_SVA" + }, + { + "stringValue": "st_SWR" + }, + { + "stringValue": "st_THA" + }, + { + "stringValue": "st_THY" + }, + { + "stringValue": "st_UAE" + }, + { + "stringValue": "st_UAL" + }, + { + "stringValue": "st_VLG" + }, + { + "stringValue": "st_WJA" + } + ] + } + }, + "st_GLR": { + "arrayValue": { + "values": [ + { + "stringValue": "st_ACA" + }, + { + "stringValue": "st_POE" + }, + { + "stringValue": "st_UAL" + }, + { + "stringValue": "st_WJA" + } + ] + } + }, + "st_SAA": { + "arrayValue": { + "values": [ + { + "stringValue": "st_AAL" + }, + { + "stringValue": "st_BAW" + }, + { + "stringValue": "st_CFG" + }, + { + "stringValue": "st_CPA" + }, + { + "stringValue": "st_DAL" + }, + { + "stringValue": "st_DLH" + }, + { + "stringValue": "st_QFA" + }, + { + "stringValue": "st_QTR" + }, + { + "stringValue": "st_SWA" + }, + { + "stringValue": "st_SWR" + }, + { + "stringValue": "st_THY" + }, + { + "stringValue": "st_UAE" + }, + { + "stringValue": "st_UAL" + }, + { + "stringValue": "st_VIR" + }, + { + "stringValue": "st_VOZ" + } + ] + } + }, + "st_ADY": { + "arrayValue": { + "values": [ + { + "stringValue": "st_ETD" + } + ] + } + }, + "st_BRX": { + "arrayValue": { + "values": [ + { + "stringValue": "st_SAS" + } + ] + } + }, + "st_ASH": { + "arrayValue": { + "values": [ + { + "stringValue": "st_AAL" + }, + { + "stringValue": "st_ACA" + }, + { + "stringValue": "st_ANA" + }, + { + "stringValue": "st_ASA" + }, + { + "stringValue": "st_BAW" + }, + { + "stringValue": "st_CPA" + }, + { + "stringValue": "st_DAL" + }, + { + "stringValue": "st_DLH" + }, + { + "stringValue": "st_EVA" + }, + { + "stringValue": "st_FFT" + }, + { + "stringValue": "st_JBU" + }, + { + "stringValue": "st_NKS" + }, + { + "stringValue": "st_QFA" + }, + { + "stringValue": "st_SWA" + }, + { + "stringValue": "st_UAL" + } + ] + } + }, + "st_KQA": { + "arrayValue": { + "values": [ + { + "stringValue": "st_AAL" + }, + { + "stringValue": "st_ACA" + }, + { + "stringValue": "st_BAW" + }, + { + "stringValue": "st_DAL" + }, + { + "stringValue": "st_DLH" + }, + { + "stringValue": "st_JBU" + }, + { + "stringValue": "st_SWA" + }, + { + "stringValue": "st_UAL" + } + ] + } + }, + "st_POE_2025": { + "arrayValue": { + "values": [ + { + "stringValue": "st_AAL" + }, + { + "stringValue": "st_ACA" + }, + { + "stringValue": "st_AFR" + }, + { + "stringValue": "st_BAW" + }, + { + "stringValue": "st_CAL" + }, + { + "stringValue": "st_CPA" + }, + { + "stringValue": "st_DAL" + }, + { + "stringValue": "st_EVA" + }, + { + "stringValue": "st_POE" + }, + { + "stringValue": "st_TAP" + }, + { + "stringValue": "st_TSC" + }, + { + "stringValue": "st_UAL" + }, + { + "stringValue": "st_WJA" + } + ] + } + }, + "st_CS": { + "arrayValue": { + "values": [ + { + "stringValue": "st_AUA" + }, + { + "stringValue": "st_SWR" + } + ] + } + }, + "st_WSG": { + "arrayValue": { + "values": [ + { + "stringValue": "st_ACA" + }, + { + "stringValue": "st_POE" + } + ] + } + }, + "st_PAL": { + "arrayValue": { + "values": [ + { + "stringValue": "st_AAL" + }, + { + "stringValue": "st_ACA" + }, + { + "stringValue": "st_AFR" + }, + { + "stringValue": "st_ANA" + }, + { + "stringValue": "st_ASA" + }, + { + "stringValue": "st_AUA" + }, + { + "stringValue": "st_BAW" + }, + { + "stringValue": "st_CAL" + }, + { + "stringValue": "st_CPA" + }, + { + "stringValue": "st_DAL" + }, + { + "stringValue": "st_DLH" + }, + { + "stringValue": "st_ENY" + }, + { + "stringValue": "st_EVA" + }, + { + "stringValue": "st_HAL" + }, + { + "stringValue": "st_IBE" + }, + { + "stringValue": "st_JBU" + }, + { + "stringValue": "st_JST" + }, + { + "stringValue": "st_KAL" + }, + { + "stringValue": "st_POE" + }, + { + "stringValue": "st_QFA" + }, + { + "stringValue": "st_QTR" + }, + { + "stringValue": "st_QXE" + }, + { + "stringValue": "st_SJX" + }, + { + "stringValue": "st_SVA" + }, + { + "stringValue": "st_SWA" + }, + { + "stringValue": "st_SWR" + }, + { + "stringValue": "st_UAL" + }, + { + "stringValue": "st_VOZ" + }, + { + "stringValue": "st_WJA" + } + ] + } + }, + "st_FIN": { + "arrayValue": { + "values": [ + { + "stringValue": "st_AAL" + }, + { + "stringValue": "st_AAR" + }, + { + "stringValue": "st_AAY" + }, + { + "stringValue": "st_ABY" + }, + { + "stringValue": "st_ACA" + }, + { + "stringValue": "st_ACI" + }, + { + "stringValue": "st_AEA" + }, + { + "stringValue": "st_AEE" + }, + { + "stringValue": "st_AFR" + }, + { + "stringValue": "st_AIC" + }, + { + "stringValue": "st_AIE" + }, + { + "stringValue": "st_AIZ" + }, + { + "stringValue": "st_AKT" + }, + { + "stringValue": "st_ALK" + }, + { + "stringValue": "st_AMX" + }, + { + "stringValue": "st_ANA" + }, + { + "stringValue": "st_ANT" + }, + { + "stringValue": "st_ANZ" + }, + { + "stringValue": "st_ARG" + }, + { + "stringValue": "st_ASA" + }, + { + "stringValue": "st_ASH" + }, + { + "stringValue": "st_ASL" + }, + { + "stringValue": "st_AUA" + }, + { + "stringValue": "st_AVA" + }, + { + "stringValue": "st_AZU" + }, + { + "stringValue": "st_BAW" + }, + { + "stringValue": "st_BCY" + }, + { + "stringValue": "st_BEL" + }, + { + "stringValue": "st_BKP" + }, + { + "stringValue": "st_BTI" + }, + { + "stringValue": "st_BTQ" + }, + { + "stringValue": "st_BWA" + }, + { + "stringValue": "st_CAI" + }, + { + "stringValue": "st_CAL" + }, + { + "stringValue": "st_CAY" + }, + { + "stringValue": "st_CCM" + }, + { + "stringValue": "st_CES" + }, + { + "stringValue": "st_CFG" + }, + { + "stringValue": "st_CLX" + }, + { + "stringValue": "st_CMP" + }, + { + "stringValue": "st_CNO" + }, + { + "stringValue": "st_CPA" + }, + { + "stringValue": "st_CRK" + }, + { + "stringValue": "st_CRL" + }, + { + "stringValue": "st_CS" + }, + { + "stringValue": "st_CTN" + }, + { + "stringValue": "st_DAL" + }, + { + "stringValue": "st_DJT" + }, + { + "stringValue": "st_DLA" + }, + { + "stringValue": "st_DLH" + }, + { + "stringValue": "st_DNU" + }, + { + "stringValue": "st_DTR" + }, + { + "stringValue": "st_ECO" + }, + { + "stringValue": "st_EDW" + }, + { + "stringValue": "st_EIN" + }, + { + "stringValue": "st_ELY" + }, + { + "stringValue": "st_ENY" + }, + { + "stringValue": "st_EST" + }, + { + "stringValue": "st_ETD" + }, + { + "stringValue": "st_ETH" + }, + { + "stringValue": "st_EVA" + }, + { + "stringValue": "st_EWE" + }, + { + "stringValue": "st_EWG" + }, + { + "stringValue": "st_EZY" + }, + { + "stringValue": "st_FBU" + }, + { + "stringValue": "st_FC" + }, + { + "stringValue": "st_FDB" + }, + { + "stringValue": "st_FDY" + }, + { + "stringValue": "st_FFT" + }, + { + "stringValue": "st_FIN" + }, + { + "stringValue": "st_FJE" + }, + { + "stringValue": "st_FJI" + }, + { + "stringValue": "st_FLE" + }, + { + "stringValue": "st_FLI" + }, + { + "stringValue": "st_FPO" + }, + { + "stringValue": "st_FWI" + }, + { + "stringValue": "st_GFA" + }, + { + "stringValue": "st_GIA" + }, + { + "stringValue": "st_GLO" + }, + { + "stringValue": "st_GLR" + }, + { + "stringValue": "st_GPD" + }, + { + "stringValue": "st_GRL" + }, + { + "stringValue": "st_GZ" + }, + { + "stringValue": "st_HAL" + }, + { + "stringValue": "st_HKE" + }, + { + "stringValue": "st_HVN" + }, + { + "stringValue": "st_IBB" + }, + { + "stringValue": "st_IBE" + }, + { + "stringValue": "st_ICE" + }, + { + "stringValue": "st_IGO" + }, + { + "stringValue": "st_ISR" + }, + { + "stringValue": "st_ITY" + }, + { + "stringValue": "st_IYE" + }, + { + "stringValue": "st_JAL" + }, + { + "stringValue": "st_JBU" + }, + { + "stringValue": "st_JJP" + }, + { + "stringValue": "st_JSA" + }, + { + "stringValue": "st_JST" + }, + { + "stringValue": "st_JZR" + }, + { + "stringValue": "st_KAC" + }, + { + "stringValue": "st_KAL" + }, + { + "stringValue": "st_KAP" + }, + { + "stringValue": "st_KLM" + }, + { + "stringValue": "st_KMM" + }, + { + "stringValue": "st_KNE" + }, + { + "stringValue": "st_KQA" + }, + { + "stringValue": "st_KZR" + }, + { + "stringValue": "st_LAN" + }, + { + "stringValue": "st_LGL" + }, + { + "stringValue": "st_LOG" + }, + { + "stringValue": "st_LOT" + }, + { + "stringValue": "st_MAS" + }, + { + "stringValue": "st_MBU" + }, + { + "stringValue": "st_MDA" + }, + { + "stringValue": "st_MEA" + }, + { + "stringValue": "st_MGL" + }, + { + "stringValue": "st_MMD" + }, + { + "stringValue": "st_MSR" + }, + { + "stringValue": "st_MXY" + }, + { + "stringValue": "st_NBT" + }, + { + "stringValue": "st_NKS" + }, + { + "stringValue": "st_NOZ" + }, + { + "stringValue": "st_NSZ" + }, + { + "stringValue": "st_OAL" + }, + { + "stringValue": "st_OAW" + }, + { + "stringValue": "st_OCN" + }, + { + "stringValue": "st_OMA" + }, + { + "stringValue": "st_PGT" + }, + { + "stringValue": "st_PIA" + }, + { + "stringValue": "st_POE" + }, + { + "stringValue": "st_QFA" + }, + { + "stringValue": "st_QTR" + }, + { + "stringValue": "st_RAM" + }, + { + "stringValue": "st_REU" + }, + { + "stringValue": "st_RJA" + }, + { + "stringValue": "st_RPB" + }, + { + "stringValue": "st_RYR" + }, + { + "stringValue": "st_RZO" + }, + { + "stringValue": "st_SAA" + }, + { + "stringValue": "st_SAS" + }, + { + "stringValue": "st_SEY" + }, + { + "stringValue": "st_SIA" + }, + { + "stringValue": "st_SJX" + }, + { + "stringValue": "st_SKW" + }, + { + "stringValue": "st_SOL" + }, + { + "stringValue": "st_SRY" + }, + { + "stringValue": "st_SVA" + }, + { + "stringValue": "st_SWA" + }, + { + "stringValue": "st_SWR" + }, + { + "stringValue": "st_SXS" + }, + { + "stringValue": "st_SZS" + }, + { + "stringValue": "st_TAP" + }, + { + "stringValue": "st_TCV" + }, + { + "stringValue": "st_THA" + }, + { + "stringValue": "st_THT" + }, + { + "stringValue": "st_THY" + }, + { + "stringValue": "st_TIN" + }, + { + "stringValue": "st_TPC" + }, + { + "stringValue": "st_TRA" + }, + { + "stringValue": "st_TSC" + }, + { + "stringValue": "st_TTW" + }, + { + "stringValue": "st_TUI" + }, + { + "stringValue": "st_TVF" + }, + { + "stringValue": "st_TVS" + }, + { + "stringValue": "st_UAE" + }, + { + "stringValue": "st_UAL" + }, + { + "stringValue": "st_UIA" + }, + { + "stringValue": "st_VIR" + }, + { + "stringValue": "st_VIV" + }, + { + "stringValue": "st_VJH" + }, + { + "stringValue": "st_VLG" + }, + { + "stringValue": "st_VOZ" + }, + { + "stringValue": "st_VRE" + }, + { + "stringValue": "st_VTA" + }, + { + "stringValue": "st_WIA" + }, + { + "stringValue": "st_WIF" + }, + { + "stringValue": "st_WJA" + }, + { + "stringValue": "st_WSG" + }, + { + "stringValue": "st_YB" + } + ] + } + }, + "st_THY": { + "arrayValue": { + "values": [ + { + "stringValue": "st_AAL" + }, + { + "stringValue": "st_AAR" + }, + { + "stringValue": "st_ACA" + }, + { + "stringValue": "st_AEA" + }, + { + "stringValue": "st_AEE" + }, + { + "stringValue": "st_AFR" + }, + { + "stringValue": "st_ANA" + }, + { + "stringValue": "st_ANZ" + }, + { + "stringValue": "st_ARG" + }, + { + "stringValue": "st_ASA" + }, + { + "stringValue": "st_AUA" + }, + { + "stringValue": "st_AVA" + }, + { + "stringValue": "st_AZU" + }, + { + "stringValue": "st_BAW" + }, + { + "stringValue": "st_BEL" + }, + { + "stringValue": "st_BKP" + }, + { + "stringValue": "st_BTI" + }, + { + "stringValue": "st_CAL" + }, + { + "stringValue": "st_CES" + }, + { + "stringValue": "st_CFG" + }, + { + "stringValue": "st_CMP" + }, + { + "stringValue": "st_CPA" + }, + { + "stringValue": "st_CRK" + }, + { + "stringValue": "st_CTN" + }, + { + "stringValue": "st_DAL" + }, + { + "stringValue": "st_DLA" + }, + { + "stringValue": "st_DLH" + }, + { + "stringValue": "st_EDW" + }, + { + "stringValue": "st_EIN" + }, + { + "stringValue": "st_ENY" + }, + { + "stringValue": "st_ETD" + }, + { + "stringValue": "st_EVA" + }, + { + "stringValue": "st_EWE" + }, + { + "stringValue": "st_EWG" + }, + { + "stringValue": "st_FCM" + }, + { + "stringValue": "st_FDB" + }, + { + "stringValue": "st_FIN" + }, + { + "stringValue": "st_FPO" + }, + { + "stringValue": "st_GLO" + }, + { + "stringValue": "st_HAL" + }, + { + "stringValue": "st_HVN" + }, + { + "stringValue": "st_IBE" + }, + { + "stringValue": "st_ICE" + }, + { + "stringValue": "st_IGO" + }, + { + "stringValue": "st_ITY" + }, + { + "stringValue": "st_JAL" + }, + { + "stringValue": "st_JBU" + }, + { + "stringValue": "st_JJP" + }, + { + "stringValue": "st_JST" + }, + { + "stringValue": "st_JZA" + }, + { + "stringValue": "st_KAC" + }, + { + "stringValue": "st_KAL" + }, + { + "stringValue": "st_KLM" + }, + { + "stringValue": "st_KMM" + }, + { + "stringValue": "st_KZR" + }, + { + "stringValue": "st_LAN" + }, + { + "stringValue": "st_LGL" + }, + { + "stringValue": "st_LOT" + }, + { + "stringValue": "st_NKS" + }, + { + "stringValue": "st_OMA" + }, + { + "stringValue": "st_PDT" + }, + { + "stringValue": "st_PIA" + }, + { + "stringValue": "st_QFA" + }, + { + "stringValue": "st_QTR" + }, + { + "stringValue": "st_RAM" + }, + { + "stringValue": "st_SAA" + }, + { + "stringValue": "st_SAS" + }, + { + "stringValue": "st_SKU" + }, + { + "stringValue": "st_SVA" + }, + { + "stringValue": "st_SWA" + }, + { + "stringValue": "st_SWR" + }, + { + "stringValue": "st_SXS" + }, + { + "stringValue": "st_TAP" + }, + { + "stringValue": "st_THA" + }, + { + "stringValue": "st_THY" + }, + { + "stringValue": "st_THY" + }, + { + "stringValue": "st_TRA" + }, + { + "stringValue": "st_TSC" + }, + { + "stringValue": "st_TVF" + }, + { + "stringValue": "st_UAE" + }, + { + "stringValue": "st_UAL" + }, + { + "stringValue": "st_VIR" + }, + { + "stringValue": "st_VLG" + }, + { + "stringValue": "st_VOE" + }, + { + "stringValue": "st_WIF" + }, + { + "stringValue": "st_WJA" + } + ] + } + }, + "st_JNA": { + "arrayValue": { + "values": [ + { + "stringValue": "st_AAR" + }, + { + "stringValue": "st_ABL" + }, + { + "stringValue": "st_DAL" + }, + { + "stringValue": "st_KAL" + } + ] + } + }, + "st_IBE": { + "arrayValue": { + "values": [ + { + "stringValue": "st_AAL" + }, + { + "stringValue": "st_AAR" + }, + { + "stringValue": "st_AAY" + }, + { + "stringValue": "st_ACA" + }, + { + "stringValue": "st_AEA" + }, + { + "stringValue": "st_AEE" + }, + { + "stringValue": "st_AFR" + }, + { + "stringValue": "st_AIC" + }, + { + "stringValue": "st_ALK" + }, + { + "stringValue": "st_AMX" + }, + { + "stringValue": "st_ANA" + }, + { + "stringValue": "st_ANE" + }, + { + "stringValue": "st_ANZ" + }, + { + "stringValue": "st_ARG" + }, + { + "stringValue": "st_ASA" + }, + { + "stringValue": "st_AUA" + }, + { + "stringValue": "st_AVA" + }, + { + "stringValue": "st_AZU" + }, + { + "stringValue": "st_BAW" + }, + { + "stringValue": "st_BCY" + }, + { + "stringValue": "st_BEL" + }, + { + "stringValue": "st_BTI" + }, + { + "stringValue": "st_CAL" + }, + { + "stringValue": "st_CFG" + }, + { + "stringValue": "st_CMP" + }, + { + "stringValue": "st_CPA" + }, + { + "stringValue": "st_CRK" + }, + { + "stringValue": "st_DAL" + }, + { + "stringValue": "st_DLA" + }, + { + "stringValue": "st_DLH" + }, + { + "stringValue": "st_EDV" + }, + { + "stringValue": "st_EDW" + }, + { + "stringValue": "st_EIN" + }, + { + "stringValue": "st_ENY" + }, + { + "stringValue": "st_ETD" + }, + { + "stringValue": "st_ETH" + }, + { + "stringValue": "st_EVA" + }, + { + "stringValue": "st_EWE" + }, + { + "stringValue": "st_EWG" + }, + { + "stringValue": "st_EZY" + }, + { + "stringValue": "st_FCM" + }, + { + "stringValue": "st_FDB" + }, + { + "stringValue": "st_FIN" + }, + { + "stringValue": "st_FWI" + }, + { + "stringValue": "st_GLO" + }, + { + "stringValue": "st_HAL" + }, + { + "stringValue": "st_HKE" + }, + { + "stringValue": "st_IBB" + }, + { + "stringValue": "st_IBE" + }, + { + "stringValue": "st_IBE" + }, + { + "stringValue": "st_ICE" + }, + { + "stringValue": "st_ITY" + }, + { + "stringValue": "st_JAL" + }, + { + "stringValue": "st_JBU" + }, + { + "stringValue": "st_JIA" + }, + { + "stringValue": "st_JST" + }, + { + "stringValue": "st_KAL" + }, + { + "stringValue": "st_KAP" + }, + { + "stringValue": "st_KLM" + }, + { + "stringValue": "st_LAN" + }, + { + "stringValue": "st_LGL" + }, + { + "stringValue": "st_LOT" + }, + { + "stringValue": "st_MAS" + }, + { + "stringValue": "st_MSR" + }, + { + "stringValue": "st_MXY" + }, + { + "stringValue": "st_NKS" + }, + { + "stringValue": "st_NOZ" + }, + { + "stringValue": "st_OAW" + }, + { + "stringValue": "st_OCN" + }, + { + "stringValue": "st_PAL" + }, + { + "stringValue": "st_QFA" + }, + { + "stringValue": "st_QTR" + }, + { + "stringValue": "st_RPA" + }, + { + "stringValue": "st_RPB" + }, + { + "stringValue": "st_RYR" + }, + { + "stringValue": "st_RZO" + }, + { + "stringValue": "st_SAS" + }, + { + "stringValue": "st_SKU" + }, + { + "stringValue": "st_SKW" + }, + { + "stringValue": "st_SVA" + }, + { + "stringValue": "st_SWA" + }, + { + "stringValue": "st_SWR" + }, + { + "stringValue": "st_TAP" + }, + { + "stringValue": "st_THY" + }, + { + "stringValue": "st_TRA" + }, + { + "stringValue": "st_TSC" + }, + { + "stringValue": "st_TVF" + }, + { + "stringValue": "st_TVS" + }, + { + "stringValue": "st_UAE" + }, + { + "stringValue": "st_UAL" + }, + { + "stringValue": "st_VIR" + }, + { + "stringValue": "st_VIV" + }, + { + "stringValue": "st_VLG" + }, + { + "stringValue": "st_VOE" + }, + { + "stringValue": "st_VOZ" + }, + { + "stringValue": "st_WIF" + }, + { + "stringValue": "st_XBO" + } + ] + } + }, + "st_WGN": { + "arrayValue": { + "values": [ + { + "stringValue": "st_SWA" + }, + { + "stringValue": "st_UAL" + } + ] + } + }, + "st_AKT": { + "arrayValue": { + "values": [ + { + "stringValue": "st_4T" + }, + { + "stringValue": "st_AAY" + }, + { + "stringValue": "st_ACA" + }, + { + "stringValue": "st_ACO" + }, + { + "stringValue": "st_AEA" + }, + { + "stringValue": "st_AEE" + }, + { + "stringValue": "st_AFR" + }, + { + "stringValue": "st_AIE" + }, + { + "stringValue": "st_AIZ" + }, + { + "stringValue": "st_AKT" + }, + { + "stringValue": "st_AMX" + }, + { + "stringValue": "st_ANT" + }, + { + "stringValue": "st_ARG" + }, + { + "stringValue": "st_ASA" + }, + { + "stringValue": "st_ASH" + }, + { + "stringValue": "st_AUA" + }, + { + "stringValue": "st_AVA" + }, + { + "stringValue": "st_AZU" + }, + { + "stringValue": "st_BAW" + }, + { + "stringValue": "st_BCY" + }, + { + "stringValue": "st_BEE" + }, + { + "stringValue": "st_BEL" + }, + { + "stringValue": "st_BHS" + }, + { + "stringValue": "st_BLA" + }, + { + "stringValue": "st_BLS" + }, + { + "stringValue": "st_BRX" + }, + { + "stringValue": "st_BTI" + }, + { + "stringValue": "st_BWA" + }, + { + "stringValue": "st_CAV" + }, + { + "stringValue": "st_CAY" + }, + { + "stringValue": "st_CCM" + }, + { + "stringValue": "st_CFG" + }, + { + "stringValue": "st_CJL" + }, + { + "stringValue": "st_CLH" + }, + { + "stringValue": "st_CMP" + }, + { + "stringValue": "st_CPA" + }, + { + "stringValue": "st_CRK" + }, + { + "stringValue": "st_CRL" + }, + { + "stringValue": "st_CRQ" + }, + { + "stringValue": "st_CS" + }, + { + "stringValue": "st_CSA" + }, + { + "stringValue": "st_CTN" + }, + { + "stringValue": "st_DAL" + }, + { + "stringValue": "st_DLA" + }, + { + "stringValue": "st_DLH" + }, + { + "stringValue": "st_EDW" + }, + { + "stringValue": "st_ELY" + }, + { + "stringValue": "st_EST" + }, + { + "stringValue": "st_ETD" + }, + { + "stringValue": "st_EWG" + }, + { + "stringValue": "st_FDB" + }, + { + "stringValue": "st_FDY" + }, + { + "stringValue": "st_FFT" + }, + { + "stringValue": "st_FIN" + }, + { + "stringValue": "st_FJI" + }, + { + "stringValue": "st_FLE" + }, + { + "stringValue": "st_FPO" + }, + { + "stringValue": "st_FVJ" + }, + { + "stringValue": "st_FWI" + }, + { + "stringValue": "st_GCL" + }, + { + "stringValue": "st_GLG" + }, + { + "stringValue": "st_GLO" + }, + { + "stringValue": "st_GLR" + }, + { + "stringValue": "st_GPD" + }, + { + "stringValue": "st_GRL" + }, + { + "stringValue": "st_GWI" + }, + { + "stringValue": "st_GZ" + }, + { + "stringValue": "st_HAL" + }, + { + "stringValue": "st_HI" + }, + { + "stringValue": "st_HKE" + }, + { + "stringValue": "st_IBE" + }, + { + "stringValue": "st_IGO" + }, + { + "stringValue": "st_ISR" + }, + { + "stringValue": "st_ITY" + }, + { + "stringValue": "st_IYE" + }, + { + "stringValue": "st_JBU" + }, + { + "stringValue": "st_JJP" + }, + { + "stringValue": "st_JSA" + }, + { + "stringValue": "st_JST" + }, + { + "stringValue": "st_KAC" + }, + { + "stringValue": "st_KAP" + }, + { + "stringValue": "st_KLM" + }, + { + "stringValue": "st_KMM" + }, + { + "stringValue": "st_KQA" + }, + { + "stringValue": "st_LGL" + }, + { + "stringValue": "st_LIA" + }, + { + "stringValue": "st_LOG" + }, + { + "stringValue": "st_LOT" + }, + { + "stringValue": "st_LRC" + }, + { + "stringValue": "st_MAU" + }, + { + "stringValue": "st_MEA" + }, + { + "stringValue": "st_MWM" + }, + { + "stringValue": "st_MXY" + }, + { + "stringValue": "st_NKS" + }, + { + "stringValue": "st_NUM" + }, + { + "stringValue": "st_NWL" + }, + { + "stringValue": "st_OAL" + }, + { + "stringValue": "st_OAW" + }, + { + "stringValue": "st_OCN" + }, + { + "stringValue": "st_OMA" + }, + { + "stringValue": "st_PCO" + }, + { + "stringValue": "st_POE" + }, + { + "stringValue": "st_QFA" + }, + { + "stringValue": "st_RBA" + }, + { + "stringValue": "st_RJA" + }, + { + "stringValue": "st_ROT" + }, + { + "stringValue": "st_RVF" + }, + { + "stringValue": "st_RZO" + }, + { + "stringValue": "st_SAA" + }, + { + "stringValue": "st_SAS" + }, + { + "stringValue": "st_SAT" + }, + { + "stringValue": "st_SCE" + }, + { + "stringValue": "st_SCX" + }, + { + "stringValue": "st_SJX" + }, + { + "stringValue": "st_SWA" + }, + { + "stringValue": "st_SWR" + }, + { + "stringValue": "st_SXS" + }, + { + "stringValue": "st_TAI" + }, + { + "stringValue": "st_TIN" + }, + { + "stringValue": "st_TOS" + }, + { + "stringValue": "st_TPU" + }, + { + "stringValue": "st_TRA" + }, + { + "stringValue": "st_TSC" + }, + { + "stringValue": "st_TUI" + }, + { + "stringValue": "st_TVF" + }, + { + "stringValue": "st_UAE" + }, + { + "stringValue": "st_UAL" + }, + { + "stringValue": "st_VIR" + }, + { + "stringValue": "st_VLG" + }, + { + "stringValue": "st_VOE" + }, + { + "stringValue": "st_VOZ" + }, + { + "stringValue": "st_WIA" + }, + { + "stringValue": "st_WIF" + }, + { + "stringValue": "st_WJA" + }, + { + "stringValue": "st_XGO" + }, + { + "stringValue": "st_YB" + } + ] + } + }, + "st_RPB": { + "arrayValue": { + "values": [ + { + "stringValue": "st_AAL" + }, + { + "stringValue": "st_IBE" + }, + { + "stringValue": "st_UAL" + } + ] + } + }, + "st_AMU": { + "arrayValue": { + "values": [ + { + "stringValue": "st_AAR" + }, + { + "stringValue": "st_BKP" + }, + { + "stringValue": "st_CAL" + }, + { + "stringValue": "st_CRK" + }, + { + "stringValue": "st_DLH" + }, + { + "stringValue": "st_EVA" + }, + { + "stringValue": "st_HKE" + }, + { + "stringValue": "st_KAL" + }, + { + "stringValue": "st_SJX" + }, + { + "stringValue": "st_SWR" + } + ] + } + }, + "st_IBB": { + "arrayValue": { + "values": [ + { + "stringValue": "st_AEA" + }, + { + "stringValue": "st_AVA" + }, + { + "stringValue": "st_BAW" + }, + { + "stringValue": "st_BTI" + }, + { + "stringValue": "st_DLH" + }, + { + "stringValue": "st_ETD" + }, + { + "stringValue": "st_EWG" + }, + { + "stringValue": "st_IBE" + }, + { + "stringValue": "st_VLG" + } + ] + } + }, + "st_GJT": { + "arrayValue": { + "values": [ + { + "stringValue": "st_LOT" + } + ] + } + }, + "st_JJP": { + "arrayValue": { + "values": [ + { + "stringValue": "st_AAL" + }, + { + "stringValue": "st_AAR" + }, + { + "stringValue": "st_ACA" + }, + { + "stringValue": "st_ANA" + }, + { + "stringValue": "st_ASA" + }, + { + "stringValue": "st_BAW" + }, + { + "stringValue": "st_CAL" + }, + { + "stringValue": "st_CES" + }, + { + "stringValue": "st_CPA" + }, + { + "stringValue": "st_CRK" + }, + { + "stringValue": "st_DAL" + }, + { + "stringValue": "st_DLH" + }, + { + "stringValue": "st_ETD" + }, + { + "stringValue": "st_EVA" + }, + { + "stringValue": "st_FFT" + }, + { + "stringValue": "st_FIN" + }, + { + "stringValue": "st_HAL" + }, + { + "stringValue": "st_HKE" + }, + { + "stringValue": "st_HVN" + }, + { + "stringValue": "st_JAL" + }, + { + "stringValue": "st_JBU" + }, + { + "stringValue": "st_MDA" + }, + { + "stringValue": "st_PDT" + }, + { + "stringValue": "st_QTR" + }, + { + "stringValue": "st_SJX" + }, + { + "stringValue": "st_SWA" + }, + { + "stringValue": "st_SWR" + }, + { + "stringValue": "st_THY" + }, + { + "stringValue": "st_TTW" + }, + { + "stringValue": "st_UAL" + }, + { + "stringValue": "st_UIA" + }, + { + "stringValue": "st_WJA" + } + ] + } + }, + "st_AMF": { + "arrayValue": { + "values": [ + { + "stringValue": "st_AAL" + }, + { + "stringValue": "st_ASA" + }, + { + "stringValue": "st_DAL" + }, + { + "stringValue": "st_SWA" + }, + { + "stringValue": "st_UAL" + } + ] + } + }, + "st_APF": { + "arrayValue": { + "values": [ + { + "stringValue": "st_SAS" + } + ] + } + }, + "st_AIC": { + "arrayValue": { + "values": [ + { + "stringValue": "st_AAL" + }, + { + "stringValue": "st_ACA" + }, + { + "stringValue": "st_AIC" + }, + { + "stringValue": "st_AIC" + }, + { + "stringValue": "st_ANA" + }, + { + "stringValue": "st_ASA" + }, + { + "stringValue": "st_AUA" + }, + { + "stringValue": "st_BAW" + }, + { + "stringValue": "st_CPA" + }, + { + "stringValue": "st_DAL" + }, + { + "stringValue": "st_DLH" + }, + { + "stringValue": "st_ETD" + }, + { + "stringValue": "st_FDB" + }, + { + "stringValue": "st_IBE" + }, + { + "stringValue": "st_JBU" + }, + { + "stringValue": "st_JST" + }, + { + "stringValue": "st_LOT" + }, + { + "stringValue": "st_QFA" + }, + { + "stringValue": "st_QTR" + }, + { + "stringValue": "st_SWA" + }, + { + "stringValue": "st_SWR" + }, + { + "stringValue": "st_TAP" + }, + { + "stringValue": "st_UAE" + }, + { + "stringValue": "st_UAL" + }, + { + "stringValue": "st_VIR" + } + ] + } + }, + "st_TVF": { + "arrayValue": { + "values": [ + { + "stringValue": "st_AAL" + }, + { + "stringValue": "st_ACA" + }, + { + "stringValue": "st_AFR" + }, + { + "stringValue": "st_BAW" + }, + { + "stringValue": "st_CPA" + }, + { + "stringValue": "st_CRL" + }, + { + "stringValue": "st_DAL" + }, + { + "stringValue": "st_DJT" + }, + { + "stringValue": "st_DLH" + }, + { + "stringValue": "st_FWI" + }, + { + "stringValue": "st_HVN" + }, + { + "stringValue": "st_IBE" + }, + { + "stringValue": "st_JST" + }, + { + "stringValue": "st_QFA" + }, + { + "stringValue": "st_SVA" + }, + { + "stringValue": "st_SWA" + }, + { + "stringValue": "st_SWR" + }, + { + "stringValue": "st_TAP" + }, + { + "stringValue": "st_THY" + }, + { + "stringValue": "st_TSC" + }, + { + "stringValue": "st_UAE" + }, + { + "stringValue": "st_UAL" + }, + { + "stringValue": "st_VLG" + }, + { + "stringValue": "st_VOE" + } + ] + } + }, + "st_JTD": { + "arrayValue": { + "values": [ + { + "stringValue": "st_SAS" + } + ] + } + }, + "st_QFA": { + "arrayValue": { + "values": [ + { + "stringValue": "st_4T" + }, + { + "stringValue": "st_AAL" + }, + { + "stringValue": "st_AAR" + }, + { + "stringValue": "st_AAY" + }, + { + "stringValue": "st_ABY" + }, + { + "stringValue": "st_ACA" + }, + { + "stringValue": "st_ACI" + }, + { + "stringValue": "st_AEA" + }, + { + "stringValue": "st_AEE" + }, + { + "stringValue": "st_AFR" + }, + { + "stringValue": "st_AIC" + }, + { + "stringValue": "st_AIE" + }, + { + "stringValue": "st_AIZ" + }, + { + "stringValue": "st_AKT" + }, + { + "stringValue": "st_ALK" + }, + { + "stringValue": "st_AMX" + }, + { + "stringValue": "st_ANA" + }, + { + "stringValue": "st_ANG" + }, + { + "stringValue": "st_ANO" + }, + { + "stringValue": "st_ANT" + }, + { + "stringValue": "st_ANZ" + }, + { + "stringValue": "st_APZ" + }, + { + "stringValue": "st_ARG" + }, + { + "stringValue": "st_ASA" + }, + { + "stringValue": "st_ASH" + }, + { + "stringValue": "st_ASL" + }, + { + "stringValue": "st_AUA" + }, + { + "stringValue": "st_AVA" + }, + { + "stringValue": "st_AVN" + }, + { + "stringValue": "st_AZU" + }, + { + "stringValue": "st_BAW" + }, + { + "stringValue": "st_BCY" + }, + { + "stringValue": "st_BEL" + }, + { + "stringValue": "st_BKP" + }, + { + "stringValue": "st_BLA" + }, + { + "stringValue": "st_BLS" + }, + { + "stringValue": "st_BOS" + }, + { + "stringValue": "st_BTI" + }, + { + "stringValue": "st_BTQ" + }, + { + "stringValue": "st_BWA" + }, + { + "stringValue": "st_CAI" + }, + { + "stringValue": "st_CAL" + }, + { + "stringValue": "st_CAV" + }, + { + "stringValue": "st_CAY" + }, + { + "stringValue": "st_CCM" + }, + { + "stringValue": "st_CES" + }, + { + "stringValue": "st_CFE" + }, + { + "stringValue": "st_CFG" + }, + { + "stringValue": "st_CKS" + }, + { + "stringValue": "st_CLX" + }, + { + "stringValue": "st_CMP" + }, + { + "stringValue": "st_CPA" + }, + { + "stringValue": "st_CRK" + }, + { + "stringValue": "st_CRL" + }, + { + "stringValue": "st_CSA" + }, + { + "stringValue": "st_CTN" + }, + { + "stringValue": "st_DAL" + }, + { + "stringValue": "st_DJT" + }, + { + "stringValue": "st_DLA" + }, + { + "stringValue": "st_DLH" + }, + { + "stringValue": "st_DTR" + }, + { + "stringValue": "st_EDW" + }, + { + "stringValue": "st_EIN" + }, + { + "stringValue": "st_ELY" + }, + { + "stringValue": "st_ENY" + }, + { + "stringValue": "st_ETD" + }, + { + "stringValue": "st_ETH" + }, + { + "stringValue": "st_EVA" + }, + { + "stringValue": "st_EWG" + }, + { + "stringValue": "st_EXV" + }, + { + "stringValue": "st_FBU" + }, + { + "stringValue": "st_FCM" + }, + { + "stringValue": "st_FDB" + }, + { + "stringValue": "st_FDY" + }, + { + "stringValue": "st_FEG" + }, + { + "stringValue": "st_FFT" + }, + { + "stringValue": "st_FIN" + }, + { + "stringValue": "st_FJI" + }, + { + "stringValue": "st_FLE" + }, + { + "stringValue": "st_FPO" + }, + { + "stringValue": "st_FWI" + }, + { + "stringValue": "st_GFA" + }, + { + "stringValue": "st_GIA" + }, + { + "stringValue": "st_GJS" + }, + { + "stringValue": "st_GLO" + }, + { + "stringValue": "st_GLR" + }, + { + "stringValue": "st_GTI" + }, + { + "stringValue": "st_GZ" + }, + { + "stringValue": "st_HAL" + }, + { + "stringValue": "st_HDA" + }, + { + "stringValue": "st_HKE" + }, + { + "stringValue": "st_HVN" + }, + { + "stringValue": "st_IBE" + }, + { + "stringValue": "st_ICE" + }, + { + "stringValue": "st_IGO" + }, + { + "stringValue": "st_ISR" + }, + { + "stringValue": "st_ITY" + }, + { + "stringValue": "st_JAL" + }, + { + "stringValue": "st_JBU" + }, + { + "stringValue": "st_JIA" + }, + { + "stringValue": "st_JST" + }, + { + "stringValue": "st_JSX" + }, + { + "stringValue": "st_JZA" + }, + { + "stringValue": "st_KAC" + }, + { + "stringValue": "st_KAL" + }, + { + "stringValue": "st_KLM" + }, + { + "stringValue": "st_KMM" + }, + { + "stringValue": "st_KNE" + }, + { + "stringValue": "st_KQA" + }, + { + "stringValue": "st_KZR" + }, + { + "stringValue": "st_LAN" + }, + { + "stringValue": "st_LGL" + }, + { + "stringValue": "st_LIA" + }, + { + "stringValue": "st_LOG" + }, + { + "stringValue": "st_LOT" + }, + { + "stringValue": "st_MAS" + }, + { + "stringValue": "st_MAU" + }, + { + "stringValue": "st_MDA" + }, + { + "stringValue": "st_MGL" + }, + { + "stringValue": "st_MMD" + }, + { + "stringValue": "st_MMZ" + }, + { + "stringValue": "st_MXY" + }, + { + "stringValue": "st_NBT" + }, + { + "stringValue": "st_NKS" + }, + { + "stringValue": "st_NOZ" + }, + { + "stringValue": "st_OAW" + }, + { + "stringValue": "st_OCN" + }, + { + "stringValue": "st_OMA" + }, + { + "stringValue": "st_PAL" + }, + { + "stringValue": "st_PCO" + }, + { + "stringValue": "st_PGT" + }, + { + "stringValue": "st_PIA" + }, + { + "stringValue": "st_POE" + }, + { + "stringValue": "st_PSC" + }, + { + "stringValue": "st_PTB" + }, + { + "stringValue": "st_QFA" + }, + { + "stringValue": "st_QTR" + }, + { + "stringValue": "st_QXE" + }, + { + "stringValue": "st_RAM" + }, + { + "stringValue": "st_RBA" + }, + { + "stringValue": "st_REU" + }, + { + "stringValue": "st_RJA" + }, + { + "stringValue": "st_RPA" + }, + { + "stringValue": "st_RVF" + }, + { + "stringValue": "st_RWD" + }, + { + "stringValue": "st_SAA" + }, + { + "stringValue": "st_SAS" + }, + { + "stringValue": "st_SCX" + }, + { + "stringValue": "st_SEY" + }, + { + "stringValue": "st_SIL" + }, + { + "stringValue": "st_SJX" + }, + { + "stringValue": "st_SKU" + }, + { + "stringValue": "st_SKW" + }, + { + "stringValue": "st_SOL" + }, + { + "stringValue": "st_SVA" + }, + { + "stringValue": "st_SWA" + }, + { + "stringValue": "st_SWR" + }, + { + "stringValue": "st_SXS" + }, + { + "stringValue": "st_TAP" + }, + { + "stringValue": "st_THA" + }, + { + "stringValue": "st_THT" + }, + { + "stringValue": "st_THY" + }, + { + "stringValue": "st_TIN" + }, + { + "stringValue": "st_TPC" + }, + { + "stringValue": "st_TRA" + }, + { + "stringValue": "st_TSC" + }, + { + "stringValue": "st_TTW" + }, + { + "stringValue": "st_TUI" + }, + { + "stringValue": "st_TVF" + }, + { + "stringValue": "st_UAE" + }, + { + "stringValue": "st_UAL" + }, + { + "stringValue": "st_UPS" + }, + { + "stringValue": "st_VIR" + }, + { + "stringValue": "st_VIV" + }, + { + "stringValue": "st_VJH" + }, + { + "stringValue": "st_VJT" + }, + { + "stringValue": "st_VLG" + }, + { + "stringValue": "st_VOE" + }, + { + "stringValue": "st_VOZ" + }, + { + "stringValue": "st_VRE" + }, + { + "stringValue": "st_VTA" + }, + { + "stringValue": "st_VTI" + }, + { + "stringValue": "st_WIA" + }, + { + "stringValue": "st_WIF" + }, + { + "stringValue": "st_WJA" + }, + { + "stringValue": "st_WSN" + }, + { + "stringValue": "st_WZM" + } + ] + } + }, + "st_SKV": { + "arrayValue": { + "values": [ + { + "stringValue": "st_DLH" + } + ] + } + }, + "st_SIL": { + "arrayValue": { + "values": [ + { + "stringValue": "st_AAL" + }, + { + "stringValue": "st_AAY" + }, + { + "stringValue": "st_AMX" + }, + { + "stringValue": "st_ANT" + }, + { + "stringValue": "st_ASA" + }, + { + "stringValue": "st_ATN" + }, + { + "stringValue": "st_AUA" + }, + { + "stringValue": "st_AVA" + }, + { + "stringValue": "st_AZU" + }, + { + "stringValue": "st_BCY" + }, + { + "stringValue": "st_BEL" + }, + { + "stringValue": "st_BHS" + }, + { + "stringValue": "st_BTQ" + }, + { + "stringValue": "st_BWA" + }, + { + "stringValue": "st_CAY" + }, + { + "stringValue": "st_CCM" + }, + { + "stringValue": "st_CFG" + }, + { + "stringValue": "st_CMP" + }, + { + "stringValue": "st_CRL" + }, + { + "stringValue": "st_DAL" + }, + { + "stringValue": "st_DLH" + }, + { + "stringValue": "st_EDW" + }, + { + "stringValue": "st_FBU" + }, + { + "stringValue": "st_FFT" + }, + { + "stringValue": "st_FWI" + }, + { + "stringValue": "st_GLG" + }, + { + "stringValue": "st_GLO" + }, + { + "stringValue": "st_GPD" + }, + { + "stringValue": "st_GWI" + }, + { + "stringValue": "st_HAL" + }, + { + "stringValue": "st_IBE" + }, + { + "stringValue": "st_JBU" + }, + { + "stringValue": "st_JJP" + }, + { + "stringValue": "st_JSA" + }, + { + "stringValue": "st_JST" + }, + { + "stringValue": "st_JSX" + }, + { + "stringValue": "st_KAP" + }, + { + "stringValue": "st_LOG" + }, + { + "stringValue": "st_LOT" + }, + { + "stringValue": "st_LRC" + }, + { + "stringValue": "st_MXY" + }, + { + "stringValue": "st_NBT" + }, + { + "stringValue": "st_NKS" + }, + { + "stringValue": "st_POE" + }, + { + "stringValue": "st_QFA" + }, + { + "stringValue": "st_RVF" + }, + { + "stringValue": "st_SBS" + }, + { + "stringValue": "st_SCX" + }, + { + "stringValue": "st_SWA" + }, + { + "stringValue": "st_SWR" + }, + { + "stringValue": "st_TRA" + }, + { + "stringValue": "st_UAE" + }, + { + "stringValue": "st_UAL" + }, + { + "stringValue": "st_VIR" + }, + { + "stringValue": "st_VOE" + }, + { + "stringValue": "st_VOZ" + }, + { + "stringValue": "st_VXP" + }, + { + "stringValue": "st_WIF" + }, + { + "stringValue": "st_WJA" + } + ] + } + }, + "st_DTR": { + "arrayValue": { + "values": [ + { + "stringValue": "st_DLH" + }, + { + "stringValue": "st_FIN" + }, + { + "stringValue": "st_SAS" + } + ] + } + }, + "st_NOZ": { + "arrayValue": { + "values": [ + { + "stringValue": "st_AEA" + }, + { + "stringValue": "st_AFR" + }, + { + "stringValue": "st_AUA" + }, + { + "stringValue": "st_AVA" + }, + { + "stringValue": "st_BAW" + }, + { + "stringValue": "st_BEL" + }, + { + "stringValue": "st_CFG" + }, + { + "stringValue": "st_DAL" + }, + { + "stringValue": "st_DLH" + }, + { + "stringValue": "st_ETD" + }, + { + "stringValue": "st_EVA" + }, + { + "stringValue": "st_FDB" + }, + { + "stringValue": "st_FIN" + }, + { + "stringValue": "st_IBE" + }, + { + "stringValue": "st_ICE" + }, + { + "stringValue": "st_ITY" + }, + { + "stringValue": "st_JBU" + }, + { + "stringValue": "st_LAN" + }, + { + "stringValue": "st_LOT" + }, + { + "stringValue": "st_NOZ" + }, + { + "stringValue": "st_NOZ" + }, + { + "stringValue": "st_NSZ" + }, + { + "stringValue": "st_PGT" + }, + { + "stringValue": "st_QFA" + }, + { + "stringValue": "st_QTR" + }, + { + "stringValue": "st_SAS" + }, + { + "stringValue": "st_SWA" + }, + { + "stringValue": "st_SWR" + }, + { + "stringValue": "st_TRA" + }, + { + "stringValue": "st_UAE" + }, + { + "stringValue": "st_VLG" + }, + { + "stringValue": "st_VOZ" + }, + { + "stringValue": "st_WIF" + } + ] + } + }, + "st_ENY": { + "arrayValue": { + "values": [ + { + "stringValue": "st_AAL" + }, + { + "stringValue": "st_ACA" + }, + { + "stringValue": "st_AFR" + }, + { + "stringValue": "st_ANA" + }, + { + "stringValue": "st_ANZ" + }, + { + "stringValue": "st_ASA" + }, + { + "stringValue": "st_AUA" + }, + { + "stringValue": "st_BAW" + }, + { + "stringValue": "st_BWA" + }, + { + "stringValue": "st_CAL" + }, + { + "stringValue": "st_CMP" + }, + { + "stringValue": "st_CPA" + }, + { + "stringValue": "st_DAL" + }, + { + "stringValue": "st_DLH" + }, + { + "stringValue": "st_EIN" + }, + { + "stringValue": "st_EVA" + }, + { + "stringValue": "st_FFT" + }, + { + "stringValue": "st_FIN" + }, + { + "stringValue": "st_HAL" + }, + { + "stringValue": "st_IBE" + }, + { + "stringValue": "st_JAL" + }, + { + "stringValue": "st_JBU" + }, + { + "stringValue": "st_JST" + }, + { + "stringValue": "st_KAL" + }, + { + "stringValue": "st_NKS" + }, + { + "stringValue": "st_PAL" + }, + { + "stringValue": "st_QFA" + }, + { + "stringValue": "st_QTR" + }, + { + "stringValue": "st_SWA" + }, + { + "stringValue": "st_SWR" + }, + { + "stringValue": "st_THY" + }, + { + "stringValue": "st_UAL" + } + ] + } + }, + "st_GJS": { + "arrayValue": { + "values": [ + { + "stringValue": "st_AAL" + }, + { + "stringValue": "st_ASA" + }, + { + "stringValue": "st_DAL" + }, + { + "stringValue": "st_DLH" + }, + { + "stringValue": "st_FFT" + }, + { + "stringValue": "st_JBU" + }, + { + "stringValue": "st_NKS" + }, + { + "stringValue": "st_QFA" + }, + { + "stringValue": "st_SWA" + }, + { + "stringValue": "st_UAL" + } + ] + } + }, + "st_FLE": { + "arrayValue": { + "values": [ + { + "stringValue": "st_ACA" + }, + { + "stringValue": "st_AFR" + }, + { + "stringValue": "st_AKT" + }, + { + "stringValue": "st_ANT" + }, + { + "stringValue": "st_ASA" + }, + { + "stringValue": "st_BAW" + }, + { + "stringValue": "st_CAL" + }, + { + "stringValue": "st_CAV" + }, + { + "stringValue": "st_CFG" + }, + { + "stringValue": "st_CJT" + }, + { + "stringValue": "st_CPA" + }, + { + "stringValue": "st_CRK" + }, + { + "stringValue": "st_DAL" + }, + { + "stringValue": "st_DLH" + }, + { + "stringValue": "st_ETD" + }, + { + "stringValue": "st_EVA" + }, + { + "stringValue": "st_FJI" + }, + { + "stringValue": "st_HAL" + }, + { + "stringValue": "st_IGO" + }, + { + "stringValue": "st_JBU" + }, + { + "stringValue": "st_JZA" + }, + { + "stringValue": "st_NKS" + }, + { + "stringValue": "st_PAG" + }, + { + "stringValue": "st_PCO" + }, + { + "stringValue": "st_POE" + }, + { + "stringValue": "st_QFA" + }, + { + "stringValue": "st_SWA" + }, + { + "stringValue": "st_TSC" + }, + { + "stringValue": "st_UAE" + }, + { + "stringValue": "st_UAL" + }, + { + "stringValue": "st_WJA" + } + ] + } + }, + "st_VIR": { + "arrayValue": { + "values": [ + { + "stringValue": "st_4T" + }, + { + "stringValue": "st_AAL" + }, + { + "stringValue": "st_AAR" + }, + { + "stringValue": "st_AAY" + }, + { + "stringValue": "st_ABY" + }, + { + "stringValue": "st_ACA" + }, + { + "stringValue": "st_ACI" + }, + { + "stringValue": "st_AEA" + }, + { + "stringValue": "st_AEE" + }, + { + "stringValue": "st_AFL" + }, + { + "stringValue": "st_AFR" + }, + { + "stringValue": "st_AIC" + }, + { + "stringValue": "st_AIZ" + }, + { + "stringValue": "st_AKT" + }, + { + "stringValue": "st_AMX" + }, + { + "stringValue": "st_ANA" + }, + { + "stringValue": "st_ANT" + }, + { + "stringValue": "st_ANZ" + }, + { + "stringValue": "st_ARG" + }, + { + "stringValue": "st_ASA" + }, + { + "stringValue": "st_ASH" + }, + { + "stringValue": "st_AUA" + }, + { + "stringValue": "st_AVA" + }, + { + "stringValue": "st_AZU" + }, + { + "stringValue": "st_BAW" + }, + { + "stringValue": "st_BEE" + }, + { + "stringValue": "st_BEL" + }, + { + "stringValue": "st_BHS" + }, + { + "stringValue": "st_BLA" + }, + { + "stringValue": "st_BLS" + }, + { + "stringValue": "st_BTI" + }, + { + "stringValue": "st_BWA" + }, + { + "stringValue": "st_CAL" + }, + { + "stringValue": "st_CAY" + }, + { + "stringValue": "st_CCM" + }, + { + "stringValue": "st_CES" + }, + { + "stringValue": "st_CFG" + }, + { + "stringValue": "st_CMP" + }, + { + "stringValue": "st_CPA" + }, + { + "stringValue": "st_CRK" + }, + { + "stringValue": "st_CSA" + }, + { + "stringValue": "st_CTN" + }, + { + "stringValue": "st_CXA" + }, + { + "stringValue": "st_DAL" + }, + { + "stringValue": "st_DJT" + }, + { + "stringValue": "st_DLA" + }, + { + "stringValue": "st_DLH" + }, + { + "stringValue": "st_DTR" + }, + { + "stringValue": "st_EDV" + }, + { + "stringValue": "st_EIN" + }, + { + "stringValue": "st_ELY" + }, + { + "stringValue": "st_ETD" + }, + { + "stringValue": "st_ETH" + }, + { + "stringValue": "st_EVA" + }, + { + "stringValue": "st_EWG" + }, + { + "stringValue": "st_EZY" + }, + { + "stringValue": "st_FDB" + }, + { + "stringValue": "st_FDY" + }, + { + "stringValue": "st_FFT" + }, + { + "stringValue": "st_FIN" + }, + { + "stringValue": "st_FJI" + }, + { + "stringValue": "st_FWI" + }, + { + "stringValue": "st_GFA" + }, + { + "stringValue": "st_GIA" + }, + { + "stringValue": "st_GLO" + }, + { + "stringValue": "st_GPD" + }, + { + "stringValue": "st_HAL" + }, + { + "stringValue": "st_HDA" + }, + { + "stringValue": "st_HVN" + }, + { + "stringValue": "st_IBE" + }, + { + "stringValue": "st_IBS" + }, + { + "stringValue": "st_ICE" + }, + { + "stringValue": "st_IGO" + }, + { + "stringValue": "st_ISR" + }, + { + "stringValue": "st_ITY" + }, + { + "stringValue": "st_JAL" + }, + { + "stringValue": "st_JBU" + }, + { + "stringValue": "st_JST" + }, + { + "stringValue": "st_KAL" + }, + { + "stringValue": "st_KAP" + }, + { + "stringValue": "st_KLM" + }, + { + "stringValue": "st_KMM" + }, + { + "stringValue": "st_KQA" + }, + { + "stringValue": "st_LAN" + }, + { + "stringValue": "st_LIA" + }, + { + "stringValue": "st_LOG" + }, + { + "stringValue": "st_LOT" + }, + { + "stringValue": "st_MAS" + }, + { + "stringValue": "st_MAU" + }, + { + "stringValue": "st_MDA" + }, + { + "stringValue": "st_MEA" + }, + { + "stringValue": "st_MXY" + }, + { + "stringValue": "st_NKS" + }, + { + "stringValue": "st_OAL" + }, + { + "stringValue": "st_OAW" + }, + { + "stringValue": "st_OCN" + }, + { + "stringValue": "st_OMA" + }, + { + "stringValue": "st_ONE" + }, + { + "stringValue": "st_PIA" + }, + { + "stringValue": "st_POE" + }, + { + "stringValue": "st_QFA" + }, + { + "stringValue": "st_QTR" + }, + { + "stringValue": "st_RBA" + }, + { + "stringValue": "st_RJA" + }, + { + "stringValue": "st_RVF" + }, + { + "stringValue": "st_RZO" + }, + { + "stringValue": "st_SAA" + }, + { + "stringValue": "st_SAS" + }, + { + "stringValue": "st_SCE" + }, + { + "stringValue": "st_SCX" + }, + { + "stringValue": "st_SEY" + }, + { + "stringValue": "st_SIA" + }, + { + "stringValue": "st_SIL" + }, + { + "stringValue": "st_SKW" + }, + { + "stringValue": "st_SVA" + }, + { + "stringValue": "st_SWA" + }, + { + "stringValue": "st_SWR" + }, + { + "stringValue": "st_SXS" + }, + { + "stringValue": "st_TAM" + }, + { + "stringValue": "st_TAP" + }, + { + "stringValue": "st_THA" + }, + { + "stringValue": "st_THT" + }, + { + "stringValue": "st_THY" + }, + { + "stringValue": "st_TRA" + }, + { + "stringValue": "st_TSC" + }, + { + "stringValue": "st_TUI" + }, + { + "stringValue": "st_TVF" + }, + { + "stringValue": "st_UAE" + }, + { + "stringValue": "st_UAL" + }, + { + "stringValue": "st_UBT" + }, + { + "stringValue": "st_VIR" + }, + { + "stringValue": "st_VJH" + }, + { + "stringValue": "st_VLG" + }, + { + "stringValue": "st_VOE" + }, + { + "stringValue": "st_VOZ" + }, + { + "stringValue": "st_VTI" + }, + { + "stringValue": "st_WIA" + }, + { + "stringValue": "st_WIF" + }, + { + "stringValue": "st_WJA" + }, + { + "stringValue": "st_YB" + } + ] + } + }, + "st_JTA": { + "arrayValue": { + "values": [ + { + "stringValue": "st_CPA" + }, + { + "stringValue": "st_EVA" + } + ] + } + }, + "st_HVN": { + "arrayValue": { + "values": [ + { + "stringValue": "st_AAL" + }, + { + "stringValue": "st_AAR" + }, + { + "stringValue": "st_ACA" + }, + { + "stringValue": "st_AFR" + }, + { + "stringValue": "st_ANA" + }, + { + "stringValue": "st_ANZ" + }, + { + "stringValue": "st_ARG" + }, + { + "stringValue": "st_ASA" + }, + { + "stringValue": "st_AUA" + }, + { + "stringValue": "st_BAW" + }, + { + "stringValue": "st_BKP" + }, + { + "stringValue": "st_CAL" + }, + { + "stringValue": "st_CFG" + }, + { + "stringValue": "st_CPA" + }, + { + "stringValue": "st_DAL" + }, + { + "stringValue": "st_DLH" + }, + { + "stringValue": "st_ETD" + }, + { + "stringValue": "st_EVA" + }, + { + "stringValue": "st_FIN" + }, + { + "stringValue": "st_IGO" + }, + { + "stringValue": "st_ITY" + }, + { + "stringValue": "st_JAL" + }, + { + "stringValue": "st_JJP" + }, + { + "stringValue": "st_JST" + }, + { + "stringValue": "st_KAL" + }, + { + "stringValue": "st_KLM" + }, + { + "stringValue": "st_LOT" + }, + { + "stringValue": "st_OCN" + }, + { + "stringValue": "st_QFA" + }, + { + "stringValue": "st_QTR" + }, + { + "stringValue": "st_SAS" + }, + { + "stringValue": "st_SJX" + }, + { + "stringValue": "st_SWA" + }, + { + "stringValue": "st_SWR" + }, + { + "stringValue": "st_THY" + }, + { + "stringValue": "st_TVF" + }, + { + "stringValue": "st_UAL" + }, + { + "stringValue": "st_VIR" + }, + { + "stringValue": "st_VOZ" + } + ] + } + }, + "st_MHV": { + "arrayValue": { + "values": [ + { + "stringValue": "st_AWU" + }, + { + "stringValue": "st_CFG" + }, + { + "stringValue": "st_DAL" + }, + { + "stringValue": "st_DLH" + }, + { + "stringValue": "st_DTR" + }, + { + "stringValue": "st_ECA" + }, + { + "stringValue": "st_EDW" + }, + { + "stringValue": "st_EWG" + }, + { + "stringValue": "st_JSX" + }, + { + "stringValue": "st_MXY" + }, + { + "stringValue": "st_RJA" + }, + { + "stringValue": "st_SAS" + }, + { + "stringValue": "st_SWA" + }, + { + "stringValue": "st_SWR" + }, + { + "stringValue": "st_TUI" + }, + { + "stringValue": "st_VJH" + }, + { + "stringValue": "st_VOE" + }, + { + "stringValue": "st_WIA" + }, + { + "stringValue": "st_WIF" + } + ] + } + }, + "st_HAL": { + "arrayValue": { + "values": [ + { + "stringValue": "st_AAL" + }, + { + "stringValue": "st_AAR" + }, + { + "stringValue": "st_AAY" + }, + { + "stringValue": "st_ACA" + }, + { + "stringValue": "st_AFR" + }, + { + "stringValue": "st_ANA" + }, + { + "stringValue": "st_ANT" + }, + { + "stringValue": "st_ANZ" + }, + { + "stringValue": "st_ASA" + }, + { + "stringValue": "st_AUA" + }, + { + "stringValue": "st_AVA" + }, + { + "stringValue": "st_BAW" + }, + { + "stringValue": "st_CAL" + }, + { + "stringValue": "st_CFG" + }, + { + "stringValue": "st_CFS" + }, + { + "stringValue": "st_CKS" + }, + { + "stringValue": "st_CMP" + }, + { + "stringValue": "st_CPA" + }, + { + "stringValue": "st_CRK" + }, + { + "stringValue": "st_DAL" + }, + { + "stringValue": "st_DLH" + }, + { + "stringValue": "st_EDV" + }, + { + "stringValue": "st_EIN" + }, + { + "stringValue": "st_ENY" + }, + { + "stringValue": "st_ETD" + }, + { + "stringValue": "st_EVA" + }, + { + "stringValue": "st_EWG" + }, + { + "stringValue": "st_FDX" + }, + { + "stringValue": "st_FDY" + }, + { + "stringValue": "st_FFT" + }, + { + "stringValue": "st_FIN" + }, + { + "stringValue": "st_FJI" + }, + { + "stringValue": "st_FLE" + }, + { + "stringValue": "st_GTI" + }, + { + "stringValue": "st_HAL" + }, + { + "stringValue": "st_HAL" + }, + { + "stringValue": "st_IBE" + }, + { + "stringValue": "st_ICE" + }, + { + "stringValue": "st_ITY" + }, + { + "stringValue": "st_JAL" + }, + { + "stringValue": "st_JBU" + }, + { + "stringValue": "st_JIA" + }, + { + "stringValue": "st_JJP" + }, + { + "stringValue": "st_JST" + }, + { + "stringValue": "st_JSX" + }, + { + "stringValue": "st_JZA" + }, + { + "stringValue": "st_KAL" + }, + { + "stringValue": "st_KAP" + }, + { + "stringValue": "st_KLM" + }, + { + "stringValue": "st_LAN" + }, + { + "stringValue": "st_LOT" + }, + { + "stringValue": "st_MXY" + }, + { + "stringValue": "st_NKS" + }, + { + "stringValue": "st_OCN" + }, + { + "stringValue": "st_PAL" + }, + { + "stringValue": "st_PDT" + }, + { + "stringValue": "st_POE" + }, + { + "stringValue": "st_QFA" + }, + { + "stringValue": "st_QTR" + }, + { + "stringValue": "st_QXE" + }, + { + "stringValue": "st_RPA" + }, + { + "stringValue": "st_SAS" + }, + { + "stringValue": "st_SCX" + }, + { + "stringValue": "st_SKW" + }, + { + "stringValue": "st_SWA" + }, + { + "stringValue": "st_SWR" + }, + { + "stringValue": "st_TAP" + }, + { + "stringValue": "st_THA" + }, + { + "stringValue": "st_THY" + }, + { + "stringValue": "st_TSC" + }, + { + "stringValue": "st_UAE" + }, + { + "stringValue": "st_UAL" + }, + { + "stringValue": "st_UPS" + }, + { + "stringValue": "st_VIR" + }, + { + "stringValue": "st_VLG" + }, + { + "stringValue": "st_VOZ" + }, + { + "stringValue": "st_VTA" + }, + { + "stringValue": "st_VXP" + }, + { + "stringValue": "st_WJA" + }, + { + "stringValue": "st_WSN" + }, + { + "stringValue": "st_YB" + } + ] + } + }, + "st_SCX": { + "arrayValue": { + "values": [ + { + "stringValue": "st_AAL" + }, + { + "stringValue": "st_AAY" + }, + { + "stringValue": "st_ACA" + }, + { + "stringValue": "st_ASA" + }, + { + "stringValue": "st_BAW" + }, + { + "stringValue": "st_DAL" + }, + { + "stringValue": "st_EDV" + }, + { + "stringValue": "st_FDX" + }, + { + "stringValue": "st_FFT" + }, + { + "stringValue": "st_HAG" + }, + { + "stringValue": "st_HAL" + }, + { + "stringValue": "st_ICE" + }, + { + "stringValue": "st_JBU" + }, + { + "stringValue": "st_MXY" + }, + { + "stringValue": "st_NKS" + }, + { + "stringValue": "st_QFA" + }, + { + "stringValue": "st_SCX" + }, + { + "stringValue": "st_SCX" + }, + { + "stringValue": "st_SKW" + }, + { + "stringValue": "st_SWA" + }, + { + "stringValue": "st_UAE" + }, + { + "stringValue": "st_UAL" + } + ] + } + }, + "st_SWA": { + "arrayValue": { + "values": [ + { + "stringValue": "st_4T" + }, + { + "stringValue": "st_AAL" + }, + { + "stringValue": "st_AAR" + }, + { + "stringValue": "st_AAY" + }, + { + "stringValue": "st_ABX" + }, + { + "stringValue": "st_ABY" + }, + { + "stringValue": "st_ACA" + }, + { + "stringValue": "st_ACO" + }, + { + "stringValue": "st_AEA" + }, + { + "stringValue": "st_AEE" + }, + { + "stringValue": "st_AFL" + }, + { + "stringValue": "st_AFR" + }, + { + "stringValue": "st_AHX" + }, + { + "stringValue": "st_AIC" + }, + { + "stringValue": "st_AIE" + }, + { + "stringValue": "st_AIZ" + }, + { + "stringValue": "st_AKT" + }, + { + "stringValue": "st_AMF" + }, + { + "stringValue": "st_AMX" + }, + { + "stringValue": "st_ANA" + }, + { + "stringValue": "st_ANK" + }, + { + "stringValue": "st_ANT" + }, + { + "stringValue": "st_ANZ" + }, + { + "stringValue": "st_APZ" + }, + { + "stringValue": "st_ARG" + }, + { + "stringValue": "st_ASA" + }, + { + "stringValue": "st_ASH" + }, + { + "stringValue": "st_ASL" + }, + { + "stringValue": "st_ASQ" + }, + { + "stringValue": "st_AUA" + }, + { + "stringValue": "st_AVA" + }, + { + "stringValue": "st_AWI" + }, + { + "stringValue": "st_AWU" + }, + { + "stringValue": "st_AZU" + }, + { + "stringValue": "st_BAW" + }, + { + "stringValue": "st_BEL" + }, + { + "stringValue": "st_BHS" + }, + { + "stringValue": "st_BKP" + }, + { + "stringValue": "st_BLA" + }, + { + "stringValue": "st_BLS" + }, + { + "stringValue": "st_BRX" + }, + { + "stringValue": "st_BTI" + }, + { + "stringValue": "st_BTQ" + }, + { + "stringValue": "st_BWA" + }, + { + "stringValue": "st_CAL" + }, + { + "stringValue": "st_CAV" + }, + { + "stringValue": "st_CAY" + }, + { + "stringValue": "st_CCA" + }, + { + "stringValue": "st_CCM" + }, + { + "stringValue": "st_CEB" + }, + { + "stringValue": "st_CES" + }, + { + "stringValue": "st_CFG" + }, + { + "stringValue": "st_CFS" + }, + { + "stringValue": "st_CKS" + }, + { + "stringValue": "st_CMP" + }, + { + "stringValue": "st_CPA" + }, + { + "stringValue": "st_CRK" + }, + { + "stringValue": "st_CRL" + }, + { + "stringValue": "st_CRQ" + }, + { + "stringValue": "st_CSA" + }, + { + "stringValue": "st_CTN" + }, + { + "stringValue": "st_CVU" + }, + { + "stringValue": "st_DAL" + }, + { + "stringValue": "st_DJT" + }, + { + "stringValue": "st_DLA" + }, + { + "stringValue": "st_DLH" + }, + { + "stringValue": "st_DWI" + }, + { + "stringValue": "st_EAI" + }, + { + "stringValue": "st_EDV" + }, + { + "stringValue": "st_EDW" + }, + { + "stringValue": "st_EIN" + }, + { + "stringValue": "st_ELY" + }, + { + "stringValue": "st_ENY" + }, + { + "stringValue": "st_EST" + }, + { + "stringValue": "st_ETD" + }, + { + "stringValue": "st_ETH" + }, + { + "stringValue": "st_EVA" + }, + { + "stringValue": "st_EWG" + }, + { + "stringValue": "st_FBU" + }, + { + "stringValue": "st_FDB" + }, + { + "stringValue": "st_FDX" + }, + { + "stringValue": "st_FDY" + }, + { + "stringValue": "st_FFT" + }, + { + "stringValue": "st_FIN" + }, + { + "stringValue": "st_FJI" + }, + { + "stringValue": "st_FLE" + }, + { + "stringValue": "st_FPO" + }, + { + "stringValue": "st_FWI" + }, + { + "stringValue": "st_GFA" + }, + { + "stringValue": "st_GIA" + }, + { + "stringValue": "st_GJS" + }, + { + "stringValue": "st_GLO" + }, + { + "stringValue": "st_GPD" + }, + { + "stringValue": "st_GTI" + }, + { + "stringValue": "st_GZ" + }, + { + "stringValue": "st_HAL" + }, + { + "stringValue": "st_HDA" + }, + { + "stringValue": "st_HI" + }, + { + "stringValue": "st_HK" + }, + { + "stringValue": "st_HKE" + }, + { + "stringValue": "st_HVN" + }, + { + "stringValue": "st_IBB" + }, + { + "stringValue": "st_IBE" + }, + { + "stringValue": "st_IBS" + }, + { + "stringValue": "st_ICE" + }, + { + "stringValue": "st_IGO" + }, + { + "stringValue": "st_ISR" + }, + { + "stringValue": "st_ITY" + }, + { + "stringValue": "st_JAF" + }, + { + "stringValue": "st_JBU" + }, + { + "stringValue": "st_JIA" + }, + { + "stringValue": "st_JJP" + }, + { + "stringValue": "st_JN" + }, + { + "stringValue": "st_JSA" + }, + { + "stringValue": "st_JST" + }, + { + "stringValue": "st_JSX" + }, + { + "stringValue": "st_JZA" + }, + { + "stringValue": "st_JZR" + }, + { + "stringValue": "st_KAP" + }, + { + "stringValue": "st_KEN" + }, + { + "stringValue": "st_KLM" + }, + { + "stringValue": "st_KMM" + }, + { + "stringValue": "st_KQA" + }, + { + "stringValue": "st_KZR" + }, + { + "stringValue": "st_LAN" + }, + { + "stringValue": "st_LGL" + }, + { + "stringValue": "st_LHX" + }, + { + "stringValue": "st_LIA" + }, + { + "stringValue": "st_LOF" + }, + { + "stringValue": "st_LOG" + }, + { + "stringValue": "st_LOT" + }, + { + "stringValue": "st_LYM" + }, + { + "stringValue": "st_MDA" + }, + { + "stringValue": "st_MEA" + }, + { + "stringValue": "st_MMD" + }, + { + "stringValue": "st_MML" + }, + { + "stringValue": "st_MXY" + }, + { + "stringValue": "st_NBT" + }, + { + "stringValue": "st_NDA" + }, + { + "stringValue": "st_NKS" + }, + { + "stringValue": "st_NOZ" + }, + { + "stringValue": "st_NSZ" + }, + { + "stringValue": "st_OAE" + }, + { + "stringValue": "st_OAL" + }, + { + "stringValue": "st_OCN" + }, + { + "stringValue": "st_P3" + }, + { + "stringValue": "st_PAG" + }, + { + "stringValue": "st_PAL" + }, + { + "stringValue": "st_PDT" + }, + { + "stringValue": "st_PGT" + }, + { + "stringValue": "st_PIA" + }, + { + "stringValue": "st_POE" + }, + { + "stringValue": "st_PPL" + }, + { + "stringValue": "st_PSC" + }, + { + "stringValue": "st_PVG" + }, + { + "stringValue": "st_QFA" + }, + { + "stringValue": "st_QTR" + }, + { + "stringValue": "st_QXE" + }, + { + "stringValue": "st_RAM" + }, + { + "stringValue": "st_RBA" + }, + { + "stringValue": "st_REU" + }, + { + "stringValue": "st_RJA" + }, + { + "stringValue": "st_RPA" + }, + { + "stringValue": "st_RVF" + }, + { + "stringValue": "st_RZO" + }, + { + "stringValue": "st_SAA" + }, + { + "stringValue": "st_SAS" + }, + { + "stringValue": "st_SAT" + }, + { + "stringValue": "st_SBI" + }, + { + "stringValue": "st_SCE" + }, + { + "stringValue": "st_SCX" + }, + { + "stringValue": "st_SEY" + }, + { + "stringValue": "st_SHU" + }, + { + "stringValue": "st_SIL" + }, + { + "stringValue": "st_SJX" + }, + { + "stringValue": "st_SKU" + }, + { + "stringValue": "st_SKW" + }, + { + "stringValue": "st_SKY" + }, + { + "stringValue": "st_SVA" + }, + { + "stringValue": "st_SWA" + }, + { + "stringValue": "st_SWR" + }, + { + "stringValue": "st_SXS" + }, + { + "stringValue": "st_TAP" + }, + { + "stringValue": "st_TCV" + }, + { + "stringValue": "st_THT" + }, + { + "stringValue": "st_THY" + }, + { + "stringValue": "st_TIN" + }, + { + "stringValue": "st_TOS" + }, + { + "stringValue": "st_TQN" + }, + { + "stringValue": "st_TRA" + }, + { + "stringValue": "st_TSC" + }, + { + "stringValue": "st_TTW" + }, + { + "stringValue": "st_TUI" + }, + { + "stringValue": "st_TVF" + }, + { + "stringValue": "st_TVS" + }, + { + "stringValue": "st_TZP" + }, + { + "stringValue": "st_UAE" + }, + { + "stringValue": "st_UAL" + }, + { + "stringValue": "st_UBT" + }, + { + "stringValue": "st_UCA" + }, + { + "stringValue": "st_UIA" + }, + { + "stringValue": "st_UPS" + }, + { + "stringValue": "st_VIR" + }, + { + "stringValue": "st_VIV" + }, + { + "stringValue": "st_VJC" + }, + { + "stringValue": "st_VJT" + }, + { + "stringValue": "st_VLG" + }, + { + "stringValue": "st_VOE" + }, + { + "stringValue": "st_VOI" + }, + { + "stringValue": "st_VOZ" + }, + { + "stringValue": "st_VRD" + }, + { + "stringValue": "st_VRE" + }, + { + "stringValue": "st_VTA" + }, + { + "stringValue": "st_VTE" + }, + { + "stringValue": "st_VTI" + }, + { + "stringValue": "st_VXP" + }, + { + "stringValue": "st_WGN" + }, + { + "stringValue": "st_WIA" + }, + { + "stringValue": "st_WIF" + }, + { + "stringValue": "st_WJA" + }, + { + "stringValue": "st_WM" + }, + { + "stringValue": "st_WSN" + }, + { + "stringValue": "st_YB" + } + ] + } + }, + "st_ANT": { + "arrayValue": { + "values": [ + { + "stringValue": "st_ACA" + }, + { + "stringValue": "st_AFR" + }, + { + "stringValue": "st_AKT" + }, + { + "stringValue": "st_ASA" + }, + { + "stringValue": "st_CAL" + }, + { + "stringValue": "st_CPA" + }, + { + "stringValue": "st_DAL" + }, + { + "stringValue": "st_FLE" + }, + { + "stringValue": "st_HAL" + }, + { + "stringValue": "st_POE" + }, + { + "stringValue": "st_UAL" + }, + { + "stringValue": "st_WJA" + } + ] + } + }, + "st_WEN": { + "arrayValue": { + "values": [ + { + "stringValue": "st_AAL" + }, + { + "stringValue": "st_AAY" + }, + { + "stringValue": "st_ACA" + }, + { + "stringValue": "st_AEA" + }, + { + "stringValue": "st_AEE" + }, + { + "stringValue": "st_AFR" + }, + { + "stringValue": "st_AIE" + }, + { + "stringValue": "st_AIZ" + }, + { + "stringValue": "st_AKT" + }, + { + "stringValue": "st_AMX" + }, + { + "stringValue": "st_ANT" + }, + { + "stringValue": "st_ANZ" + }, + { + "stringValue": "st_ASA" + }, + { + "stringValue": "st_AUA" + }, + { + "stringValue": "st_AZU" + }, + { + "stringValue": "st_BAW" + }, + { + "stringValue": "st_BEL" + }, + { + "stringValue": "st_BKP" + }, + { + "stringValue": "st_BLA" + }, + { + "stringValue": "st_BLS" + }, + { + "stringValue": "st_BTI" + }, + { + "stringValue": "st_CAL" + }, + { + "stringValue": "st_CAV" + }, + { + "stringValue": "st_CAY" + }, + { + "stringValue": "st_CCM" + }, + { + "stringValue": "st_CFG" + }, + { + "stringValue": "st_CMP" + }, + { + "stringValue": "st_CNF" + }, + { + "stringValue": "st_CPA" + }, + { + "stringValue": "st_CRK" + }, + { + "stringValue": "st_CRL" + }, + { + "stringValue": "st_CRQ" + }, + { + "stringValue": "st_CSA" + }, + { + "stringValue": "st_CTN" + }, + { + "stringValue": "st_DAL" + }, + { + "stringValue": "st_DLA" + }, + { + "stringValue": "st_DLH" + }, + { + "stringValue": "st_ELY" + }, + { + "stringValue": "st_ETD" + }, + { + "stringValue": "st_EVA" + }, + { + "stringValue": "st_EWG" + }, + { + "stringValue": "st_FBU" + }, + { + "stringValue": "st_FDB" + }, + { + "stringValue": "st_FDX" + }, + { + "stringValue": "st_FDY" + }, + { + "stringValue": "st_FFT" + }, + { + "stringValue": "st_FJI" + }, + { + "stringValue": "st_FWI" + }, + { + "stringValue": "st_GLO" + }, + { + "stringValue": "st_GLR" + }, + { + "stringValue": "st_GPD" + }, + { + "stringValue": "st_GZ" + }, + { + "stringValue": "st_HAL" + }, + { + "stringValue": "st_HI" + }, + { + "stringValue": "st_IBB" + }, + { + "stringValue": "st_IBE" + }, + { + "stringValue": "st_ICE" + }, + { + "stringValue": "st_ITY" + }, + { + "stringValue": "st_JAL" + }, + { + "stringValue": "st_JBA" + }, + { + "stringValue": "st_JBU" + }, + { + "stringValue": "st_KAL" + }, + { + "stringValue": "st_KAP" + }, + { + "stringValue": "st_KLM" + }, + { + "stringValue": "st_KQA" + }, + { + "stringValue": "st_LAN" + }, + { + "stringValue": "st_LIA" + }, + { + "stringValue": "st_LOG" + }, + { + "stringValue": "st_LOT" + }, + { + "stringValue": "st_MXY" + }, + { + "stringValue": "st_NKS" + }, + { + "stringValue": "st_NLA" + }, + { + "stringValue": "st_OAW" + }, + { + "stringValue": "st_OCN" + }, + { + "stringValue": "st_ONE" + }, + { + "stringValue": "st_PAG" + }, + { + "stringValue": "st_PCO" + }, + { + "stringValue": "st_PIA" + }, + { + "stringValue": "st_POE" + }, + { + "stringValue": "st_PSC" + }, + { + "stringValue": "st_PVL" + }, + { + "stringValue": "st_QFA" + }, + { + "stringValue": "st_RJA" + }, + { + "stringValue": "st_RVF" + }, + { + "stringValue": "st_SAS" + }, + { + "stringValue": "st_SAT" + }, + { + "stringValue": "st_SCE" + }, + { + "stringValue": "st_SCX" + }, + { + "stringValue": "st_SWA" + }, + { + "stringValue": "st_SWR" + }, + { + "stringValue": "st_SXS" + }, + { + "stringValue": "st_TAP" + }, + { + "stringValue": "st_THT" + }, + { + "stringValue": "st_TIN" + }, + { + "stringValue": "st_TOS" + }, + { + "stringValue": "st_TRA" + }, + { + "stringValue": "st_TSC" + }, + { + "stringValue": "st_TUI" + }, + { + "stringValue": "st_UAE" + }, + { + "stringValue": "st_UAL" + }, + { + "stringValue": "st_VIR" + }, + { + "stringValue": "st_VLG" + }, + { + "stringValue": "st_VOE" + }, + { + "stringValue": "st_VOZ" + }, + { + "stringValue": "st_VTI" + }, + { + "stringValue": "st_WIA" + } + ] + } + }, + "st_BOX": { + "arrayValue": { + "values": [ + { + "stringValue": "st_AUA" + }, + { + "stringValue": "st_CFG" + }, + { + "stringValue": "st_CTN" + }, + { + "stringValue": "st_DLA" + }, + { + "stringValue": "st_DLH" + }, + { + "stringValue": "st_EDW" + }, + { + "stringValue": "st_EWG" + }, + { + "stringValue": "st_FDB" + }, + { + "stringValue": "st_SWR" + }, + { + "stringValue": "st_SXS" + }, + { + "stringValue": "st_TUI" + }, + { + "stringValue": "st_VLG" + } + ] + } + }, + "st_DJT": { + "arrayValue": { + "values": [ + { + "stringValue": "st_AAY" + }, + { + "stringValue": "st_ACA" + }, + { + "stringValue": "st_AFR" + }, + { + "stringValue": "st_ASA" + }, + { + "stringValue": "st_FFT" + }, + { + "stringValue": "st_JBU" + }, + { + "stringValue": "st_POE" + }, + { + "stringValue": "st_SWA" + }, + { + "stringValue": "st_TVF" + }, + { + "stringValue": "st_UAL" + } + ] + } + }, + "st_NSZ": { + "arrayValue": { + "values": [ + { + "stringValue": "st_AFR" + }, + { + "stringValue": "st_BAW" + }, + { + "stringValue": "st_DLH" + }, + { + "stringValue": "st_EVA" + }, + { + "stringValue": "st_FCM" + }, + { + "stringValue": "st_FIN" + }, + { + "stringValue": "st_ICE" + }, + { + "stringValue": "st_NOZ" + }, + { + "stringValue": "st_QTR" + }, + { + "stringValue": "st_SAS" + }, + { + "stringValue": "st_SWR" + }, + { + "stringValue": "st_UAE" + }, + { + "stringValue": "st_WIF" + } + ] + } + }, + "st_VJC": { + "arrayValue": { + "values": [ + { + "stringValue": "st_UAL" + } + ] + } + }, + "st_SCE": { + "arrayValue": { + "values": [ + { + "stringValue": "st_SWA" + }, + { + "stringValue": "st_UAL" + } + ] + } + }, + "st_UBT": { + "arrayValue": { + "values": [ + { + "stringValue": "st_BAW" + }, + { + "stringValue": "st_JBU" + }, + { + "stringValue": "st_SWA" + }, + { + "stringValue": "st_VIR" + }, + { + "stringValue": "st_VLG" + } + ] + } + }, + "st_GBG": { + "arrayValue": { + "values": [ + { + "stringValue": "st_ACA" + }, + { + "stringValue": "st_LOT" + } + ] + } + }, + "st_SKY": { + "arrayValue": { + "values": [ + { + "stringValue": "st_SWA" + } + ] + } + }, + "st_FFT": { + "arrayValue": { + "values": [ + { + "stringValue": "st_AAY" + }, + { + "stringValue": "st_ABX" + }, + { + "stringValue": "st_ACA" + }, + { + "stringValue": "st_ACO" + }, + { + "stringValue": "st_AEA" + }, + { + "stringValue": "st_AFR" + }, + { + "stringValue": "st_AKT" + }, + { + "stringValue": "st_AMX" + }, + { + "stringValue": "st_ANA" + }, + { + "stringValue": "st_APZ" + }, + { + "stringValue": "st_ARG" + }, + { + "stringValue": "st_ASA" + }, + { + "stringValue": "st_ASH" + }, + { + "stringValue": "st_AUA" + }, + { + "stringValue": "st_AVA" + }, + { + "stringValue": "st_AZU" + }, + { + "stringValue": "st_BAW" + }, + { + "stringValue": "st_BLA" + }, + { + "stringValue": "st_BLS" + }, + { + "stringValue": "st_BOV" + }, + { + "stringValue": "st_BTQ" + }, + { + "stringValue": "st_BWA" + }, + { + "stringValue": "st_CAY" + }, + { + "stringValue": "st_CCM" + }, + { + "stringValue": "st_CFG" + }, + { + "stringValue": "st_CMP" + }, + { + "stringValue": "st_CNF" + }, + { + "stringValue": "st_CPA" + }, + { + "stringValue": "st_CRL" + }, + { + "stringValue": "st_CSA" + }, + { + "stringValue": "st_CTN" + }, + { + "stringValue": "st_DAL" + }, + { + "stringValue": "st_DJT" + }, + { + "stringValue": "st_DLA" + }, + { + "stringValue": "st_DLH" + }, + { + "stringValue": "st_DWI" + }, + { + "stringValue": "st_EAF" + }, + { + "stringValue": "st_EDV" + }, + { + "stringValue": "st_EDW" + }, + { + "stringValue": "st_EIN" + }, + { + "stringValue": "st_ELY" + }, + { + "stringValue": "st_ENY" + }, + { + "stringValue": "st_ETD" + }, + { + "stringValue": "st_EVA" + }, + { + "stringValue": "st_EWG" + }, + { + "stringValue": "st_FBU" + }, + { + "stringValue": "st_FC" + }, + { + "stringValue": "st_FDB" + }, + { + "stringValue": "st_FDX" + }, + { + "stringValue": "st_FDY" + }, + { + "stringValue": "st_FFT" + }, + { + "stringValue": "st_FIN" + }, + { + "stringValue": "st_FJI" + }, + { + "stringValue": "st_FLE" + }, + { + "stringValue": "st_FPO" + }, + { + "stringValue": "st_FWI" + }, + { + "stringValue": "st_GJS" + }, + { + "stringValue": "st_GLO" + }, + { + "stringValue": "st_GPD" + }, + { + "stringValue": "st_GTI" + }, + { + "stringValue": "st_HAL" + }, + { + "stringValue": "st_HI" + }, + { + "stringValue": "st_HKE" + }, + { + "stringValue": "st_ICE" + }, + { + "stringValue": "st_IGO" + }, + { + "stringValue": "st_ITY" + }, + { + "stringValue": "st_JBU" + }, + { + "stringValue": "st_JIA" + }, + { + "stringValue": "st_JJP" + }, + { + "stringValue": "st_JST" + }, + { + "stringValue": "st_JSX" + }, + { + "stringValue": "st_KAC" + }, + { + "stringValue": "st_KAP" + }, + { + "stringValue": "st_KEN" + }, + { + "stringValue": "st_KMM" + }, + { + "stringValue": "st_KSZ" + }, + { + "stringValue": "st_LAN" + }, + { + "stringValue": "st_LOG" + }, + { + "stringValue": "st_LOT" + }, + { + "stringValue": "st_LPE" + }, + { + "stringValue": "st_MAY" + }, + { + "stringValue": "st_MMD" + }, + { + "stringValue": "st_MXY" + }, + { + "stringValue": "st_NBT" + }, + { + "stringValue": "st_NKS" + }, + { + "stringValue": "st_OAW" + }, + { + "stringValue": "st_OCN" + }, + { + "stringValue": "st_OMA" + }, + { + "stringValue": "st_PDT" + }, + { + "stringValue": "st_PGT" + }, + { + "stringValue": "st_PIA" + }, + { + "stringValue": "st_POE" + }, + { + "stringValue": "st_QFA" + }, + { + "stringValue": "st_QXE" + }, + { + "stringValue": "st_RJA" + }, + { + "stringValue": "st_RPA" + }, + { + "stringValue": "st_RPB" + }, + { + "stringValue": "st_RVF" + }, + { + "stringValue": "st_RZO" + }, + { + "stringValue": "st_SAS" + }, + { + "stringValue": "st_SAT" + }, + { + "stringValue": "st_SCE" + }, + { + "stringValue": "st_SCX" + }, + { + "stringValue": "st_SEY" + }, + { + "stringValue": "st_SIL" + }, + { + "stringValue": "st_SKW" + }, + { + "stringValue": "st_SRY" + }, + { + "stringValue": "st_SVA" + }, + { + "stringValue": "st_SWA" + }, + { + "stringValue": "st_SWR" + }, + { + "stringValue": "st_SXS" + }, + { + "stringValue": "st_TAI" + }, + { + "stringValue": "st_TAP" + }, + { + "stringValue": "st_THT" + }, + { + "stringValue": "st_TIN" + }, + { + "stringValue": "st_TOS" + }, + { + "stringValue": "st_TRA" + }, + { + "stringValue": "st_TUI" + }, + { + "stringValue": "st_TVF" + }, + { + "stringValue": "st_UAE" + }, + { + "stringValue": "st_UAL" + }, + { + "stringValue": "st_UBT" + }, + { + "stringValue": "st_UCA" + }, + { + "stringValue": "st_UPS" + }, + { + "stringValue": "st_VIR" + }, + { + "stringValue": "st_VLG" + }, + { + "stringValue": "st_VOE" + }, + { + "stringValue": "st_VOI" + }, + { + "stringValue": "st_VOZ" + }, + { + "stringValue": "st_VTE" + }, + { + "stringValue": "st_VXP" + }, + { + "stringValue": "st_WIA" + }, + { + "stringValue": "st_WIF" + }, + { + "stringValue": "st_WJA" + }, + { + "stringValue": "st_WSG" + }, + { + "stringValue": "st_WSN" + }, + { + "stringValue": "st_YB" + } + ] + } + }, + "st_CKS": { + "arrayValue": { + "values": [ + { + "stringValue": "st_AAH" + }, + { + "stringValue": "st_AAL" + }, + { + "stringValue": "st_AAY" + }, + { + "stringValue": "st_ABX" + }, + { + "stringValue": "st_ACO" + }, + { + "stringValue": "st_AER" + }, + { + "stringValue": "st_AJI" + }, + { + "stringValue": "st_AJT" + }, + { + "stringValue": "st_AMF" + }, + { + "stringValue": "st_ASA" + }, + { + "stringValue": "st_ASH" + }, + { + "stringValue": "st_ASQ" + }, + { + "stringValue": "st_ATN" + }, + { + "stringValue": "st_AWI" + }, + { + "stringValue": "st_BAW" + }, + { + "stringValue": "st_BRG" + }, + { + "stringValue": "st_BSK" + }, + { + "stringValue": "st_BTQ" + }, + { + "stringValue": "st_BTZ" + }, + { + "stringValue": "st_CFS" + }, + { + "stringValue": "st_CHQ" + }, + { + "stringValue": "st_CIR" + }, + { + "stringValue": "st_CKS" + }, + { + "stringValue": "st_CPT" + }, + { + "stringValue": "st_CSB" + }, + { + "stringValue": "st_CYO" + }, + { + "stringValue": "st_DAL" + }, + { + "stringValue": "st_EAL" + }, + { + "stringValue": "st_EDV" + }, + { + "stringValue": "st_EJA" + }, + { + "stringValue": "st_ENY" + }, + { + "stringValue": "st_FDX" + }, + { + "stringValue": "st_FDY" + }, + { + "stringValue": "st_FFT" + }, + { + "stringValue": "st_FRG" + }, + { + "stringValue": "st_FWL" + }, + { + "stringValue": "st_GJS" + }, + { + "stringValue": "st_GPD" + }, + { + "stringValue": "st_GTI" + }, + { + "stringValue": "st_HAL" + }, + { + "stringValue": "st_HPJ" + }, + { + "stringValue": "st_IFL" + }, + { + "stringValue": "st_JBU" + }, + { + "stringValue": "st_JIA" + }, + { + "stringValue": "st_JNY" + }, + { + "stringValue": "st_JST" + }, + { + "stringValue": "st_JSX" + }, + { + "stringValue": "st_JUS" + }, + { + "stringValue": "st_KAI" + }, + { + "stringValue": "st_KAP" + }, + { + "stringValue": "st_KFS" + }, + { + "stringValue": "st_KII" + }, + { + "stringValue": "st_KYE" + }, + { + "stringValue": "st_LAN" + }, + { + "stringValue": "st_LOF" + }, + { + "stringValue": "st_LYC" + }, + { + "stringValue": "st_MGE" + }, + { + "stringValue": "st_MHO" + }, + { + "stringValue": "st_MKU" + }, + { + "stringValue": "st_MNU" + }, + { + "stringValue": "st_MTN" + }, + { + "stringValue": "st_MXY" + }, + { + "stringValue": "st_NAC" + }, + { + "stringValue": "st_NCR" + }, + { + "stringValue": "st_NKS" + }, + { + "stringValue": "st_NLA" + }, + { + "stringValue": "st_OAE" + }, + { + "stringValue": "st_PAC" + }, + { + "stringValue": "st_PDT" + }, + { + "stringValue": "st_QFA" + }, + { + "stringValue": "st_QXE" + }, + { + "stringValue": "st_RKA" + }, + { + "stringValue": "st_RPA" + }, + { + "stringValue": "st_RVF" + }, + { + "stringValue": "st_RYA" + }, + { + "stringValue": "st_SBS" + }, + { + "stringValue": "st_SCE" + }, + { + "stringValue": "st_SCX" + }, + { + "stringValue": "st_SIL" + }, + { + "stringValue": "st_SKW" + }, + { + "stringValue": "st_SKZ" + }, + { + "stringValue": "st_SNC" + }, + { + "stringValue": "st_SOO" + }, + { + "stringValue": "st_SPA" + }, + { + "stringValue": "st_STT" + }, + { + "stringValue": "st_SWA" + }, + { + "stringValue": "st_SWQ" + }, + { + "stringValue": "st_UAL" + }, + { + "stringValue": "st_UCA" + }, + { + "stringValue": "st_UPS" + }, + { + "stringValue": "st_USC" + }, + { + "stringValue": "st_VOZ" + }, + { + "stringValue": "st_VTE" + }, + { + "stringValue": "st_VTS" + }, + { + "stringValue": "st_VXP" + }, + { + "stringValue": "st_WAF" + }, + { + "stringValue": "st_WAL" + }, + { + "stringValue": "st_WAV" + }, + { + "stringValue": "st_WGN" + } + ] + } + }, + "st_CLX": { + "arrayValue": { + "values": [ + { + "stringValue": "st_BEL" + }, + { + "stringValue": "st_CFG" + }, + { + "stringValue": "st_FIN" + }, + { + "stringValue": "st_JBU" + }, + { + "stringValue": "st_LGL" + }, + { + "stringValue": "st_LOT" + }, + { + "stringValue": "st_OMA" + }, + { + "stringValue": "st_QFA" + } + ] + } + }, + "st_ASQ": { + "arrayValue": { + "values": [ + { + "stringValue": "st_DAL" + }, + { + "stringValue": "st_SWA" + }, + { + "stringValue": "st_UAL" + } + ] + } + }, + "st_QXE": { + "arrayValue": { + "values": [ + { + "stringValue": "st_AAL" + }, + { + "stringValue": "st_AAR" + }, + { + "stringValue": "st_AAY" + }, + { + "stringValue": "st_ACA" + }, + { + "stringValue": "st_ANA" + }, + { + "stringValue": "st_ASA" + }, + { + "stringValue": "st_BAW" + }, + { + "stringValue": "st_CPA" + }, + { + "stringValue": "st_DAL" + }, + { + "stringValue": "st_DLH" + }, + { + "stringValue": "st_EIN" + }, + { + "stringValue": "st_EVA" + }, + { + "stringValue": "st_FFT" + }, + { + "stringValue": "st_HAL" + }, + { + "stringValue": "st_ITY" + }, + { + "stringValue": "st_JAL" + }, + { + "stringValue": "st_JBU" + }, + { + "stringValue": "st_KAL" + }, + { + "stringValue": "st_PAL" + }, + { + "stringValue": "st_QFA" + }, + { + "stringValue": "st_SJX" + }, + { + "stringValue": "st_SWA" + }, + { + "stringValue": "st_SWR" + }, + { + "stringValue": "st_UAL" + } + ] + } + }, + "st_DLA": { + "arrayValue": { + "values": [ + { + "stringValue": "st_AAL" + }, + { + "stringValue": "st_ACA" + }, + { + "stringValue": "st_AEA" + }, + { + "stringValue": "st_AFR" + }, + { + "stringValue": "st_ASA" + }, + { + "stringValue": "st_BAW" + }, + { + "stringValue": "st_CFG" + }, + { + "stringValue": "st_CPA" + }, + { + "stringValue": "st_DAL" + }, + { + "stringValue": "st_DLH" + }, + { + "stringValue": "st_ETD" + }, + { + "stringValue": "st_EVA" + }, + { + "stringValue": "st_FIN" + }, + { + "stringValue": "st_IBE" + }, + { + "stringValue": "st_ICE" + }, + { + "stringValue": "st_ITY" + }, + { + "stringValue": "st_LAN" + }, + { + "stringValue": "st_LGL" + }, + { + "stringValue": "st_LOT" + }, + { + "stringValue": "st_QFA" + }, + { + "stringValue": "st_QTR" + }, + { + "stringValue": "st_SAS" + }, + { + "stringValue": "st_SWA" + }, + { + "stringValue": "st_TAP" + }, + { + "stringValue": "st_THA" + }, + { + "stringValue": "st_THY" + }, + { + "stringValue": "st_UAE" + }, + { + "stringValue": "st_UAL" + }, + { + "stringValue": "st_VLG" + } + ] + } + }, + "st_ACA": { + "arrayValue": { + "values": [ + { + "stringValue": "st_4T" + }, + { + "stringValue": "st_AAH" + }, + { + "stringValue": "st_AAL" + }, + { + "stringValue": "st_AAR" + }, + { + "stringValue": "st_AAY" + }, + { + "stringValue": "st_ABX" + }, + { + "stringValue": "st_ABY" + }, + { + "stringValue": "st_ACA" + }, + { + "stringValue": "st_ACI" + }, + { + "stringValue": "st_ACO" + }, + { + "stringValue": "st_AEA" + }, + { + "stringValue": "st_AEE" + }, + { + "stringValue": "st_AER" + }, + { + "stringValue": "st_AFR" + }, + { + "stringValue": "st_AIC" + }, + { + "stringValue": "st_AIE" + }, + { + "stringValue": "st_AIZ" + }, + { + "stringValue": "st_AJI" + }, + { + "stringValue": "st_AJT" + }, + { + "stringValue": "st_AKT" + }, + { + "stringValue": "st_ALK" + }, + { + "stringValue": "st_AMF" + }, + { + "stringValue": "st_AMX" + }, + { + "stringValue": "st_ANA" + }, + { + "stringValue": "st_ANT" + }, + { + "stringValue": "st_ANZ" + }, + { + "stringValue": "st_ARG" + }, + { + "stringValue": "st_ASA" + }, + { + "stringValue": "st_ASH" + }, + { + "stringValue": "st_ASL" + }, + { + "stringValue": "st_ATN" + }, + { + "stringValue": "st_AUA" + }, + { + "stringValue": "st_AVA" + }, + { + "stringValue": "st_AWI" + }, + { + "stringValue": "st_AZU" + }, + { + "stringValue": "st_BAW" + }, + { + "stringValue": "st_BEE" + }, + { + "stringValue": "st_BEL" + }, + { + "stringValue": "st_BKP" + }, + { + "stringValue": "st_BLS" + }, + { + "stringValue": "st_BRG" + }, + { + "stringValue": "st_BTI" + }, + { + "stringValue": "st_BTQ" + }, + { + "stringValue": "st_BWA" + }, + { + "stringValue": "st_CAL" + }, + { + "stringValue": "st_CAV" + }, + { + "stringValue": "st_CAY" + }, + { + "stringValue": "st_CCM" + }, + { + "stringValue": "st_CES" + }, + { + "stringValue": "st_CFG" + }, + { + "stringValue": "st_CFS" + }, + { + "stringValue": "st_CJT" + }, + { + "stringValue": "st_CKS" + }, + { + "stringValue": "st_CMP" + }, + { + "stringValue": "st_CNF" + }, + { + "stringValue": "st_CPA" + }, + { + "stringValue": "st_CRK" + }, + { + "stringValue": "st_CRL" + }, + { + "stringValue": "st_CRQ" + }, + { + "stringValue": "st_CSA" + }, + { + "stringValue": "st_CSB" + }, + { + "stringValue": "st_CSH" + }, + { + "stringValue": "st_CSZ" + }, + { + "stringValue": "st_CTN" + }, + { + "stringValue": "st_DAL" + }, + { + "stringValue": "st_DJT" + }, + { + "stringValue": "st_DLA" + }, + { + "stringValue": "st_DLH" + }, + { + "stringValue": "st_EAL" + }, + { + "stringValue": "st_ECA" + }, + { + "stringValue": "st_EDV" + }, + { + "stringValue": "st_EDW" + }, + { + "stringValue": "st_EIN" + }, + { + "stringValue": "st_ELY" + }, + { + "stringValue": "st_ENY" + }, + { + "stringValue": "st_ETD" + }, + { + "stringValue": "st_ETH" + }, + { + "stringValue": "st_EVA" + }, + { + "stringValue": "st_EWG" + }, + { + "stringValue": "st_FBU" + }, + { + "stringValue": "st_FC" + }, + { + "stringValue": "st_FDB" + }, + { + "stringValue": "st_FDX" + }, + { + "stringValue": "st_FDY" + }, + { + "stringValue": "st_FFT" + }, + { + "stringValue": "st_FIN" + }, + { + "stringValue": "st_FJI" + }, + { + "stringValue": "st_FLE" + }, + { + "stringValue": "st_FRG" + }, + { + "stringValue": "st_FTO" + }, + { + "stringValue": "st_FWI" + }, + { + "stringValue": "st_GBG" + }, + { + "stringValue": "st_GFA" + }, + { + "stringValue": "st_GJS" + }, + { + "stringValue": "st_GLA" + }, + { + "stringValue": "st_GLO" + }, + { + "stringValue": "st_GLR" + }, + { + "stringValue": "st_GPD" + }, + { + "stringValue": "st_GTI" + }, + { + "stringValue": "st_GUN" + }, + { + "stringValue": "st_GWI" + }, + { + "stringValue": "st_GZ" + }, + { + "stringValue": "st_HAL" + }, + { + "stringValue": "st_HDA" + }, + { + "stringValue": "st_HI" + }, + { + "stringValue": "st_HKE" + }, + { + "stringValue": "st_HOP" + }, + { + "stringValue": "st_HVN" + }, + { + "stringValue": "st_IBB" + }, + { + "stringValue": "st_IBE" + }, + { + "stringValue": "st_ICE" + }, + { + "stringValue": "st_IFL" + }, + { + "stringValue": "st_IGO" + }, + { + "stringValue": "st_ISR" + }, + { + "stringValue": "st_ISS" + }, + { + "stringValue": "st_ITY" + }, + { + "stringValue": "st_J5" + }, + { + "stringValue": "st_JAL" + }, + { + "stringValue": "st_JBA" + }, + { + "stringValue": "st_JBU" + }, + { + "stringValue": "st_JIA" + }, + { + "stringValue": "st_JJP" + }, + { + "stringValue": "st_JST" + }, + { + "stringValue": "st_JSX" + }, + { + "stringValue": "st_JUS" + }, + { + "stringValue": "st_JZA" + }, + { + "stringValue": "st_KAC" + }, + { + "stringValue": "st_KAL" + }, + { + "stringValue": "st_KAP" + }, + { + "stringValue": "st_KEN" + }, + { + "stringValue": "st_KFA" + }, + { + "stringValue": "st_KFS" + }, + { + "stringValue": "st_KII" + }, + { + "stringValue": "st_KLM" + }, + { + "stringValue": "st_KMM" + }, + { + "stringValue": "st_KQA" + }, + { + "stringValue": "st_KYE" + }, + { + "stringValue": "st_LAN" + }, + { + "stringValue": "st_LGL" + }, + { + "stringValue": "st_LIA" + }, + { + "stringValue": "st_LOG" + }, + { + "stringValue": "st_LOT" + }, + { + "stringValue": "st_LRC" + }, + { + "stringValue": "st_LYC" + }, + { + "stringValue": "st_MAS" + }, + { + "stringValue": "st_MAU" + }, + { + "stringValue": "st_MDA" + }, + { + "stringValue": "st_MEA" + }, + { + "stringValue": "st_MGE" + }, + { + "stringValue": "st_MNU" + }, + { + "stringValue": "st_MSR" + }, + { + "stringValue": "st_MTN" + }, + { + "stringValue": "st_MXY" + }, + { + "stringValue": "st_NAC" + }, + { + "stringValue": "st_NCR" + }, + { + "stringValue": "st_NKS" + }, + { + "stringValue": "st_NLA" + }, + { + "stringValue": "st_NMB" + }, + { + "stringValue": "st_OAE" + }, + { + "stringValue": "st_OCN" + }, + { + "stringValue": "st_OMA" + }, + { + "stringValue": "st_ONE" + }, + { + "stringValue": "st_PAC" + }, + { + "stringValue": "st_PAG" + }, + { + "stringValue": "st_PAL" + }, + { + "stringValue": "st_PCO" + }, + { + "stringValue": "st_PDT" + }, + { + "stringValue": "st_PGT" + }, + { + "stringValue": "st_PIA" + }, + { + "stringValue": "st_POE" + }, + { + "stringValue": "st_POE_2025" + }, + { + "stringValue": "st_PRO" + }, + { + "stringValue": "st_PSC" + }, + { + "stringValue": "st_PVL" + }, + { + "stringValue": "st_QFA" + }, + { + "stringValue": "st_QLK" + }, + { + "stringValue": "st_QTR" + }, + { + "stringValue": "st_QXE" + }, + { + "stringValue": "st_RAM" + }, + { + "stringValue": "st_RBA" + }, + { + "stringValue": "st_REU" + }, + { + "stringValue": "st_RJA" + }, + { + "stringValue": "st_ROU" + }, + { + "stringValue": "st_RPA" + }, + { + "stringValue": "st_RVF" + }, + { + "stringValue": "st_RWD" + }, + { + "stringValue": "st_RYA" + }, + { + "stringValue": "st_RZO" + }, + { + "stringValue": "st_SAA" + }, + { + "stringValue": "st_SAS" + }, + { + "stringValue": "st_SBS" + }, + { + "stringValue": "st_SCE" + }, + { + "stringValue": "st_SCX" + }, + { + "stringValue": "st_SEY" + }, + { + "stringValue": "st_SIA" + }, + { + "stringValue": "st_SIL" + }, + { + "stringValue": "st_SJX" + }, + { + "stringValue": "st_SKU" + }, + { + "stringValue": "st_SKW" + }, + { + "stringValue": "st_SKZ" + }, + { + "stringValue": "st_SNC" + }, + { + "stringValue": "st_SPR" + }, + { + "stringValue": "st_SVA" + }, + { + "stringValue": "st_SWA" + }, + { + "stringValue": "st_SWG" + }, + { + "stringValue": "st_SWR" + }, + { + "stringValue": "st_SXS" + }, + { + "stringValue": "st_TAI" + }, + { + "stringValue": "st_TAP" + }, + { + "stringValue": "st_TAR" + }, + { + "stringValue": "st_TGG" + }, + { + "stringValue": "st_THA" + }, + { + "stringValue": "st_THT" + }, + { + "stringValue": "st_THY" + }, + { + "stringValue": "st_TIN" + }, + { + "stringValue": "st_TOS" + }, + { + "stringValue": "st_TRA" + }, + { + "stringValue": "st_TSC" + }, + { + "stringValue": "st_TTW" + }, + { + "stringValue": "st_TUI" + }, + { + "stringValue": "st_TVF" + }, + { + "stringValue": "st_TVS" + }, + { + "stringValue": "st_UAE" + }, + { + "stringValue": "st_UAL" + }, + { + "stringValue": "st_UCA" + }, + { + "stringValue": "st_UPS" + }, + { + "stringValue": "st_USC" + }, + { + "stringValue": "st_VES" + }, + { + "stringValue": "st_VIR" + }, + { + "stringValue": "st_VIV" + }, + { + "stringValue": "st_VJH" + }, + { + "stringValue": "st_VLG" + }, + { + "stringValue": "st_VOE" + }, + { + "stringValue": "st_VOZ" + }, + { + "stringValue": "st_VRE" + }, + { + "stringValue": "st_VTA" + }, + { + "stringValue": "st_VTE" + }, + { + "stringValue": "st_VTI" + }, + { + "stringValue": "st_VTS" + }, + { + "stringValue": "st_VXP" + }, + { + "stringValue": "st_WAF" + }, + { + "stringValue": "st_WAV" + }, + { + "stringValue": "st_WEN" + }, + { + "stringValue": "st_WGN" + }, + { + "stringValue": "st_WIA" + }, + { + "stringValue": "st_WIF" + }, + { + "stringValue": "st_WJA" + }, + { + "stringValue": "st_WSG" + }, + { + "stringValue": "st_WSW" + }, + { + "stringValue": "st_XBO" + }, + { + "stringValue": "st_YB" + } + ] + } + }, + "st_AAL": { + "arrayValue": { + "values": [ + { + "stringValue": "st_AAF" + }, + { + "stringValue": "st_AAL" + }, + { + "stringValue": "st_AAR" + }, + { + "stringValue": "st_AAY" + }, + { + "stringValue": "st_ABX" + }, + { + "stringValue": "st_ACA" + }, + { + "stringValue": "st_ACI" + }, + { + "stringValue": "st_ADR" + }, + { + "stringValue": "st_ADY" + }, + { + "stringValue": "st_AEA" + }, + { + "stringValue": "st_AEE" + }, + { + "stringValue": "st_AFL" + }, + { + "stringValue": "st_AFR" + }, + { + "stringValue": "st_AIC" + }, + { + "stringValue": "st_AIE" + }, + { + "stringValue": "st_AIZ" + }, + { + "stringValue": "st_AJX" + }, + { + "stringValue": "st_AKT" + }, + { + "stringValue": "st_ALK" + }, + { + "stringValue": "st_AMF" + }, + { + "stringValue": "st_AMX" + }, + { + "stringValue": "st_ANA" + }, + { + "stringValue": "st_ANE" + }, + { + "stringValue": "st_ANG" + }, + { + "stringValue": "st_ANT" + }, + { + "stringValue": "st_ANZ" + }, + { + "stringValue": "st_APZ" + }, + { + "stringValue": "st_ARG" + }, + { + "stringValue": "st_ASA" + }, + { + "stringValue": "st_ASH" + }, + { + "stringValue": "st_ASL" + }, + { + "stringValue": "st_AUA" + }, + { + "stringValue": "st_AVA" + }, + { + "stringValue": "st_AWI" + }, + { + "stringValue": "st_AZU" + }, + { + "stringValue": "st_BAW" + }, + { + "stringValue": "st_BCY" + }, + { + "stringValue": "st_BEE" + }, + { + "stringValue": "st_BEL" + }, + { + "stringValue": "st_BHS" + }, + { + "stringValue": "st_BKP" + }, + { + "stringValue": "st_BLA" + }, + { + "stringValue": "st_BLS" + }, + { + "stringValue": "st_BTI" + }, + { + "stringValue": "st_BTQ" + }, + { + "stringValue": "st_BWA" + }, + { + "stringValue": "st_CAL" + }, + { + "stringValue": "st_CAY" + }, + { + "stringValue": "st_CCA" + }, + { + "stringValue": "st_CES" + }, + { + "stringValue": "st_CFG" + }, + { + "stringValue": "st_CFS" + }, + { + "stringValue": "st_CKS" + }, + { + "stringValue": "st_CMP" + }, + { + "stringValue": "st_CPA" + }, + { + "stringValue": "st_CRK" + }, + { + "stringValue": "st_CRL" + }, + { + "stringValue": "st_CRQ" + }, + { + "stringValue": "st_CS" + }, + { + "stringValue": "st_CSA" + }, + { + "stringValue": "st_CSH" + }, + { + "stringValue": "st_CTN" + }, + { + "stringValue": "st_DAL" + }, + { + "stringValue": "st_DJT" + }, + { + "stringValue": "st_DLA" + }, + { + "stringValue": "st_DLH" + }, + { + "stringValue": "st_DSM" + }, + { + "stringValue": "st_DTR" + }, + { + "stringValue": "st_DWI" + }, + { + "stringValue": "st_EAL" + }, + { + "stringValue": "st_EDV" + }, + { + "stringValue": "st_EDW" + }, + { + "stringValue": "st_EIN" + }, + { + "stringValue": "st_ELY" + }, + { + "stringValue": "st_ENY" + }, + { + "stringValue": "st_ETD" + }, + { + "stringValue": "st_ETH" + }, + { + "stringValue": "st_EVA" + }, + { + "stringValue": "st_EWE" + }, + { + "stringValue": "st_EWG" + }, + { + "stringValue": "st_EXV" + }, + { + "stringValue": "st_EZY" + }, + { + "stringValue": "st_FBU" + }, + { + "stringValue": "st_FC" + }, + { + "stringValue": "st_FDB" + }, + { + "stringValue": "st_FDX" + }, + { + "stringValue": "st_FDY" + }, + { + "stringValue": "st_FFT" + }, + { + "stringValue": "st_FIN" + }, + { + "stringValue": "st_FJI" + }, + { + "stringValue": "st_FLE" + }, + { + "stringValue": "st_FOO" + }, + { + "stringValue": "st_FWI" + }, + { + "stringValue": "st_GFA" + }, + { + "stringValue": "st_GIA" + }, + { + "stringValue": "st_GJS" + }, + { + "stringValue": "st_GLG" + }, + { + "stringValue": "st_GLO" + }, + { + "stringValue": "st_GPD" + }, + { + "stringValue": "st_GRL" + }, + { + "stringValue": "st_GTI" + }, + { + "stringValue": "st_GWI" + }, + { + "stringValue": "st_GZ" + }, + { + "stringValue": "st_HAL" + }, + { + "stringValue": "st_HI" + }, + { + "stringValue": "st_HKE" + }, + { + "stringValue": "st_HOP" + }, + { + "stringValue": "st_HVN" + }, + { + "stringValue": "st_IBB" + }, + { + "stringValue": "st_IBE" + }, + { + "stringValue": "st_ICE" + }, + { + "stringValue": "st_IGO" + }, + { + "stringValue": "st_ISR" + }, + { + "stringValue": "st_ITY" + }, + { + "stringValue": "st_JAL" + }, + { + "stringValue": "st_JBU" + }, + { + "stringValue": "st_JIA" + }, + { + "stringValue": "st_JJP" + }, + { + "stringValue": "st_JSA" + }, + { + "stringValue": "st_JST" + }, + { + "stringValue": "st_JSX" + }, + { + "stringValue": "st_JTA" + }, + { + "stringValue": "st_JZA" + }, + { + "stringValue": "st_JZR" + }, + { + "stringValue": "st_KAC" + }, + { + "stringValue": "st_KAL" + }, + { + "stringValue": "st_KAP" + }, + { + "stringValue": "st_KII" + }, + { + "stringValue": "st_KLM" + }, + { + "stringValue": "st_KMM" + }, + { + "stringValue": "st_KNE" + }, + { + "stringValue": "st_KQA" + }, + { + "stringValue": "st_KZR" + }, + { + "stringValue": "st_LAN" + }, + { + "stringValue": "st_LGL" + }, + { + "stringValue": "st_LHX" + }, + { + "stringValue": "st_LIA" + }, + { + "stringValue": "st_LNE" + }, + { + "stringValue": "st_LOG" + }, + { + "stringValue": "st_LOT" + }, + { + "stringValue": "st_LVL" + }, + { + "stringValue": "st_LYM" + }, + { + "stringValue": "st_MAC" + }, + { + "stringValue": "st_MAS" + }, + { + "stringValue": "st_MAU" + }, + { + "stringValue": "st_MEA" + }, + { + "stringValue": "st_MGL" + }, + { + "stringValue": "st_MMM" + }, + { + "stringValue": "st_MSR" + }, + { + "stringValue": "st_MXY" + }, + { + "stringValue": "st_NKS" + }, + { + "stringValue": "st_NMB" + }, + { + "stringValue": "st_NWK" + }, + { + "stringValue": "st_OAL" + }, + { + "stringValue": "st_OAW" + }, + { + "stringValue": "st_OCN" + }, + { + "stringValue": "st_OMA" + }, + { + "stringValue": "st_ONE" + }, + { + "stringValue": "st_PAG" + }, + { + "stringValue": "st_PAL" + }, + { + "stringValue": "st_PDT" + }, + { + "stringValue": "st_PIA" + }, + { + "stringValue": "st_POE" + }, + { + "stringValue": "st_POE_2025" + }, + { + "stringValue": "st_PSC" + }, + { + "stringValue": "st_QFA" + }, + { + "stringValue": "st_QLK" + }, + { + "stringValue": "st_QTR" + }, + { + "stringValue": "st_QXE" + }, + { + "stringValue": "st_RAM" + }, + { + "stringValue": "st_RJA" + }, + { + "stringValue": "st_RPA" + }, + { + "stringValue": "st_RPB" + }, + { + "stringValue": "st_RVF" + }, + { + "stringValue": "st_RYR" + }, + { + "stringValue": "st_RZO" + }, + { + "stringValue": "st_SAA" + }, + { + "stringValue": "st_SAS" + }, + { + "stringValue": "st_SAT" + }, + { + "stringValue": "st_SBI" + }, + { + "stringValue": "st_SBS" + }, + { + "stringValue": "st_SCX" + }, + { + "stringValue": "st_SEY" + }, + { + "stringValue": "st_SIA" + }, + { + "stringValue": "st_SIL" + }, + { + "stringValue": "st_SJX" + }, + { + "stringValue": "st_SKK" + }, + { + "stringValue": "st_SKW" + }, + { + "stringValue": "st_SVA" + }, + { + "stringValue": "st_SWA" + }, + { + "stringValue": "st_SWR" + }, + { + "stringValue": "st_TAP" + }, + { + "stringValue": "st_THA" + }, + { + "stringValue": "st_THT" + }, + { + "stringValue": "st_THY" + }, + { + "stringValue": "st_TIN" + }, + { + "stringValue": "st_TPC" + }, + { + "stringValue": "st_TRA" + }, + { + "stringValue": "st_TSC" + }, + { + "stringValue": "st_TUI" + }, + { + "stringValue": "st_TVF" + }, + { + "stringValue": "st_TVS" + }, + { + "stringValue": "st_TZP" + }, + { + "stringValue": "st_UAE" + }, + { + "stringValue": "st_UAL" + }, + { + "stringValue": "st_UCA" + }, + { + "stringValue": "st_UPS" + }, + { + "stringValue": "st_VIR" + }, + { + "stringValue": "st_VIV" + }, + { + "stringValue": "st_VLG" + }, + { + "stringValue": "st_VOE" + }, + { + "stringValue": "st_VOI" + }, + { + "stringValue": "st_VOZ" + }, + { + "stringValue": "st_VRD" + }, + { + "stringValue": "st_VRE" + }, + { + "stringValue": "st_VTA" + }, + { + "stringValue": "st_VTE" + }, + { + "stringValue": "st_VXP" + }, + { + "stringValue": "st_WEN" + }, + { + "stringValue": "st_WIF" + }, + { + "stringValue": "st_WJA" + } + ] + } + }, + "st_FAD": { + "arrayValue": { + "values": [ + { + "stringValue": "st_ETD" + } + ] + } + }, + "st_CFG": { + "arrayValue": { + "values": [ + { + "stringValue": "st_AAL" + }, + { + "stringValue": "st_AAY" + }, + { + "stringValue": "st_ABY" + }, + { + "stringValue": "st_ACA" + }, + { + "stringValue": "st_ACO" + }, + { + "stringValue": "st_AEA" + }, + { + "stringValue": "st_AEE" + }, + { + "stringValue": "st_AFR" + }, + { + "stringValue": "st_AIE" + }, + { + "stringValue": "st_AIZ" + }, + { + "stringValue": "st_AKT" + }, + { + "stringValue": "st_AMX" + }, + { + "stringValue": "st_ANE" + }, + { + "stringValue": "st_ANT" + }, + { + "stringValue": "st_ARG" + }, + { + "stringValue": "st_ASA" + }, + { + "stringValue": "st_ASH" + }, + { + "stringValue": "st_AUA" + }, + { + "stringValue": "st_AVA" + }, + { + "stringValue": "st_AZU" + }, + { + "stringValue": "st_BAW" + }, + { + "stringValue": "st_BCS" + }, + { + "stringValue": "st_BCY" + }, + { + "stringValue": "st_BEL" + }, + { + "stringValue": "st_BHS" + }, + { + "stringValue": "st_BKP" + }, + { + "stringValue": "st_BLA" + }, + { + "stringValue": "st_BLS" + }, + { + "stringValue": "st_BOX" + }, + { + "stringValue": "st_BRX" + }, + { + "stringValue": "st_BTI" + }, + { + "stringValue": "st_BTQ" + }, + { + "stringValue": "st_BWA" + }, + { + "stringValue": "st_CAI" + }, + { + "stringValue": "st_CAV" + }, + { + "stringValue": "st_CAW" + }, + { + "stringValue": "st_CAY" + }, + { + "stringValue": "st_CCM" + }, + { + "stringValue": "st_CFG" + }, + { + "stringValue": "st_CIR" + }, + { + "stringValue": "st_CLX" + }, + { + "stringValue": "st_CMP" + }, + { + "stringValue": "st_CNF" + }, + { + "stringValue": "st_COM" + }, + { + "stringValue": "st_CPA" + }, + { + "stringValue": "st_CRK" + }, + { + "stringValue": "st_CRL" + }, + { + "stringValue": "st_CRQ" + }, + { + "stringValue": "st_CSA" + }, + { + "stringValue": "st_CTN" + }, + { + "stringValue": "st_CYL" + }, + { + "stringValue": "st_DAL" + }, + { + "stringValue": "st_DJT" + }, + { + "stringValue": "st_DLA" + }, + { + "stringValue": "st_DLH" + }, + { + "stringValue": "st_DQA" + }, + { + "stringValue": "st_DTR" + }, + { + "stringValue": "st_ECA" + }, + { + "stringValue": "st_EDV" + }, + { + "stringValue": "st_EDW" + }, + { + "stringValue": "st_ELY" + }, + { + "stringValue": "st_ETD" + }, + { + "stringValue": "st_ETH" + }, + { + "stringValue": "st_EVA" + }, + { + "stringValue": "st_EWE" + }, + { + "stringValue": "st_EWG" + }, + { + "stringValue": "st_FBU" + }, + { + "stringValue": "st_FCM" + }, + { + "stringValue": "st_FDB" + }, + { + "stringValue": "st_FDY" + }, + { + "stringValue": "st_FEG" + }, + { + "stringValue": "st_FIN" + }, + { + "stringValue": "st_FLE" + }, + { + "stringValue": "st_FLI" + }, + { + "stringValue": "st_FPO" + }, + { + "stringValue": "st_FTA" + }, + { + "stringValue": "st_FWI" + }, + { + "stringValue": "st_GFA" + }, + { + "stringValue": "st_GJS" + }, + { + "stringValue": "st_GLO" + }, + { + "stringValue": "st_GPD" + }, + { + "stringValue": "st_GRL" + }, + { + "stringValue": "st_GZ" + }, + { + "stringValue": "st_HAL" + }, + { + "stringValue": "st_HI" + }, + { + "stringValue": "st_HVN" + }, + { + "stringValue": "st_IBB" + }, + { + "stringValue": "st_IBE" + }, + { + "stringValue": "st_ICE" + }, + { + "stringValue": "st_ISR" + }, + { + "stringValue": "st_ITY" + }, + { + "stringValue": "st_IYE" + }, + { + "stringValue": "st_JBU" + }, + { + "stringValue": "st_JJP" + }, + { + "stringValue": "st_JSA" + }, + { + "stringValue": "st_JST" + }, + { + "stringValue": "st_JZR" + }, + { + "stringValue": "st_KAC" + }, + { + "stringValue": "st_KAP" + }, + { + "stringValue": "st_KLM" + }, + { + "stringValue": "st_KQA" + }, + { + "stringValue": "st_LAN" + }, + { + "stringValue": "st_LGL" + }, + { + "stringValue": "st_LHX" + }, + { + "stringValue": "st_LIA" + }, + { + "stringValue": "st_LOG" + }, + { + "stringValue": "st_LOT" + }, + { + "stringValue": "st_MAU" + }, + { + "stringValue": "st_MBU" + }, + { + "stringValue": "st_MEA" + }, + { + "stringValue": "st_MGX" + }, + { + "stringValue": "st_MHO" + }, + { + "stringValue": "st_MMD" + }, + { + "stringValue": "st_NDA" + }, + { + "stringValue": "st_NGN" + }, + { + "stringValue": "st_NKS" + }, + { + "stringValue": "st_NOZ" + }, + { + "stringValue": "st_OAW" + }, + { + "stringValue": "st_OCN" + }, + { + "stringValue": "st_OMA" + }, + { + "stringValue": "st_PAG" + }, + { + "stringValue": "st_PCO" + }, + { + "stringValue": "st_PEV" + }, + { + "stringValue": "st_PGA" + }, + { + "stringValue": "st_QFA" + }, + { + "stringValue": "st_QLK" + }, + { + "stringValue": "st_QTR" + }, + { + "stringValue": "st_QXE" + }, + { + "stringValue": "st_RBA" + }, + { + "stringValue": "st_REU" + }, + { + "stringValue": "st_RJA" + }, + { + "stringValue": "st_ROU" + }, + { + "stringValue": "st_RPA" + }, + { + "stringValue": "st_RPB" + }, + { + "stringValue": "st_RSP" + }, + { + "stringValue": "st_RVF" + }, + { + "stringValue": "st_SAA" + }, + { + "stringValue": "st_SAS" + }, + { + "stringValue": "st_SAT" + }, + { + "stringValue": "st_SBI" + }, + { + "stringValue": "st_SCE" + }, + { + "stringValue": "st_SCX" + }, + { + "stringValue": "st_SIL" + }, + { + "stringValue": "st_SKU" + }, + { + "stringValue": "st_SKW" + }, + { + "stringValue": "st_SLI" + }, + { + "stringValue": "st_SVA" + }, + { + "stringValue": "st_SWA" + }, + { + "stringValue": "st_SWR" + }, + { + "stringValue": "st_SXS" + }, + { + "stringValue": "st_TAP" + }, + { + "stringValue": "st_TCV" + }, + { + "stringValue": "st_THA" + }, + { + "stringValue": "st_THY" + }, + { + "stringValue": "st_TOS" + }, + { + "stringValue": "st_TPC" + }, + { + "stringValue": "st_TRA" + }, + { + "stringValue": "st_TTW" + }, + { + "stringValue": "st_TUI" + }, + { + "stringValue": "st_TVF" + }, + { + "stringValue": "st_TVS" + }, + { + "stringValue": "st_UAE" + }, + { + "stringValue": "st_UAL" + }, + { + "stringValue": "st_UCA" + }, + { + "stringValue": "st_VIR" + }, + { + "stringValue": "st_VJH" + }, + { + "stringValue": "st_VLG" + }, + { + "stringValue": "st_VOE" + }, + { + "stringValue": "st_VRE" + }, + { + "stringValue": "st_VTE" + }, + { + "stringValue": "st_VTI" + }, + { + "stringValue": "st_WHT" + }, + { + "stringValue": "st_WIA" + }, + { + "stringValue": "st_WIF" + }, + { + "stringValue": "st_WJA" + }, + { + "stringValue": "st_YB" + } + ] + } + }, + "st_UAE": { + "arrayValue": { + "values": [ + { + "stringValue": "st_AAL" + }, + { + "stringValue": "st_AAR" + }, + { + "stringValue": "st_AAY" + }, + { + "stringValue": "st_ABY" + }, + { + "stringValue": "st_ACA" + }, + { + "stringValue": "st_AEA" + }, + { + "stringValue": "st_AEE" + }, + { + "stringValue": "st_AFR" + }, + { + "stringValue": "st_AIC" + }, + { + "stringValue": "st_AIE" + }, + { + "stringValue": "st_AIZ" + }, + { + "stringValue": "st_AMX" + }, + { + "stringValue": "st_ANA" + }, + { + "stringValue": "st_ANZ" + }, + { + "stringValue": "st_ARG" + }, + { + "stringValue": "st_ASA" + }, + { + "stringValue": "st_AUA" + }, + { + "stringValue": "st_AVA" + }, + { + "stringValue": "st_AZU" + }, + { + "stringValue": "st_BAW" + }, + { + "stringValue": "st_BCY" + }, + { + "stringValue": "st_BEL" + }, + { + "stringValue": "st_BKP" + }, + { + "stringValue": "st_BTI" + }, + { + "stringValue": "st_CAL" + }, + { + "stringValue": "st_CFG" + }, + { + "stringValue": "st_CMP" + }, + { + "stringValue": "st_CPA" + }, + { + "stringValue": "st_CRK" + }, + { + "stringValue": "st_CTN" + }, + { + "stringValue": "st_DAL" + }, + { + "stringValue": "st_DLA" + }, + { + "stringValue": "st_DLH" + }, + { + "stringValue": "st_EDW" + }, + { + "stringValue": "st_EIN" + }, + { + "stringValue": "st_ELY" + }, + { + "stringValue": "st_ETD" + }, + { + "stringValue": "st_ETH" + }, + { + "stringValue": "st_EVA" + }, + { + "stringValue": "st_EWE" + }, + { + "stringValue": "st_EWG" + }, + { + "stringValue": "st_FCM" + }, + { + "stringValue": "st_FDB" + }, + { + "stringValue": "st_FDX" + }, + { + "stringValue": "st_FFT" + }, + { + "stringValue": "st_FIN" + }, + { + "stringValue": "st_FJI" + }, + { + "stringValue": "st_FLE" + }, + { + "stringValue": "st_GLO" + }, + { + "stringValue": "st_HAL" + }, + { + "stringValue": "st_HKE" + }, + { + "stringValue": "st_IBE" + }, + { + "stringValue": "st_ICE" + }, + { + "stringValue": "st_ITY" + }, + { + "stringValue": "st_JAL" + }, + { + "stringValue": "st_JBU" + }, + { + "stringValue": "st_JST" + }, + { + "stringValue": "st_KAL" + }, + { + "stringValue": "st_KLM" + }, + { + "stringValue": "st_KNE" + }, + { + "stringValue": "st_KZR" + }, + { + "stringValue": "st_LAN" + }, + { + "stringValue": "st_LGL" + }, + { + "stringValue": "st_LOG" + }, + { + "stringValue": "st_LOT" + }, + { + "stringValue": "st_MAS" + }, + { + "stringValue": "st_NKS" + }, + { + "stringValue": "st_NOZ" + }, + { + "stringValue": "st_NSZ" + }, + { + "stringValue": "st_OAW" + }, + { + "stringValue": "st_OCN" + }, + { + "stringValue": "st_OMA" + }, + { + "stringValue": "st_PIA" + }, + { + "stringValue": "st_POE" + }, + { + "stringValue": "st_QFA" + }, + { + "stringValue": "st_QLK" + }, + { + "stringValue": "st_QTR" + }, + { + "stringValue": "st_RAM" + }, + { + "stringValue": "st_RPA" + }, + { + "stringValue": "st_RZO" + }, + { + "stringValue": "st_SAA" + }, + { + "stringValue": "st_SAS" + }, + { + "stringValue": "st_SCX" + }, + { + "stringValue": "st_SEY" + }, + { + "stringValue": "st_SJX" + }, + { + "stringValue": "st_SVA" + }, + { + "stringValue": "st_SWA" + }, + { + "stringValue": "st_SWR" + }, + { + "stringValue": "st_SXS" + }, + { + "stringValue": "st_TAP" + }, + { + "stringValue": "st_THY" + }, + { + "stringValue": "st_TRA" + }, + { + "stringValue": "st_TTW" + }, + { + "stringValue": "st_TVF" + }, + { + "stringValue": "st_TVS" + }, + { + "stringValue": "st_UAE" + }, + { + "stringValue": "st_UAE" + }, + { + "stringValue": "st_UAL" + }, + { + "stringValue": "st_UIA" + }, + { + "stringValue": "st_VIR" + }, + { + "stringValue": "st_VJH" + }, + { + "stringValue": "st_VJT" + }, + { + "stringValue": "st_VLG" + }, + { + "stringValue": "st_VOE" + }, + { + "stringValue": "st_VOZ" + }, + { + "stringValue": "st_WIF" + }, + { + "stringValue": "st_WJA" + } + ] + } + }, + "st_AZU": { + "arrayValue": { + "values": [ + { + "stringValue": "st_AAL" + }, + { + "stringValue": "st_AAY" + }, + { + "stringValue": "st_ACA" + }, + { + "stringValue": "st_AEA" + }, + { + "stringValue": "st_AFR" + }, + { + "stringValue": "st_AVA" + }, + { + "stringValue": "st_AZU" + }, + { + "stringValue": "st_AZU" + }, + { + "stringValue": "st_BAW" + }, + { + "stringValue": "st_BEL" + }, + { + "stringValue": "st_CMP" + }, + { + "stringValue": "st_DAL" + }, + { + "stringValue": "st_DLH" + }, + { + "stringValue": "st_ETD" + }, + { + "stringValue": "st_EWG" + }, + { + "stringValue": "st_FDB" + }, + { + "stringValue": "st_FDX" + }, + { + "stringValue": "st_FIN" + }, + { + "stringValue": "st_GLO" + }, + { + "stringValue": "st_IBE" + }, + { + "stringValue": "st_ITY" + }, + { + "stringValue": "st_JBU" + }, + { + "stringValue": "st_LAN" + }, + { + "stringValue": "st_NKS" + }, + { + "stringValue": "st_POE" + }, + { + "stringValue": "st_QTR" + }, + { + "stringValue": "st_SWA" + }, + { + "stringValue": "st_SWR" + }, + { + "stringValue": "st_TAP" + }, + { + "stringValue": "st_THY" + }, + { + "stringValue": "st_UAE" + }, + { + "stringValue": "st_UAL" + }, + { + "stringValue": "st_VLG" + }, + { + "stringValue": "st_WJA" + } + ] + } + }, + "st_GRL": { + "arrayValue": { + "values": [ + { + "stringValue": "st_AFR" + }, + { + "stringValue": "st_AUA" + }, + { + "stringValue": "st_CFG" + }, + { + "stringValue": "st_DLH" + }, + { + "stringValue": "st_ETD" + }, + { + "stringValue": "st_FIN" + }, + { + "stringValue": "st_ICE" + }, + { + "stringValue": "st_SAS" + }, + { + "stringValue": "st_SWR" + }, + { + "stringValue": "st_UAL" + } + ] + } + }, + "st_LVL": { + "arrayValue": { + "values": [ + { + "stringValue": "st_AAL" + }, + { + "stringValue": "st_VLG" + } + ] + } + }, + "st_RYR": { + "arrayValue": { + "values": [ + { + "stringValue": "st_AAL" + }, + { + "stringValue": "st_DAL" + }, + { + "stringValue": "st_DLH" + }, + { + "stringValue": "st_EIN" + }, + { + "stringValue": "st_ETD" + }, + { + "stringValue": "st_FIN" + }, + { + "stringValue": "st_IBE" + }, + { + "stringValue": "st_RYR" + }, + { + "stringValue": "st_RYR" + }, + { + "stringValue": "st_SWA" + }, + { + "stringValue": "st_UAL" + } + ] + } + }, + "st_KMM": { + "arrayValue": { + "values": [ + { + "stringValue": "st_AAL" + }, + { + "stringValue": "st_ACA" + }, + { + "stringValue": "st_AFR" + }, + { + "stringValue": "st_ASA" + }, + { + "stringValue": "st_BAW" + }, + { + "stringValue": "st_CPA" + }, + { + "stringValue": "st_DLH" + }, + { + "stringValue": "st_ETD" + }, + { + "stringValue": "st_FIN" + }, + { + "stringValue": "st_SWA" + }, + { + "stringValue": "st_SWR" + }, + { + "stringValue": "st_THY" + }, + { + "stringValue": "st_UAL" + } + ] + } + }, + "st_HI": { + "arrayValue": { + "values": [ + { + "stringValue": "st_AAL" + }, + { + "stringValue": "st_ASA" + }, + { + "stringValue": "st_DAL" + }, + { + "stringValue": "st_SWA" + }, + { + "stringValue": "st_UAL" + } + ] + } + }, + "st_LOF": { + "arrayValue": { + "values": [ + { + "stringValue": "st_SWA" + } + ] + } + }, + "st_PCO": { + "arrayValue": { + "values": [ + { + "stringValue": "st_ACA" + }, + { + "stringValue": "st_ASA" + }, + { + "stringValue": "st_BAW" + }, + { + "stringValue": "st_DAL" + }, + { + "stringValue": "st_DLH" + }, + { + "stringValue": "st_FLE" + }, + { + "stringValue": "st_JST" + }, + { + "stringValue": "st_PCO" + }, + { + "stringValue": "st_PCO" + }, + { + "stringValue": "st_POE" + }, + { + "stringValue": "st_QFA" + }, + { + "stringValue": "st_WJA" + } + ] + } + }, + "st_EWE": { + "arrayValue": { + "values": [ + { + "stringValue": "st_AAL" + }, + { + "stringValue": "st_AEA" + }, + { + "stringValue": "st_AFR" + }, + { + "stringValue": "st_AVA" + }, + { + "stringValue": "st_BAW" + }, + { + "stringValue": "st_CFG" + }, + { + "stringValue": "st_ETD" + }, + { + "stringValue": "st_FIN" + }, + { + "stringValue": "st_IBE" + }, + { + "stringValue": "st_TAP" + }, + { + "stringValue": "st_THY" + }, + { + "stringValue": "st_UAE" + }, + { + "stringValue": "st_UAL" + }, + { + "stringValue": "st_VLG" + } + ] + } + }, + "st_JZR": { + "arrayValue": { + "values": [ + { + "stringValue": "st_KAC" + }, + { + "stringValue": "st_QTR" + } + ] + } + }, + "st_UCA": { + "arrayValue": { + "values": [ + { + "stringValue": "st_AAL" + }, + { + "stringValue": "st_ASA" + }, + { + "stringValue": "st_DAL" + }, + { + "stringValue": "st_FFT" + }, + { + "stringValue": "st_JBU" + }, + { + "stringValue": "st_NKS" + }, + { + "stringValue": "st_SWA" + }, + { + "stringValue": "st_UAL" + } + ] + } + }, + "st_CJT": { + "arrayValue": { + "values": [ + { + "stringValue": "st_ACA" + }, + { + "stringValue": "st_FLE" + }, + { + "stringValue": "st_POE" + }, + { + "stringValue": "st_WJA" + } + ] + } + }, + "st_ANO": { + "arrayValue": { + "values": [ + { + "stringValue": "st_QFA" + } + ] + } + }, + "st_FCM": { + "arrayValue": { + "values": [ + { + "stringValue": "st_AAL" + }, + { + "stringValue": "st_ACA" + }, + { + "stringValue": "st_ACI" + }, + { + "stringValue": "st_AEA" + }, + { + "stringValue": "st_AEE" + }, + { + "stringValue": "st_AFR" + }, + { + "stringValue": "st_AIC" + }, + { + "stringValue": "st_AIE" + }, + { + "stringValue": "st_AIZ" + }, + { + "stringValue": "st_AMX" + }, + { + "stringValue": "st_ANT" + }, + { + "stringValue": "st_ANZ" + }, + { + "stringValue": "st_ASA" + }, + { + "stringValue": "st_ASL" + }, + { + "stringValue": "st_AUA" + }, + { + "stringValue": "st_AZU" + }, + { + "stringValue": "st_BAW" + }, + { + "stringValue": "st_BTI" + }, + { + "stringValue": "st_BWA" + }, + { + "stringValue": "st_CAL" + }, + { + "stringValue": "st_CAV" + }, + { + "stringValue": "st_CFG" + }, + { + "stringValue": "st_CNF" + }, + { + "stringValue": "st_CPA" + }, + { + "stringValue": "st_CRK" + }, + { + "stringValue": "st_CRL" + }, + { + "stringValue": "st_CS" + }, + { + "stringValue": "st_DLA" + }, + { + "stringValue": "st_DLH" + }, + { + "stringValue": "st_EVA" + }, + { + "stringValue": "st_EWG" + }, + { + "stringValue": "st_FBU" + }, + { + "stringValue": "st_FC" + }, + { + "stringValue": "st_FFT" + }, + { + "stringValue": "st_FIN" + }, + { + "stringValue": "st_FJI" + }, + { + "stringValue": "st_FLE" + }, + { + "stringValue": "st_FWI" + }, + { + "stringValue": "st_GLO" + }, + { + "stringValue": "st_GLR" + }, + { + "stringValue": "st_GPD" + }, + { + "stringValue": "st_GZ" + }, + { + "stringValue": "st_HAL" + }, + { + "stringValue": "st_HKE" + }, + { + "stringValue": "st_IBB" + }, + { + "stringValue": "st_IBE" + }, + { + "stringValue": "st_ICE" + }, + { + "stringValue": "st_ISR" + }, + { + "stringValue": "st_ITY" + }, + { + "stringValue": "st_JBU" + }, + { + "stringValue": "st_JST" + }, + { + "stringValue": "st_JSX" + }, + { + "stringValue": "st_KAC" + }, + { + "stringValue": "st_KAL" + }, + { + "stringValue": "st_KAP" + }, + { + "stringValue": "st_KEN" + }, + { + "stringValue": "st_KMM" + }, + { + "stringValue": "st_LAN" + }, + { + "stringValue": "st_MAS" + }, + { + "stringValue": "st_MEA" + }, + { + "stringValue": "st_MMZ" + }, + { + "stringValue": "st_NBT" + }, + { + "stringValue": "st_NOZ" + }, + { + "stringValue": "st_NSZ" + }, + { + "stringValue": "st_OCN" + }, + { + "stringValue": "st_OMA" + }, + { + "stringValue": "st_PAG" + }, + { + "stringValue": "st_PAV" + }, + { + "stringValue": "st_PGT" + }, + { + "stringValue": "st_QFA" + }, + { + "stringValue": "st_RJA" + }, + { + "stringValue": "st_SAS" + }, + { + "stringValue": "st_SCR" + }, + { + "stringValue": "st_SJX" + }, + { + "stringValue": "st_SKU" + }, + { + "stringValue": "st_SKV" + }, + { + "stringValue": "st_SWA" + }, + { + "stringValue": "st_SXS" + }, + { + "stringValue": "st_TCV" + }, + { + "stringValue": "st_THA" + }, + { + "stringValue": "st_THT" + }, + { + "stringValue": "st_THY" + }, + { + "stringValue": "st_TRA" + }, + { + "stringValue": "st_TUI" + }, + { + "stringValue": "st_TVS" + }, + { + "stringValue": "st_UAE" + }, + { + "stringValue": "st_UAL" + }, + { + "stringValue": "st_VIR" + }, + { + "stringValue": "st_VJT" + }, + { + "stringValue": "st_VOE" + }, + { + "stringValue": "st_VOZ" + }, + { + "stringValue": "st_WIA" + }, + { + "stringValue": "st_WIF" + }, + { + "stringValue": "st_WJA" + }, + { + "stringValue": "st_WSG" + }, + { + "stringValue": "st_YB" + } + ] + } + }, + "st_WM": { + "arrayValue": { + "values": [ + { + "stringValue": "st_SWA" + } + ] + } + }, + "st_MBU": { + "arrayValue": { + "values": [ + { + "stringValue": "st_CFG" + }, + { + "stringValue": "st_EWG" + }, + { + "stringValue": "st_FIN" + }, + { + "stringValue": "st_SAS" + }, + { + "stringValue": "st_TAP" + } + ] + } + }, + "st_SVS": { + "arrayValue": { + "values": [ + { + "stringValue": "st_DLH" + }, + { + "stringValue": "st_SAS" + } + ] + } + }, + "st_CVU": { + "arrayValue": { + "values": [ + { + "stringValue": "st_SWA" + } + ] + } + }, + "st_VTE": { + "arrayValue": { + "values": [ + { + "stringValue": "st_AAL" + }, + { + "stringValue": "st_DAL" + }, + { + "stringValue": "st_FFT" + }, + { + "stringValue": "st_JBU" + }, + { + "stringValue": "st_NKS" + }, + { + "stringValue": "st_SWA" + }, + { + "stringValue": "st_UAL" + } + ] + } + }, + "st_FPO": { + "arrayValue": { + "values": [ + { + "stringValue": "st_THY" + } + ] + } + }, + "st_SIA": { + "arrayValue": { + "values": [ + { + "stringValue": "st_AAL" + }, + { + "stringValue": "st_ACA" + }, + { + "stringValue": "st_ANZ" + }, + { + "stringValue": "st_ASA" + }, + { + "stringValue": "st_BAW" + }, + { + "stringValue": "st_CPA" + }, + { + "stringValue": "st_DAL" + }, + { + "stringValue": "st_DLH" + }, + { + "stringValue": "st_EVA" + }, + { + "stringValue": "st_FIN" + }, + { + "stringValue": "st_JBU" + }, + { + "stringValue": "st_QFA" + }, + { + "stringValue": "st_SAS" + }, + { + "stringValue": "st_SIA" + }, + { + "stringValue": "st_SWA" + }, + { + "stringValue": "st_SWR" + }, + { + "stringValue": "st_TAP" + }, + { + "stringValue": "st_TGW" + }, + { + "stringValue": "st_UAL" + }, + { + "stringValue": "st_VIR" + }, + { + "stringValue": "st_VOZ" + }, + { + "stringValue": "st_XBO" + } + ] + } + }, + "st_KNE": { + "arrayValue": { + "values": [ + { + "stringValue": "st_AAF" + }, + { + "stringValue": "st_ABY" + }, + { + "stringValue": "st_AEA" + }, + { + "stringValue": "st_AEE" + }, + { + "stringValue": "st_AUA" + }, + { + "stringValue": "st_BAW" + }, + { + "stringValue": "st_BCY" + }, + { + "stringValue": "st_BEE" + }, + { + "stringValue": "st_BLA" + }, + { + "stringValue": "st_CCM" + }, + { + "stringValue": "st_CPA" + }, + { + "stringValue": "st_CSA" + }, + { + "stringValue": "st_DAL" + }, + { + "stringValue": "st_DLA" + }, + { + "stringValue": "st_DLH" + }, + { + "stringValue": "st_ETD" + }, + { + "stringValue": "st_EWG" + }, + { + "stringValue": "st_FDB" + }, + { + "stringValue": "st_GLO" + }, + { + "stringValue": "st_HOP" + }, + { + "stringValue": "st_HPK" + }, + { + "stringValue": "st_JBU" + }, + { + "stringValue": "st_JZR" + }, + { + "stringValue": "st_KAC" + }, + { + "stringValue": "st_KNE" + }, + { + "stringValue": "st_KQA" + }, + { + "stringValue": "st_OMA" + }, + { + "stringValue": "st_PGT" + }, + { + "stringValue": "st_PIA" + }, + { + "stringValue": "st_QFA" + }, + { + "stringValue": "st_RBA" + }, + { + "stringValue": "st_RJA" + }, + { + "stringValue": "st_SAT" + }, + { + "stringValue": "st_SEY" + }, + { + "stringValue": "st_SGQ" + }, + { + "stringValue": "st_SVA" + }, + { + "stringValue": "st_THY" + }, + { + "stringValue": "st_UAE" + }, + { + "stringValue": "st_VTI" + } + ] + } + }, + "st_ETD": { + "arrayValue": { + "values": [ + { + "stringValue": "st_4T" + }, + { + "stringValue": "st_AAF" + }, + { + "stringValue": "st_AAL" + }, + { + "stringValue": "st_AAR" + }, + { + "stringValue": "st_AAY" + }, + { + "stringValue": "st_ABY" + }, + { + "stringValue": "st_ACA" + }, + { + "stringValue": "st_ACI" + }, + { + "stringValue": "st_ADR" + }, + { + "stringValue": "st_ADY" + }, + { + "stringValue": "st_AEA" + }, + { + "stringValue": "st_AEE" + }, + { + "stringValue": "st_AFL" + }, + { + "stringValue": "st_AFR" + }, + { + "stringValue": "st_AIC" + }, + { + "stringValue": "st_AIE" + }, + { + "stringValue": "st_AKT" + }, + { + "stringValue": "st_ALK" + }, + { + "stringValue": "st_AMX" + }, + { + "stringValue": "st_ANA" + }, + { + "stringValue": "st_ANT" + }, + { + "stringValue": "st_ANZ" + }, + { + "stringValue": "st_ARG" + }, + { + "stringValue": "st_ASA" + }, + { + "stringValue": "st_ASH" + }, + { + "stringValue": "st_ASL" + }, + { + "stringValue": "st_AUA" + }, + { + "stringValue": "st_AVA" + }, + { + "stringValue": "st_AWU" + }, + { + "stringValue": "st_AZU" + }, + { + "stringValue": "st_BAW" + }, + { + "stringValue": "st_BCY" + }, + { + "stringValue": "st_BEE" + }, + { + "stringValue": "st_BEL" + }, + { + "stringValue": "st_BKP" + }, + { + "stringValue": "st_BLA" + }, + { + "stringValue": "st_BLS" + }, + { + "stringValue": "st_BRX" + }, + { + "stringValue": "st_BTI" + }, + { + "stringValue": "st_BWA" + }, + { + "stringValue": "st_CAL" + }, + { + "stringValue": "st_CCM" + }, + { + "stringValue": "st_CFG" + }, + { + "stringValue": "st_CMP" + }, + { + "stringValue": "st_CNO" + }, + { + "stringValue": "st_CPA" + }, + { + "stringValue": "st_CRK" + }, + { + "stringValue": "st_CRL" + }, + { + "stringValue": "st_CRQ" + }, + { + "stringValue": "st_CSA" + }, + { + "stringValue": "st_CTN" + }, + { + "stringValue": "st_DAL" + }, + { + "stringValue": "st_DLA" + }, + { + "stringValue": "st_DLH" + }, + { + "stringValue": "st_DSM" + }, + { + "stringValue": "st_DTR" + }, + { + "stringValue": "st_EDW" + }, + { + "stringValue": "st_EIN" + }, + { + "stringValue": "st_ELY" + }, + { + "stringValue": "st_EST" + }, + { + "stringValue": "st_ETD" + }, + { + "stringValue": "st_ETH" + }, + { + "stringValue": "st_EVA" + }, + { + "stringValue": "st_EWE" + }, + { + "stringValue": "st_EWG" + }, + { + "stringValue": "st_EZY" + }, + { + "stringValue": "st_FAD" + }, + { + "stringValue": "st_FBU" + }, + { + "stringValue": "st_FDB" + }, + { + "stringValue": "st_FDX" + }, + { + "stringValue": "st_FDY" + }, + { + "stringValue": "st_FFT" + }, + { + "stringValue": "st_FIN" + }, + { + "stringValue": "st_FLE" + }, + { + "stringValue": "st_FVJ" + }, + { + "stringValue": "st_FWI" + }, + { + "stringValue": "st_GFA" + }, + { + "stringValue": "st_GIA" + }, + { + "stringValue": "st_GLO" + }, + { + "stringValue": "st_GRL" + }, + { + "stringValue": "st_GWI" + }, + { + "stringValue": "st_GZ" + }, + { + "stringValue": "st_HAL" + }, + { + "stringValue": "st_HDA" + }, + { + "stringValue": "st_HKE" + }, + { + "stringValue": "st_HOP" + }, + { + "stringValue": "st_HVN" + }, + { + "stringValue": "st_IBB" + }, + { + "stringValue": "st_IBE" + }, + { + "stringValue": "st_ICE" + }, + { + "stringValue": "st_IGO" + }, + { + "stringValue": "st_ITY" + }, + { + "stringValue": "st_IYE" + }, + { + "stringValue": "st_JAL" + }, + { + "stringValue": "st_JBU" + }, + { + "stringValue": "st_JJP" + }, + { + "stringValue": "st_JST" + }, + { + "stringValue": "st_JSX" + }, + { + "stringValue": "st_JZA" + }, + { + "stringValue": "st_JZR" + }, + { + "stringValue": "st_KAC" + }, + { + "stringValue": "st_KAL" + }, + { + "stringValue": "st_KAP" + }, + { + "stringValue": "st_KLM" + }, + { + "stringValue": "st_KMM" + }, + { + "stringValue": "st_KNE" + }, + { + "stringValue": "st_KQA" + }, + { + "stringValue": "st_KZR" + }, + { + "stringValue": "st_LAN" + }, + { + "stringValue": "st_LGL" + }, + { + "stringValue": "st_LHX" + }, + { + "stringValue": "st_LIA" + }, + { + "stringValue": "st_LNE" + }, + { + "stringValue": "st_LOG" + }, + { + "stringValue": "st_LOT" + }, + { + "stringValue": "st_MAC" + }, + { + "stringValue": "st_MAS" + }, + { + "stringValue": "st_MAU" + }, + { + "stringValue": "st_MEA" + }, + { + "stringValue": "st_MXY" + }, + { + "stringValue": "st_NGN" + }, + { + "stringValue": "st_NKS" + }, + { + "stringValue": "st_NMB" + }, + { + "stringValue": "st_NOZ" + }, + { + "stringValue": "st_OAW" + }, + { + "stringValue": "st_OCN" + }, + { + "stringValue": "st_OMA" + }, + { + "stringValue": "st_ONE" + }, + { + "stringValue": "st_PIA" + }, + { + "stringValue": "st_POE" + }, + { + "stringValue": "st_QFA" + }, + { + "stringValue": "st_QTR" + }, + { + "stringValue": "st_RAM" + }, + { + "stringValue": "st_RBA" + }, + { + "stringValue": "st_RJA" + }, + { + "stringValue": "st_RPA" + }, + { + "stringValue": "st_RWD" + }, + { + "stringValue": "st_RYR" + }, + { + "stringValue": "st_RZO" + }, + { + "stringValue": "st_SAA" + }, + { + "stringValue": "st_SAS" + }, + { + "stringValue": "st_SBI" + }, + { + "stringValue": "st_SCX" + }, + { + "stringValue": "st_SEY" + }, + { + "stringValue": "st_SGQ" + }, + { + "stringValue": "st_SJX" + }, + { + "stringValue": "st_SKU" + }, + { + "stringValue": "st_SKW" + }, + { + "stringValue": "st_SVA" + }, + { + "stringValue": "st_SWA" + }, + { + "stringValue": "st_SWR" + }, + { + "stringValue": "st_SXS" + }, + { + "stringValue": "st_SZS" + }, + { + "stringValue": "st_TAM" + }, + { + "stringValue": "st_TAP" + }, + { + "stringValue": "st_THA" + }, + { + "stringValue": "st_THT" + }, + { + "stringValue": "st_THY" + }, + { + "stringValue": "st_TRA" + }, + { + "stringValue": "st_TSC" + }, + { + "stringValue": "st_TTW" + }, + { + "stringValue": "st_TUI" + }, + { + "stringValue": "st_TVF" + }, + { + "stringValue": "st_TVS" + }, + { + "stringValue": "st_UAE" + }, + { + "stringValue": "st_UAL" + }, + { + "stringValue": "st_VIR" + }, + { + "stringValue": "st_VLG" + }, + { + "stringValue": "st_VOE" + }, + { + "stringValue": "st_VOZ" + }, + { + "stringValue": "st_VTI" + }, + { + "stringValue": "st_WIF" + }, + { + "stringValue": "st_WJA" + }, + { + "stringValue": "st_XBO" + }, + { + "stringValue": "st_XLF" + } + ] + } + }, + "st_KAC": { + "arrayValue": { + "values": [ + { + "stringValue": "st_ACA" + }, + { + "stringValue": "st_BAW" + }, + { + "stringValue": "st_JZR" + }, + { + "stringValue": "st_THY" + } + ] + } + }, + "st_THA": { + "arrayValue": { + "values": [ + { + "stringValue": "st_AAL" + }, + { + "stringValue": "st_AAR" + }, + { + "stringValue": "st_ACA" + }, + { + "stringValue": "st_ACI" + }, + { + "stringValue": "st_AFR" + }, + { + "stringValue": "st_ANA" + }, + { + "stringValue": "st_ANZ" + }, + { + "stringValue": "st_ASA" + }, + { + "stringValue": "st_AUA" + }, + { + "stringValue": "st_BAW" + }, + { + "stringValue": "st_BEL" + }, + { + "stringValue": "st_BTI" + }, + { + "stringValue": "st_CAL" + }, + { + "stringValue": "st_CFG" + }, + { + "stringValue": "st_CNO" + }, + { + "stringValue": "st_CPA" + }, + { + "stringValue": "st_CRK" + }, + { + "stringValue": "st_DAL" + }, + { + "stringValue": "st_DLA" + }, + { + "stringValue": "st_DLH" + }, + { + "stringValue": "st_EDW" + }, + { + "stringValue": "st_ELY" + }, + { + "stringValue": "st_ETD" + }, + { + "stringValue": "st_EVA" + }, + { + "stringValue": "st_FCM" + }, + { + "stringValue": "st_FIN" + }, + { + "stringValue": "st_HAL" + }, + { + "stringValue": "st_ICE" + }, + { + "stringValue": "st_JAL" + }, + { + "stringValue": "st_JBU" + }, + { + "stringValue": "st_KAL" + }, + { + "stringValue": "st_KLM" + }, + { + "stringValue": "st_LAN" + }, + { + "stringValue": "st_LOT" + }, + { + "stringValue": "st_OMA" + }, + { + "stringValue": "st_QFA" + }, + { + "stringValue": "st_QTR" + }, + { + "stringValue": "st_SAS" + }, + { + "stringValue": "st_SJX" + }, + { + "stringValue": "st_SWA" + }, + { + "stringValue": "st_SWR" + }, + { + "stringValue": "st_SZS" + }, + { + "stringValue": "st_TAP" + }, + { + "stringValue": "st_THA" + }, + { + "stringValue": "st_THA" + }, + { + "stringValue": "st_THY" + }, + { + "stringValue": "st_UAL" + }, + { + "stringValue": "st_VIR" + }, + { + "stringValue": "st_WIF" + } + ] + } + }, + "st_PDT": { + "arrayValue": { + "values": [ + { + "stringValue": "st_AAL" + }, + { + "stringValue": "st_ACA" + }, + { + "stringValue": "st_ASA" + }, + { + "stringValue": "st_BAW" + }, + { + "stringValue": "st_CPA" + }, + { + "stringValue": "st_DAL" + }, + { + "stringValue": "st_DLH" + }, + { + "stringValue": "st_EIN" + }, + { + "stringValue": "st_FFT" + }, + { + "stringValue": "st_HAL" + }, + { + "stringValue": "st_JAL" + }, + { + "stringValue": "st_JBU" + }, + { + "stringValue": "st_JJP" + }, + { + "stringValue": "st_QTR" + }, + { + "stringValue": "st_SWA" + }, + { + "stringValue": "st_SWR" + }, + { + "stringValue": "st_THY" + }, + { + "stringValue": "st_UAL" + } + ] + } + }, + "st_JAL": { + "arrayValue": { + "values": [ + { + "stringValue": "st_AAL" + }, + { + "stringValue": "st_ACA" + }, + { + "stringValue": "st_AFR" + }, + { + "stringValue": "st_ANA" + }, + { + "stringValue": "st_ANZ" + }, + { + "stringValue": "st_ASA" + }, + { + "stringValue": "st_AUA" + }, + { + "stringValue": "st_BAW" + }, + { + "stringValue": "st_CAL" + }, + { + "stringValue": "st_CPA" + }, + { + "stringValue": "st_DAL" + }, + { + "stringValue": "st_DLH" + }, + { + "stringValue": "st_EDV" + }, + { + "stringValue": "st_ENY" + }, + { + "stringValue": "st_ETD" + }, + { + "stringValue": "st_EVA" + }, + { + "stringValue": "st_FIN" + }, + { + "stringValue": "st_HAL" + }, + { + "stringValue": "st_HVN" + }, + { + "stringValue": "st_IBE" + }, + { + "stringValue": "st_ITY" + }, + { + "stringValue": "st_JAL" + }, + { + "stringValue": "st_JAL" + }, + { + "stringValue": "st_JBU" + }, + { + "stringValue": "st_JIA" + }, + { + "stringValue": "st_JJP" + }, + { + "stringValue": "st_JST" + }, + { + "stringValue": "st_JZA" + }, + { + "stringValue": "st_KAL" + }, + { + "stringValue": "st_KLM" + }, + { + "stringValue": "st_LAN" + }, + { + "stringValue": "st_MAS" + }, + { + "stringValue": "st_MDA" + }, + { + "stringValue": "st_OMA" + }, + { + "stringValue": "st_PDT" + }, + { + "stringValue": "st_QFA" + }, + { + "stringValue": "st_QTR" + }, + { + "stringValue": "st_QXE" + }, + { + "stringValue": "st_SAS" + }, + { + "stringValue": "st_SJX" + }, + { + "stringValue": "st_SKW" + }, + { + "stringValue": "st_SWA" + }, + { + "stringValue": "st_SWR" + }, + { + "stringValue": "st_THA" + }, + { + "stringValue": "st_THY" + }, + { + "stringValue": "st_UAE" + }, + { + "stringValue": "st_UAL" + }, + { + "stringValue": "st_VIR" + }, + { + "stringValue": "st_WJA" + } + ] + } + }, + "st_AIE": { + "arrayValue": { + "values": [ + { + "stringValue": "st_ACA" + }, + { + "stringValue": "st_AFR" + }, + { + "stringValue": "st_BAW" + }, + { + "stringValue": "st_DAL" + }, + { + "stringValue": "st_POE" + }, + { + "stringValue": "st_SWR" + }, + { + "stringValue": "st_TSC" + }, + { + "stringValue": "st_UAE" + }, + { + "stringValue": "st_UAL" + }, + { + "stringValue": "st_WJA" + } + ] + } + }, + "st_BHS": { + "arrayValue": { + "values": [ + { + "stringValue": "st_SWA" + } + ] + } + }, + "st_ASV": { + "arrayValue": { + "values": [ + { + "stringValue": "st_AAR" + } + ] + } + }, + "st_ANE": { + "arrayValue": { + "values": [ + { + "stringValue": "st_IBE" + } + ] + } + }, + "st_CRQ": { + "arrayValue": { + "values": [ + { + "stringValue": "st_ACA" + }, + { + "stringValue": "st_AFR" + }, + { + "stringValue": "st_POE" + }, + { + "stringValue": "st_TSC" + }, + { + "stringValue": "st_WJA" + } + ] + } + }, + "st_NKS": { + "arrayValue": { + "values": [ + { + "stringValue": "st_AAF" + }, + { + "stringValue": "st_AAL" + }, + { + "stringValue": "st_AAY" + }, + { + "stringValue": "st_ACA" + }, + { + "stringValue": "st_ACO" + }, + { + "stringValue": "st_AEA" + }, + { + "stringValue": "st_AEE" + }, + { + "stringValue": "st_AFR" + }, + { + "stringValue": "st_AGR" + }, + { + "stringValue": "st_AIE" + }, + { + "stringValue": "st_AKT" + }, + { + "stringValue": "st_AMX" + }, + { + "stringValue": "st_ARG" + }, + { + "stringValue": "st_ASA" + }, + { + "stringValue": "st_ASH" + }, + { + "stringValue": "st_AUA" + }, + { + "stringValue": "st_AUR" + }, + { + "stringValue": "st_AVA" + }, + { + "stringValue": "st_AZU" + }, + { + "stringValue": "st_BCY" + }, + { + "stringValue": "st_BEE" + }, + { + "stringValue": "st_BEL" + }, + { + "stringValue": "st_BTI" + }, + { + "stringValue": "st_BTQ" + }, + { + "stringValue": "st_BWA" + }, + { + "stringValue": "st_CAL" + }, + { + "stringValue": "st_CAV" + }, + { + "stringValue": "st_CAY" + }, + { + "stringValue": "st_CCM" + }, + { + "stringValue": "st_CFG" + }, + { + "stringValue": "st_CMP" + }, + { + "stringValue": "st_CNF" + }, + { + "stringValue": "st_CPA" + }, + { + "stringValue": "st_CRL" + }, + { + "stringValue": "st_CRQ" + }, + { + "stringValue": "st_CSA" + }, + { + "stringValue": "st_CTN" + }, + { + "stringValue": "st_DJT" + }, + { + "stringValue": "st_DLA" + }, + { + "stringValue": "st_DLH" + }, + { + "stringValue": "st_DNA" + }, + { + "stringValue": "st_DSM" + }, + { + "stringValue": "st_DTR" + }, + { + "stringValue": "st_DWI" + }, + { + "stringValue": "st_ECA" + }, + { + "stringValue": "st_EDV" + }, + { + "stringValue": "st_EDW" + }, + { + "stringValue": "st_ELY" + }, + { + "stringValue": "st_ENY" + }, + { + "stringValue": "st_ETD" + }, + { + "stringValue": "st_EVA" + }, + { + "stringValue": "st_EWG" + }, + { + "stringValue": "st_FBU" + }, + { + "stringValue": "st_FDB" + }, + { + "stringValue": "st_FDX" + }, + { + "stringValue": "st_FDY" + }, + { + "stringValue": "st_FFT" + }, + { + "stringValue": "st_FIN" + }, + { + "stringValue": "st_FJI" + }, + { + "stringValue": "st_FLE" + }, + { + "stringValue": "st_FPO" + }, + { + "stringValue": "st_FWI" + }, + { + "stringValue": "st_GJS" + }, + { + "stringValue": "st_GLG" + }, + { + "stringValue": "st_GLO" + }, + { + "stringValue": "st_GLR" + }, + { + "stringValue": "st_GPD" + }, + { + "stringValue": "st_GTI" + }, + { + "stringValue": "st_GZ" + }, + { + "stringValue": "st_HAL" + }, + { + "stringValue": "st_HDA" + }, + { + "stringValue": "st_HI" + }, + { + "stringValue": "st_HKE" + }, + { + "stringValue": "st_IBB" + }, + { + "stringValue": "st_IBE" + }, + { + "stringValue": "st_ICE" + }, + { + "stringValue": "st_ISR" + }, + { + "stringValue": "st_ITY" + }, + { + "stringValue": "st_JBU" + }, + { + "stringValue": "st_JIA" + }, + { + "stringValue": "st_JJP" + }, + { + "stringValue": "st_JSA" + }, + { + "stringValue": "st_JST" + }, + { + "stringValue": "st_JSX" + }, + { + "stringValue": "st_KAP" + }, + { + "stringValue": "st_KEN" + }, + { + "stringValue": "st_KLM" + }, + { + "stringValue": "st_KMM" + }, + { + "stringValue": "st_KNE" + }, + { + "stringValue": "st_KQA" + }, + { + "stringValue": "st_LAN" + }, + { + "stringValue": "st_LIA" + }, + { + "stringValue": "st_LNE" + }, + { + "stringValue": "st_LOG" + }, + { + "stringValue": "st_LOT" + }, + { + "stringValue": "st_MEA" + }, + { + "stringValue": "st_MMD" + }, + { + "stringValue": "st_MXY" + }, + { + "stringValue": "st_NKS" + }, + { + "stringValue": "st_NOZ" + }, + { + "stringValue": "st_OAW" + }, + { + "stringValue": "st_ONE" + }, + { + "stringValue": "st_PCO" + }, + { + "stringValue": "st_POE" + }, + { + "stringValue": "st_PTN" + }, + { + "stringValue": "st_QFA" + }, + { + "stringValue": "st_QTR" + }, + { + "stringValue": "st_RJA" + }, + { + "stringValue": "st_RPA" + }, + { + "stringValue": "st_RPB" + }, + { + "stringValue": "st_RZO" + }, + { + "stringValue": "st_SAA" + }, + { + "stringValue": "st_SAS" + }, + { + "stringValue": "st_SAT" + }, + { + "stringValue": "st_SBS" + }, + { + "stringValue": "st_SCE" + }, + { + "stringValue": "st_SCX" + }, + { + "stringValue": "st_SEY" + }, + { + "stringValue": "st_SGQ" + }, + { + "stringValue": "st_SIL" + }, + { + "stringValue": "st_SKW" + }, + { + "stringValue": "st_SRY" + }, + { + "stringValue": "st_SWA" + }, + { + "stringValue": "st_SWR" + }, + { + "stringValue": "st_TAP" + }, + { + "stringValue": "st_THT" + }, + { + "stringValue": "st_TIN" + }, + { + "stringValue": "st_TOS" + }, + { + "stringValue": "st_TRA" + }, + { + "stringValue": "st_TSC" + }, + { + "stringValue": "st_TTW" + }, + { + "stringValue": "st_TUI" + }, + { + "stringValue": "st_TVF" + }, + { + "stringValue": "st_UAE" + }, + { + "stringValue": "st_UAL" + }, + { + "stringValue": "st_UCA" + }, + { + "stringValue": "st_UPS" + }, + { + "stringValue": "st_VIR" + }, + { + "stringValue": "st_VIV" + }, + { + "stringValue": "st_VLG" + }, + { + "stringValue": "st_VOE" + }, + { + "stringValue": "st_VOI" + }, + { + "stringValue": "st_VOZ" + }, + { + "stringValue": "st_VTE" + }, + { + "stringValue": "st_VXP" + }, + { + "stringValue": "st_WHT" + }, + { + "stringValue": "st_WIA" + }, + { + "stringValue": "st_WIF" + }, + { + "stringValue": "st_WJA" + }, + { + "stringValue": "st_WSN" + } + ] + } + }, + "st_PSC": { + "arrayValue": { + "values": [ + { + "stringValue": "st_ACA" + }, + { + "stringValue": "st_AFR" + }, + { + "stringValue": "st_TSC" + }, + { + "stringValue": "st_WJA" + } + ] + } + }, + "st_WZZ": { + "arrayValue": { + "values": [ + { + "stringValue": "st_DLH" + } + ] + } + }, + "st_SWR": { + "arrayValue": { + "values": [ + { + "stringValue": "st_AAL" + }, + { + "stringValue": "st_AAR" + }, + { + "stringValue": "st_AAY" + }, + { + "stringValue": "st_ACA" + }, + { + "stringValue": "st_ACI" + }, + { + "stringValue": "st_AEA" + }, + { + "stringValue": "st_AEE" + }, + { + "stringValue": "st_AFL" + }, + { + "stringValue": "st_AFR" + }, + { + "stringValue": "st_AIC" + }, + { + "stringValue": "st_AIE" + }, + { + "stringValue": "st_AIZ" + }, + { + "stringValue": "st_AKT" + }, + { + "stringValue": "st_ALK" + }, + { + "stringValue": "st_AMU" + }, + { + "stringValue": "st_AMX" + }, + { + "stringValue": "st_ANA" + }, + { + "stringValue": "st_ANT" + }, + { + "stringValue": "st_ANZ" + }, + { + "stringValue": "st_ARG" + }, + { + "stringValue": "st_ASA" + }, + { + "stringValue": "st_ASL" + }, + { + "stringValue": "st_AUA" + }, + { + "stringValue": "st_AVA" + }, + { + "stringValue": "st_AWU" + }, + { + "stringValue": "st_AZU" + }, + { + "stringValue": "st_BAW" + }, + { + "stringValue": "st_BCY" + }, + { + "stringValue": "st_BEL" + }, + { + "stringValue": "st_BHS" + }, + { + "stringValue": "st_BKP" + }, + { + "stringValue": "st_BTI" + }, + { + "stringValue": "st_BTQ" + }, + { + "stringValue": "st_BWA" + }, + { + "stringValue": "st_CAL" + }, + { + "stringValue": "st_CAY" + }, + { + "stringValue": "st_CCM" + }, + { + "stringValue": "st_CES" + }, + { + "stringValue": "st_CFG" + }, + { + "stringValue": "st_CMP" + }, + { + "stringValue": "st_CNF" + }, + { + "stringValue": "st_CPA" + }, + { + "stringValue": "st_CRK" + }, + { + "stringValue": "st_CRL" + }, + { + "stringValue": "st_CRQ" + }, + { + "stringValue": "st_CS" + }, + { + "stringValue": "st_CSA" + }, + { + "stringValue": "st_CSZ" + }, + { + "stringValue": "st_CTN" + }, + { + "stringValue": "st_DAL" + }, + { + "stringValue": "st_DJT" + }, + { + "stringValue": "st_DLA" + }, + { + "stringValue": "st_DLH" + }, + { + "stringValue": "st_DTR" + }, + { + "stringValue": "st_DWI" + }, + { + "stringValue": "st_EDW" + }, + { + "stringValue": "st_EIN" + }, + { + "stringValue": "st_ELO" + }, + { + "stringValue": "st_ELY" + }, + { + "stringValue": "st_ENY" + }, + { + "stringValue": "st_ETD" + }, + { + "stringValue": "st_ETH" + }, + { + "stringValue": "st_EVA" + }, + { + "stringValue": "st_EWG" + }, + { + "stringValue": "st_EZY" + }, + { + "stringValue": "st_FBU" + }, + { + "stringValue": "st_FC" + }, + { + "stringValue": "st_FDB" + }, + { + "stringValue": "st_FDY" + }, + { + "stringValue": "st_FFT" + }, + { + "stringValue": "st_FIN" + }, + { + "stringValue": "st_FJI" + }, + { + "stringValue": "st_FLE" + }, + { + "stringValue": "st_FLI" + }, + { + "stringValue": "st_FPO" + }, + { + "stringValue": "st_FWI" + }, + { + "stringValue": "st_GFA" + }, + { + "stringValue": "st_GIA" + }, + { + "stringValue": "st_GLO" + }, + { + "stringValue": "st_GLR" + }, + { + "stringValue": "st_GPD" + }, + { + "stringValue": "st_GRL" + }, + { + "stringValue": "st_GZ" + }, + { + "stringValue": "st_HAL" + }, + { + "stringValue": "st_HKE" + }, + { + "stringValue": "st_HVN" + }, + { + "stringValue": "st_IBB" + }, + { + "stringValue": "st_IBE" + }, + { + "stringValue": "st_ICE" + }, + { + "stringValue": "st_IGO" + }, + { + "stringValue": "st_ITY" + }, + { + "stringValue": "st_IYE" + }, + { + "stringValue": "st_JAL" + }, + { + "stringValue": "st_JBU" + }, + { + "stringValue": "st_JJP" + }, + { + "stringValue": "st_JST" + }, + { + "stringValue": "st_JSX" + }, + { + "stringValue": "st_JZA" + }, + { + "stringValue": "st_KAL" + }, + { + "stringValue": "st_KAP" + }, + { + "stringValue": "st_KLM" + }, + { + "stringValue": "st_KMM" + }, + { + "stringValue": "st_KQA" + }, + { + "stringValue": "st_KZR" + }, + { + "stringValue": "st_LAN" + }, + { + "stringValue": "st_LGL" + }, + { + "stringValue": "st_LIA" + }, + { + "stringValue": "st_LOG" + }, + { + "stringValue": "st_LOT" + }, + { + "stringValue": "st_MAS" + }, + { + "stringValue": "st_MAU" + }, + { + "stringValue": "st_MDA" + }, + { + "stringValue": "st_MEA" + }, + { + "stringValue": "st_MHO" + }, + { + "stringValue": "st_MMD" + }, + { + "stringValue": "st_MSR" + }, + { + "stringValue": "st_MXY" + }, + { + "stringValue": "st_NBT" + }, + { + "stringValue": "st_NKS" + }, + { + "stringValue": "st_NLA" + }, + { + "stringValue": "st_NOZ" + }, + { + "stringValue": "st_NSZ" + }, + { + "stringValue": "st_OAW" + }, + { + "stringValue": "st_OCN" + }, + { + "stringValue": "st_OMA" + }, + { + "stringValue": "st_PAL" + }, + { + "stringValue": "st_PDT" + }, + { + "stringValue": "st_PGT" + }, + { + "stringValue": "st_PIA" + }, + { + "stringValue": "st_POE" + }, + { + "stringValue": "st_PRF" + }, + { + "stringValue": "st_PSC" + }, + { + "stringValue": "st_PTB" + }, + { + "stringValue": "st_QFA" + }, + { + "stringValue": "st_QTR" + }, + { + "stringValue": "st_QXE" + }, + { + "stringValue": "st_RAM" + }, + { + "stringValue": "st_RBA" + }, + { + "stringValue": "st_REU" + }, + { + "stringValue": "st_RJA" + }, + { + "stringValue": "st_RPB" + }, + { + "stringValue": "st_RVF" + }, + { + "stringValue": "st_RWD" + }, + { + "stringValue": "st_SAA" + }, + { + "stringValue": "st_SAS" + }, + { + "stringValue": "st_SAT" + }, + { + "stringValue": "st_SBI" + }, + { + "stringValue": "st_SEY" + }, + { + "stringValue": "st_SIA" + }, + { + "stringValue": "st_SIL" + }, + { + "stringValue": "st_SJX" + }, + { + "stringValue": "st_SKU" + }, + { + "stringValue": "st_SKW" + }, + { + "stringValue": "st_SVA" + }, + { + "stringValue": "st_SWA" + }, + { + "stringValue": "st_SWR" + }, + { + "stringValue": "st_SWU" + }, + { + "stringValue": "st_SXS" + }, + { + "stringValue": "st_SZS" + }, + { + "stringValue": "st_TAP" + }, + { + "stringValue": "st_TCV" + }, + { + "stringValue": "st_TGW" + }, + { + "stringValue": "st_THA" + }, + { + "stringValue": "st_THT" + }, + { + "stringValue": "st_THY" + }, + { + "stringValue": "st_TIN" + }, + { + "stringValue": "st_TOS" + }, + { + "stringValue": "st_TPC" + }, + { + "stringValue": "st_TRA" + }, + { + "stringValue": "st_TSC" + }, + { + "stringValue": "st_TUI" + }, + { + "stringValue": "st_TVF" + }, + { + "stringValue": "st_TVS" + }, + { + "stringValue": "st_UAE" + }, + { + "stringValue": "st_UAL" + }, + { + "stringValue": "st_UIA" + }, + { + "stringValue": "st_VIR" + }, + { + "stringValue": "st_VIV" + }, + { + "stringValue": "st_VJH" + }, + { + "stringValue": "st_VJT" + }, + { + "stringValue": "st_VLG" + }, + { + "stringValue": "st_VOE" + }, + { + "stringValue": "st_VOZ" + }, + { + "stringValue": "st_VRE" + }, + { + "stringValue": "st_VTA" + }, + { + "stringValue": "st_VTI" + }, + { + "stringValue": "st_VXP" + }, + { + "stringValue": "st_WIF" + }, + { + "stringValue": "st_WJA" + }, + { + "stringValue": "st_XBO" + }, + { + "stringValue": "st_YB" + } + ] + } + }, + "st_BWA": { + "arrayValue": { + "values": [ + { + "stringValue": "st_AAL" + }, + { + "stringValue": "st_ACA" + }, + { + "stringValue": "st_ASA" + }, + { + "stringValue": "st_BAW" + }, + { + "stringValue": "st_CMP" + }, + { + "stringValue": "st_DAL" + }, + { + "stringValue": "st_DLH" + }, + { + "stringValue": "st_ENY" + }, + { + "stringValue": "st_ETD" + }, + { + "stringValue": "st_JBU" + }, + { + "stringValue": "st_NKS" + }, + { + "stringValue": "st_POE" + }, + { + "stringValue": "st_SWA" + }, + { + "stringValue": "st_UAL" + }, + { + "stringValue": "st_VIR" + }, + { + "stringValue": "st_WJA" + } + ] + } + }, + "st_TSC": { + "arrayValue": { + "values": [ + { + "stringValue": "st_AAL" + }, + { + "stringValue": "st_ACA" + }, + { + "stringValue": "st_AEA" + }, + { + "stringValue": "st_AFR" + }, + { + "stringValue": "st_AIE" + }, + { + "stringValue": "st_AKT" + }, + { + "stringValue": "st_AMX" + }, + { + "stringValue": "st_ANT" + }, + { + "stringValue": "st_ASA" + }, + { + "stringValue": "st_AUA" + }, + { + "stringValue": "st_AVA" + }, + { + "stringValue": "st_AZU" + }, + { + "stringValue": "st_BAW" + }, + { + "stringValue": "st_BEL" + }, + { + "stringValue": "st_BLS" + }, + { + "stringValue": "st_CAL" + }, + { + "stringValue": "st_CAV" + }, + { + "stringValue": "st_CCM" + }, + { + "stringValue": "st_CMP" + }, + { + "stringValue": "st_CRK" + }, + { + "stringValue": "st_CRQ" + }, + { + "stringValue": "st_DAL" + }, + { + "stringValue": "st_DJT" + }, + { + "stringValue": "st_DLH" + }, + { + "stringValue": "st_DWI" + }, + { + "stringValue": "st_ETD" + }, + { + "stringValue": "st_EVA" + }, + { + "stringValue": "st_EWG" + }, + { + "stringValue": "st_FBU" + }, + { + "stringValue": "st_FIN" + }, + { + "stringValue": "st_FLE" + }, + { + "stringValue": "st_FPO" + }, + { + "stringValue": "st_FWI" + }, + { + "stringValue": "st_GLO" + }, + { + "stringValue": "st_GLR" + }, + { + "stringValue": "st_HAL" + }, + { + "stringValue": "st_IBB" + }, + { + "stringValue": "st_IBE" + }, + { + "stringValue": "st_JBU" + }, + { + "stringValue": "st_JZA" + }, + { + "stringValue": "st_JZR" + }, + { + "stringValue": "st_KMM" + }, + { + "stringValue": "st_LAN" + }, + { + "stringValue": "st_LOG" + }, + { + "stringValue": "st_LOT" + }, + { + "stringValue": "st_MXY" + }, + { + "stringValue": "st_NKS" + }, + { + "stringValue": "st_P3" + }, + { + "stringValue": "st_POE" + }, + { + "stringValue": "st_POE_2025" + }, + { + "stringValue": "st_PRO" + }, + { + "stringValue": "st_PSC" + }, + { + "stringValue": "st_PVL" + }, + { + "stringValue": "st_QFA" + }, + { + "stringValue": "st_QTR" + }, + { + "stringValue": "st_REU" + }, + { + "stringValue": "st_RJA" + }, + { + "stringValue": "st_RPB" + }, + { + "stringValue": "st_SAT" + }, + { + "stringValue": "st_SCX" + }, + { + "stringValue": "st_SWA" + }, + { + "stringValue": "st_SWR" + }, + { + "stringValue": "st_TAP" + }, + { + "stringValue": "st_THY" + }, + { + "stringValue": "st_TRA" + }, + { + "stringValue": "st_TSC" + }, + { + "stringValue": "st_TVF" + }, + { + "stringValue": "st_UAL" + }, + { + "stringValue": "st_VIR" + }, + { + "stringValue": "st_VIV" + }, + { + "stringValue": "st_VLG" + }, + { + "stringValue": "st_VOE" + }, + { + "stringValue": "st_WIA" + }, + { + "stringValue": "st_WJA" + } + ] + } + }, + "st_SEY": { + "arrayValue": { + "values": [ + { + "stringValue": "st_DLH" + }, + { + "stringValue": "st_UAE" + } + ] + } + }, + "st_CUA": { + "arrayValue": { + "values": [ + { + "stringValue": "st_ACA" + }, + { + "stringValue": "st_AEA" + }, + { + "stringValue": "st_AFR" + }, + { + "stringValue": "st_AMX" + }, + { + "stringValue": "st_ANZ" + }, + { + "stringValue": "st_ARG" + }, + { + "stringValue": "st_ASA" + }, + { + "stringValue": "st_AUA" + }, + { + "stringValue": "st_CAL" + }, + { + "stringValue": "st_CES" + }, + { + "stringValue": "st_CSA" + }, + { + "stringValue": "st_CXA" + }, + { + "stringValue": "st_DAL" + }, + { + "stringValue": "st_ETD" + }, + { + "stringValue": "st_FIN" + }, + { + "stringValue": "st_GIA" + }, + { + "stringValue": "st_HAL" + }, + { + "stringValue": "st_HVN" + }, + { + "stringValue": "st_JJP" + }, + { + "stringValue": "st_JSA" + }, + { + "stringValue": "st_JST" + }, + { + "stringValue": "st_KAL" + }, + { + "stringValue": "st_KLM" + }, + { + "stringValue": "st_KQA" + }, + { + "stringValue": "st_LOT" + }, + { + "stringValue": "st_MEA" + }, + { + "stringValue": "st_NKS" + }, + { + "stringValue": "st_QFA" + }, + { + "stringValue": "st_RBA" + }, + { + "stringValue": "st_VIR" + }, + { + "stringValue": "st_VTA" + } + ] + } + }, + "st_PWF": { + "arrayValue": { + "values": [ + { + "stringValue": "st_DLH" + } + ] + } + }, + "st_SKW": { + "arrayValue": { + "values": [ + { + "stringValue": "st_AAL" + }, + { + "stringValue": "st_AAY" + }, + { + "stringValue": "st_ACA" + }, + { + "stringValue": "st_ACI" + }, + { + "stringValue": "st_AFR" + }, + { + "stringValue": "st_AIE" + }, + { + "stringValue": "st_AIZ" + }, + { + "stringValue": "st_AKT" + }, + { + "stringValue": "st_AMX" + }, + { + "stringValue": "st_ANT" + }, + { + "stringValue": "st_ANZ" + }, + { + "stringValue": "st_ARG" + }, + { + "stringValue": "st_ASA" + }, + { + "stringValue": "st_ASH" + }, + { + "stringValue": "st_ASL" + }, + { + "stringValue": "st_AUA" + }, + { + "stringValue": "st_AVA" + }, + { + "stringValue": "st_AZU" + }, + { + "stringValue": "st_BAW" + }, + { + "stringValue": "st_BEL" + }, + { + "stringValue": "st_BHS" + }, + { + "stringValue": "st_BRX" + }, + { + "stringValue": "st_BTQ" + }, + { + "stringValue": "st_CAL" + }, + { + "stringValue": "st_CAY" + }, + { + "stringValue": "st_CFG" + }, + { + "stringValue": "st_CMP" + }, + { + "stringValue": "st_CNF" + }, + { + "stringValue": "st_CPA" + }, + { + "stringValue": "st_CRQ" + }, + { + "stringValue": "st_CSA" + }, + { + "stringValue": "st_CTN" + }, + { + "stringValue": "st_DAL" + }, + { + "stringValue": "st_DLA" + }, + { + "stringValue": "st_DLH" + }, + { + "stringValue": "st_ELY" + }, + { + "stringValue": "st_ETD" + }, + { + "stringValue": "st_EVA" + }, + { + "stringValue": "st_FBU" + }, + { + "stringValue": "st_FDB" + }, + { + "stringValue": "st_FDX" + }, + { + "stringValue": "st_FDY" + }, + { + "stringValue": "st_FFT" + }, + { + "stringValue": "st_FIN" + }, + { + "stringValue": "st_FJI" + }, + { + "stringValue": "st_FWI" + }, + { + "stringValue": "st_GLO" + }, + { + "stringValue": "st_GLR" + }, + { + "stringValue": "st_GPD" + }, + { + "stringValue": "st_GZ" + }, + { + "stringValue": "st_HAL" + }, + { + "stringValue": "st_HDA" + }, + { + "stringValue": "st_IBE" + }, + { + "stringValue": "st_ICE" + }, + { + "stringValue": "st_ISR" + }, + { + "stringValue": "st_JAL" + }, + { + "stringValue": "st_JBU" + }, + { + "stringValue": "st_JST" + }, + { + "stringValue": "st_JSX" + }, + { + "stringValue": "st_KAL" + }, + { + "stringValue": "st_KAP" + }, + { + "stringValue": "st_KEN" + }, + { + "stringValue": "st_KLM" + }, + { + "stringValue": "st_KQA" + }, + { + "stringValue": "st_LAN" + }, + { + "stringValue": "st_LGL" + }, + { + "stringValue": "st_LOG" + }, + { + "stringValue": "st_LOT" + }, + { + "stringValue": "st_MEA" + }, + { + "stringValue": "st_MXY" + }, + { + "stringValue": "st_NBT" + }, + { + "stringValue": "st_NKS" + }, + { + "stringValue": "st_OAW" + }, + { + "stringValue": "st_OMA" + }, + { + "stringValue": "st_PAG" + }, + { + "stringValue": "st_PCO" + }, + { + "stringValue": "st_POE" + }, + { + "stringValue": "st_QFA" + }, + { + "stringValue": "st_RJA" + }, + { + "stringValue": "st_RPB" + }, + { + "stringValue": "st_RVF" + }, + { + "stringValue": "st_RZO" + }, + { + "stringValue": "st_SAS" + }, + { + "stringValue": "st_SCE" + }, + { + "stringValue": "st_SCX" + }, + { + "stringValue": "st_SEY" + }, + { + "stringValue": "st_SIL" + }, + { + "stringValue": "st_SKW" + }, + { + "stringValue": "st_SVA" + }, + { + "stringValue": "st_SWA" + }, + { + "stringValue": "st_SWR" + }, + { + "stringValue": "st_SXS" + }, + { + "stringValue": "st_TAP" + }, + { + "stringValue": "st_TCV" + }, + { + "stringValue": "st_THT" + }, + { + "stringValue": "st_TIN" + }, + { + "stringValue": "st_TOS" + }, + { + "stringValue": "st_TRA" + }, + { + "stringValue": "st_TSC" + }, + { + "stringValue": "st_TTW" + }, + { + "stringValue": "st_TUI" + }, + { + "stringValue": "st_UAL" + }, + { + "stringValue": "st_VIR" + }, + { + "stringValue": "st_VLG" + }, + { + "stringValue": "st_VOZ" + }, + { + "stringValue": "st_VTE" + }, + { + "stringValue": "st_VXP" + }, + { + "stringValue": "st_WIA" + }, + { + "stringValue": "st_WIF" + }, + { + "stringValue": "st_WJA" + }, + { + "stringValue": "st_WSG" + }, + { + "stringValue": "st_WSN" + } + ] + } + }, + "st_AIZ": { + "arrayValue": { + "values": [ + { + "stringValue": "st_AAL" + }, + { + "stringValue": "st_AFR" + }, + { + "stringValue": "st_DAL" + }, + { + "stringValue": "st_ELY" + }, + { + "stringValue": "st_UAE" + }, + { + "stringValue": "st_UAL" + } + ] + } + }, + "st_ARG": { + "arrayValue": { + "values": [ + { + "stringValue": "st_AAL" + }, + { + "stringValue": "st_ACA" + }, + { + "stringValue": "st_AEA" + }, + { + "stringValue": "st_AFL" + }, + { + "stringValue": "st_AFR" + }, + { + "stringValue": "st_AIZ" + }, + { + "stringValue": "st_AKT" + }, + { + "stringValue": "st_AMX" + }, + { + "stringValue": "st_ANZ" + }, + { + "stringValue": "st_ARG" + }, + { + "stringValue": "st_ASA" + }, + { + "stringValue": "st_ASH" + }, + { + "stringValue": "st_AUA" + }, + { + "stringValue": "st_AVA" + }, + { + "stringValue": "st_AZU" + }, + { + "stringValue": "st_BAW" + }, + { + "stringValue": "st_BEL" + }, + { + "stringValue": "st_BTI" + }, + { + "stringValue": "st_CAL" + }, + { + "stringValue": "st_CAY" + }, + { + "stringValue": "st_CES" + }, + { + "stringValue": "st_CFG" + }, + { + "stringValue": "st_CMP" + }, + { + "stringValue": "st_CPA" + }, + { + "stringValue": "st_CSA" + }, + { + "stringValue": "st_CSH" + }, + { + "stringValue": "st_CTN" + }, + { + "stringValue": "st_CXA" + }, + { + "stringValue": "st_DAL" + }, + { + "stringValue": "st_DLA" + }, + { + "stringValue": "st_DLH" + }, + { + "stringValue": "st_EDW" + }, + { + "stringValue": "st_ELY" + }, + { + "stringValue": "st_ETD" + }, + { + "stringValue": "st_FFT" + }, + { + "stringValue": "st_FIN" + }, + { + "stringValue": "st_GIA" + }, + { + "stringValue": "st_GLO" + }, + { + "stringValue": "st_HDA" + }, + { + "stringValue": "st_HVN" + }, + { + "stringValue": "st_IBE" + }, + { + "stringValue": "st_ICE" + }, + { + "stringValue": "st_ISR" + }, + { + "stringValue": "st_ITY" + }, + { + "stringValue": "st_JBU" + }, + { + "stringValue": "st_JJP" + }, + { + "stringValue": "st_JSA" + }, + { + "stringValue": "st_JST" + }, + { + "stringValue": "st_KAL" + }, + { + "stringValue": "st_KLM" + }, + { + "stringValue": "st_KMM" + }, + { + "stringValue": "st_KQA" + }, + { + "stringValue": "st_LAN" + }, + { + "stringValue": "st_LNE" + }, + { + "stringValue": "st_LOT" + }, + { + "stringValue": "st_LRC" + }, + { + "stringValue": "st_MEA" + }, + { + "stringValue": "st_NKS" + }, + { + "stringValue": "st_OMA" + }, + { + "stringValue": "st_QFA" + }, + { + "stringValue": "st_QTR" + }, + { + "stringValue": "st_RJA" + }, + { + "stringValue": "st_ROT" + }, + { + "stringValue": "st_RZO" + }, + { + "stringValue": "st_SAA" + }, + { + "stringValue": "st_SAS" + }, + { + "stringValue": "st_SAT" + }, + { + "stringValue": "st_SKU" + }, + { + "stringValue": "st_SKX" + }, + { + "stringValue": "st_SVA" + }, + { + "stringValue": "st_SWA" + }, + { + "stringValue": "st_SWR" + }, + { + "stringValue": "st_TAP" + }, + { + "stringValue": "st_THY" + }, + { + "stringValue": "st_TVS" + }, + { + "stringValue": "st_UAE" + }, + { + "stringValue": "st_UAL" + }, + { + "stringValue": "st_VIR" + }, + { + "stringValue": "st_VLG" + }, + { + "stringValue": "st_VOE" + }, + { + "stringValue": "st_VOZ" + } + ] + } + }, + "st_WSN": { + "arrayValue": { + "values": [ + { + "stringValue": "st_ASA" + }, + { + "stringValue": "st_DAL" + }, + { + "stringValue": "st_HAL" + }, + { + "stringValue": "st_SWA" + }, + { + "stringValue": "st_UAL" + } + ] + } + }, + "st_BLS": { + "arrayValue": { + "values": [ + { + "stringValue": "st_0N" + }, + { + "stringValue": "st_AAY" + }, + { + "stringValue": "st_ACA" + }, + { + "stringValue": "st_AFR" + }, + { + "stringValue": "st_AIE" + }, + { + "stringValue": "st_AKT" + }, + { + "stringValue": "st_AMX" + }, + { + "stringValue": "st_ANT" + }, + { + "stringValue": "st_ASA" + }, + { + "stringValue": "st_AUA" + }, + { + "stringValue": "st_BAW" + }, + { + "stringValue": "st_BLS" + }, + { + "stringValue": "st_CAV" + }, + { + "stringValue": "st_CCM" + }, + { + "stringValue": "st_CFG" + }, + { + "stringValue": "st_CRQ" + }, + { + "stringValue": "st_DAL" + }, + { + "stringValue": "st_DLA" + }, + { + "stringValue": "st_DLH" + }, + { + "stringValue": "st_EDW" + }, + { + "stringValue": "st_ELY" + }, + { + "stringValue": "st_EWG" + }, + { + "stringValue": "st_FFT" + }, + { + "stringValue": "st_FIN" + }, + { + "stringValue": "st_FLE" + }, + { + "stringValue": "st_GLO" + }, + { + "stringValue": "st_GLR" + }, + { + "stringValue": "st_ICE" + }, + { + "stringValue": "st_ISR" + }, + { + "stringValue": "st_JBU" + }, + { + "stringValue": "st_JJP" + }, + { + "stringValue": "st_JSA" + }, + { + "stringValue": "st_JST" + }, + { + "stringValue": "st_JSX" + }, + { + "stringValue": "st_KLM" + }, + { + "stringValue": "st_LHX" + }, + { + "stringValue": "st_MXY" + }, + { + "stringValue": "st_NBT" + }, + { + "stringValue": "st_OMA" + }, + { + "stringValue": "st_PCO" + }, + { + "stringValue": "st_POE" + }, + { + "stringValue": "st_THT" + }, + { + "stringValue": "st_TIN" + }, + { + "stringValue": "st_TSC" + }, + { + "stringValue": "st_UAL" + }, + { + "stringValue": "st_UBT" + }, + { + "stringValue": "st_WJA" + }, + { + "stringValue": "st_YB" + } + ] + } + }, + "st_EAI": { + "arrayValue": { + "values": [ + { + "stringValue": "st_EIN" + } + ] + } + }, + "st_CFE": { + "arrayValue": { + "values": [ + { + "stringValue": "st_QFA" + }, + { + "stringValue": "st_UAL" + } + ] + } + }, + "st_ACI": { + "arrayValue": { + "values": [ + { + "stringValue": "st_AAR" + }, + { + "stringValue": "st_AAY" + }, + { + "stringValue": "st_ACI" + }, + { + "stringValue": "st_ADR" + }, + { + "stringValue": "st_AFL" + }, + { + "stringValue": "st_AFR" + }, + { + "stringValue": "st_AIE" + }, + { + "stringValue": "st_AIZ" + }, + { + "stringValue": "st_AMX" + }, + { + "stringValue": "st_ANG" + }, + { + "stringValue": "st_ANZ" + }, + { + "stringValue": "st_ASA" + }, + { + "stringValue": "st_ASH" + }, + { + "stringValue": "st_AUA" + }, + { + "stringValue": "st_AVN" + }, + { + "stringValue": "st_BCY" + }, + { + "stringValue": "st_BEL" + }, + { + "stringValue": "st_BRX" + }, + { + "stringValue": "st_BTI" + }, + { + "stringValue": "st_CAL" + }, + { + "stringValue": "st_CAY" + }, + { + "stringValue": "st_CCM" + }, + { + "stringValue": "st_CPA" + }, + { + "stringValue": "st_CRL" + }, + { + "stringValue": "st_DAL" + }, + { + "stringValue": "st_DLA" + }, + { + "stringValue": "st_DLH" + }, + { + "stringValue": "st_ELY" + }, + { + "stringValue": "st_ETD" + }, + { + "stringValue": "st_EWG" + }, + { + "stringValue": "st_FIN" + }, + { + "stringValue": "st_FJI" + }, + { + "stringValue": "st_FLI" + }, + { + "stringValue": "st_FPO" + }, + { + "stringValue": "st_FWI" + }, + { + "stringValue": "st_GIA" + }, + { + "stringValue": "st_GLO" + }, + { + "stringValue": "st_HAL" + }, + { + "stringValue": "st_HDA" + }, + { + "stringValue": "st_HOP" + }, + { + "stringValue": "st_IBE" + }, + { + "stringValue": "st_ICE" + }, + { + "stringValue": "st_ISR" + }, + { + "stringValue": "st_JAL" + }, + { + "stringValue": "st_JBU" + }, + { + "stringValue": "st_JST" + }, + { + "stringValue": "st_KAL" + }, + { + "stringValue": "st_KLM" + }, + { + "stringValue": "st_KMM" + }, + { + "stringValue": "st_KQA" + }, + { + "stringValue": "st_LOT" + }, + { + "stringValue": "st_MAS" + }, + { + "stringValue": "st_MAU" + }, + { + "stringValue": "st_MEA" + }, + { + "stringValue": "st_MGX" + }, + { + "stringValue": "st_NMB" + }, + { + "stringValue": "st_QFA" + }, + { + "stringValue": "st_REU" + }, + { + "stringValue": "st_ROT" + }, + { + "stringValue": "st_SAS" + }, + { + "stringValue": "st_SOL" + }, + { + "stringValue": "st_SWR" + }, + { + "stringValue": "st_THA" + }, + { + "stringValue": "st_THT" + }, + { + "stringValue": "st_THY" + }, + { + "stringValue": "st_TPC" + }, + { + "stringValue": "st_TUI" + }, + { + "stringValue": "st_UAE" + }, + { + "stringValue": "st_VIR" + }, + { + "stringValue": "st_VLG" + }, + { + "stringValue": "st_VOZ" + }, + { + "stringValue": "st_VTA" + } + ] + } + }, + "st_0N": { + "arrayValue": { + "values": [ + { + "stringValue": "st_POE" + }, + { + "stringValue": "st_WJA" + } + ] + } + }, + "st_CMP": { + "arrayValue": { + "values": [ + { + "stringValue": "st_AAL" + }, + { + "stringValue": "st_AAR" + }, + { + "stringValue": "st_ACA" + }, + { + "stringValue": "st_AEA" + }, + { + "stringValue": "st_AEE" + }, + { + "stringValue": "st_AFR" + }, + { + "stringValue": "st_AMX" + }, + { + "stringValue": "st_ANZ" + }, + { + "stringValue": "st_ARG" + }, + { + "stringValue": "st_ASA" + }, + { + "stringValue": "st_AVA" + }, + { + "stringValue": "st_AZU" + }, + { + "stringValue": "st_BAW" + }, + { + "stringValue": "st_BEL" + }, + { + "stringValue": "st_BHS" + }, + { + "stringValue": "st_BWA" + }, + { + "stringValue": "st_CAY" + }, + { + "stringValue": "st_CCM" + }, + { + "stringValue": "st_CFG" + }, + { + "stringValue": "st_CMP" + }, + { + "stringValue": "st_CPA" + }, + { + "stringValue": "st_CTN" + }, + { + "stringValue": "st_DAL" + }, + { + "stringValue": "st_DLH" + }, + { + "stringValue": "st_EDW" + }, + { + "stringValue": "st_ELY" + }, + { + "stringValue": "st_ENY" + }, + { + "stringValue": "st_ETD" + }, + { + "stringValue": "st_EVA" + }, + { + "stringValue": "st_FFT" + }, + { + "stringValue": "st_FIN" + }, + { + "stringValue": "st_FWI" + }, + { + "stringValue": "st_GLO" + }, + { + "stringValue": "st_HAL" + }, + { + "stringValue": "st_IBE" + }, + { + "stringValue": "st_IBS" + }, + { + "stringValue": "st_ICE" + }, + { + "stringValue": "st_ISS" + }, + { + "stringValue": "st_ITY" + }, + { + "stringValue": "st_JBU" + }, + { + "stringValue": "st_JST" + }, + { + "stringValue": "st_KAL" + }, + { + "stringValue": "st_KAP" + }, + { + "stringValue": "st_KLM" + }, + { + "stringValue": "st_LAN" + }, + { + "stringValue": "st_LOT" + }, + { + "stringValue": "st_NKS" + }, + { + "stringValue": "st_OCN" + }, + { + "stringValue": "st_OMA" + }, + { + "stringValue": "st_QFA" + }, + { + "stringValue": "st_QTR" + }, + { + "stringValue": "st_RPA" + }, + { + "stringValue": "st_SAS" + }, + { + "stringValue": "st_SIL" + }, + { + "stringValue": "st_SKU" + }, + { + "stringValue": "st_SKW" + }, + { + "stringValue": "st_SWA" + }, + { + "stringValue": "st_SWR" + }, + { + "stringValue": "st_TAI" + }, + { + "stringValue": "st_TAP" + }, + { + "stringValue": "st_THY" + }, + { + "stringValue": "st_TSC" + }, + { + "stringValue": "st_UAE" + }, + { + "stringValue": "st_UAL" + }, + { + "stringValue": "st_VIR" + }, + { + "stringValue": "st_VLG" + }, + { + "stringValue": "st_VOE" + }, + { + "stringValue": "st_VOZ" + }, + { + "stringValue": "st_WIA" + }, + { + "stringValue": "st_WJA" + } + ] + } + }, + "st_CAV": { + "arrayValue": { + "values": [ + { + "stringValue": "st_ACA" + }, + { + "stringValue": "st_FLE" + }, + { + "stringValue": "st_POE" + }, + { + "stringValue": "st_UAL" + }, + { + "stringValue": "st_WJA" + } + ] + } + }, + "st_GPD": { + "arrayValue": { + "values": [ + { + "stringValue": "st_AAL" + }, + { + "stringValue": "st_DAL" + }, + { + "stringValue": "st_FFT" + }, + { + "stringValue": "st_JBU" + }, + { + "stringValue": "st_NKS" + }, + { + "stringValue": "st_SWA" + }, + { + "stringValue": "st_UAL" + } + ] + } + }, + "st_FDX": { + "arrayValue": { + "values": [ + { + "stringValue": "st_AAL" + }, + { + "stringValue": "st_AAY" + }, + { + "stringValue": "st_ACA" + }, + { + "stringValue": "st_AKT" + }, + { + "stringValue": "st_ASA" + }, + { + "stringValue": "st_ASH" + }, + { + "stringValue": "st_AWI" + }, + { + "stringValue": "st_AZU" + }, + { + "stringValue": "st_BLK" + }, + { + "stringValue": "st_BWA" + }, + { + "stringValue": "st_CAY" + }, + { + "stringValue": "st_CPA" + }, + { + "stringValue": "st_CVU" + }, + { + "stringValue": "st_DAL" + }, + { + "stringValue": "st_ETD" + }, + { + "stringValue": "st_FFT" + }, + { + "stringValue": "st_GFA" + }, + { + "stringValue": "st_GLF" + }, + { + "stringValue": "st_GPD" + }, + { + "stringValue": "st_HAL" + }, + { + "stringValue": "st_HDA" + }, + { + "stringValue": "st_HI" + }, + { + "stringValue": "st_ICE" + }, + { + "stringValue": "st_JBU" + }, + { + "stringValue": "st_JSX" + }, + { + "stringValue": "st_KAP" + }, + { + "stringValue": "st_KDS" + }, + { + "stringValue": "st_LTU" + }, + { + "stringValue": "st_MHO" + }, + { + "stringValue": "st_MXY" + }, + { + "stringValue": "st_NKS" + }, + { + "stringValue": "st_OAW" + }, + { + "stringValue": "st_ONE" + }, + { + "stringValue": "st_POE" + }, + { + "stringValue": "st_RVF" + }, + { + "stringValue": "st_SAS" + }, + { + "stringValue": "st_SCE" + }, + { + "stringValue": "st_SCX" + }, + { + "stringValue": "st_SEY" + }, + { + "stringValue": "st_SIL" + }, + { + "stringValue": "st_SWA" + }, + { + "stringValue": "st_UAE" + }, + { + "stringValue": "st_UAL" + }, + { + "stringValue": "st_VLG" + }, + { + "stringValue": "st_WJA" + } + ] + } + }, + "st_VTS": { + "arrayValue": { + "values": [ + { + "stringValue": "st_ASA" + } + ] + } + }, + "st_THT": { + "arrayValue": { + "values": [ + { + "stringValue": "st_AAL" + }, + { + "stringValue": "st_ACA" + }, + { + "stringValue": "st_AFR" + }, + { + "stringValue": "st_ANZ" + }, + { + "stringValue": "st_ASA" + }, + { + "stringValue": "st_DAL" + }, + { + "stringValue": "st_DLH" + }, + { + "stringValue": "st_JBU" + }, + { + "stringValue": "st_SWA" + }, + { + "stringValue": "st_UAL" + }, + { + "stringValue": "st_VTA" + } + ] + } + }, + "st_AJX": { + "arrayValue": { + "values": [ + { + "stringValue": "st_KAL" + } + ] + } + }, + "st_BCS": { + "arrayValue": { + "values": [ + { + "stringValue": "st_BEL" + }, + { + "stringValue": "st_CFG" + }, + { + "stringValue": "st_DLH" + } + ] + } + }, + "st_JST": { + "arrayValue": { + "values": [ + { + "stringValue": "st_4T" + }, + { + "stringValue": "st_AAL" + }, + { + "stringValue": "st_AAR" + }, + { + "stringValue": "st_AAY" + }, + { + "stringValue": "st_ABY" + }, + { + "stringValue": "st_ACA" + }, + { + "stringValue": "st_ACI" + }, + { + "stringValue": "st_AEA" + }, + { + "stringValue": "st_AEE" + }, + { + "stringValue": "st_AFR" + }, + { + "stringValue": "st_AIC" + }, + { + "stringValue": "st_AIE" + }, + { + "stringValue": "st_AIZ" + }, + { + "stringValue": "st_AKT" + }, + { + "stringValue": "st_ALK" + }, + { + "stringValue": "st_AMX" + }, + { + "stringValue": "st_ANA" + }, + { + "stringValue": "st_ANG" + }, + { + "stringValue": "st_ANT" + }, + { + "stringValue": "st_ANZ" + }, + { + "stringValue": "st_APZ" + }, + { + "stringValue": "st_ARG" + }, + { + "stringValue": "st_ASA" + }, + { + "stringValue": "st_ASH" + }, + { + "stringValue": "st_ASL" + }, + { + "stringValue": "st_AUA" + }, + { + "stringValue": "st_AVA" + }, + { + "stringValue": "st_AVN" + }, + { + "stringValue": "st_AZU" + }, + { + "stringValue": "st_BAW" + }, + { + "stringValue": "st_BCY" + }, + { + "stringValue": "st_BEL" + }, + { + "stringValue": "st_BKP" + }, + { + "stringValue": "st_BLS" + }, + { + "stringValue": "st_BRX" + }, + { + "stringValue": "st_BTI" + }, + { + "stringValue": "st_BTQ" + }, + { + "stringValue": "st_BWA" + }, + { + "stringValue": "st_CAI" + }, + { + "stringValue": "st_CAL" + }, + { + "stringValue": "st_CAV" + }, + { + "stringValue": "st_CAY" + }, + { + "stringValue": "st_CCM" + }, + { + "stringValue": "st_CES" + }, + { + "stringValue": "st_CFG" + }, + { + "stringValue": "st_CKS" + }, + { + "stringValue": "st_CMP" + }, + { + "stringValue": "st_CPA" + }, + { + "stringValue": "st_CRK" + }, + { + "stringValue": "st_CRL" + }, + { + "stringValue": "st_CTN" + }, + { + "stringValue": "st_DAL" + }, + { + "stringValue": "st_DJT" + }, + { + "stringValue": "st_DLA" + }, + { + "stringValue": "st_DLH" + }, + { + "stringValue": "st_DTR" + }, + { + "stringValue": "st_EIN" + }, + { + "stringValue": "st_ELY" + }, + { + "stringValue": "st_ENY" + }, + { + "stringValue": "st_ETD" + }, + { + "stringValue": "st_ETH" + }, + { + "stringValue": "st_EVA" + }, + { + "stringValue": "st_EWG" + }, + { + "stringValue": "st_EXV" + }, + { + "stringValue": "st_FBU" + }, + { + "stringValue": "st_FDB" + }, + { + "stringValue": "st_FDY" + }, + { + "stringValue": "st_FEG" + }, + { + "stringValue": "st_FFT" + }, + { + "stringValue": "st_FIN" + }, + { + "stringValue": "st_FJI" + }, + { + "stringValue": "st_FLE" + }, + { + "stringValue": "st_FPO" + }, + { + "stringValue": "st_FVJ" + }, + { + "stringValue": "st_FWI" + }, + { + "stringValue": "st_GAO" + }, + { + "stringValue": "st_GFA" + }, + { + "stringValue": "st_GLO" + }, + { + "stringValue": "st_GLR" + }, + { + "stringValue": "st_GTI" + }, + { + "stringValue": "st_GZ" + }, + { + "stringValue": "st_HAL" + }, + { + "stringValue": "st_HKE" + }, + { + "stringValue": "st_HVN" + }, + { + "stringValue": "st_IBE" + }, + { + "stringValue": "st_ICE" + }, + { + "stringValue": "st_IGO" + }, + { + "stringValue": "st_ISR" + }, + { + "stringValue": "st_ITY" + }, + { + "stringValue": "st_JAL" + }, + { + "stringValue": "st_JBU" + }, + { + "stringValue": "st_JJP" + }, + { + "stringValue": "st_JSA" + }, + { + "stringValue": "st_JST" + }, + { + "stringValue": "st_JSX" + }, + { + "stringValue": "st_JZR" + }, + { + "stringValue": "st_KAC" + }, + { + "stringValue": "st_KAL" + }, + { + "stringValue": "st_KEN" + }, + { + "stringValue": "st_KLM" + }, + { + "stringValue": "st_KMM" + }, + { + "stringValue": "st_KNE" + }, + { + "stringValue": "st_KQA" + }, + { + "stringValue": "st_KZR" + }, + { + "stringValue": "st_LAN" + }, + { + "stringValue": "st_LGL" + }, + { + "stringValue": "st_LOG" + }, + { + "stringValue": "st_LOT" + }, + { + "stringValue": "st_MAS" + }, + { + "stringValue": "st_MAU" + }, + { + "stringValue": "st_MAY" + }, + { + "stringValue": "st_MDA" + }, + { + "stringValue": "st_MEA" + }, + { + "stringValue": "st_MGL" + }, + { + "stringValue": "st_MMD" + }, + { + "stringValue": "st_MMZ" + }, + { + "stringValue": "st_MXY" + }, + { + "stringValue": "st_NBT" + }, + { + "stringValue": "st_NKS" + }, + { + "stringValue": "st_OAW" + }, + { + "stringValue": "st_OCN" + }, + { + "stringValue": "st_OMA" + }, + { + "stringValue": "st_PAL" + }, + { + "stringValue": "st_PCO" + }, + { + "stringValue": "st_PGT" + }, + { + "stringValue": "st_PIA" + }, + { + "stringValue": "st_POE" + }, + { + "stringValue": "st_PRF" + }, + { + "stringValue": "st_PSC" + }, + { + "stringValue": "st_PTB" + }, + { + "stringValue": "st_QFA" + }, + { + "stringValue": "st_QTR" + }, + { + "stringValue": "st_RAM" + }, + { + "stringValue": "st_RBA" + }, + { + "stringValue": "st_REU" + }, + { + "stringValue": "st_RJA" + }, + { + "stringValue": "st_RVF" + }, + { + "stringValue": "st_RWD" + }, + { + "stringValue": "st_SAA" + }, + { + "stringValue": "st_SAS" + }, + { + "stringValue": "st_SCX" + }, + { + "stringValue": "st_SEY" + }, + { + "stringValue": "st_SIL" + }, + { + "stringValue": "st_SJX" + }, + { + "stringValue": "st_SKW" + }, + { + "stringValue": "st_SOL" + }, + { + "stringValue": "st_SVA" + }, + { + "stringValue": "st_SWA" + }, + { + "stringValue": "st_SWR" + }, + { + "stringValue": "st_SXS" + }, + { + "stringValue": "st_TAP" + }, + { + "stringValue": "st_THT" + }, + { + "stringValue": "st_THY" + }, + { + "stringValue": "st_TIN" + }, + { + "stringValue": "st_TPC" + }, + { + "stringValue": "st_TRA" + }, + { + "stringValue": "st_TTW" + }, + { + "stringValue": "st_TUI" + }, + { + "stringValue": "st_TVF" + }, + { + "stringValue": "st_TVS" + }, + { + "stringValue": "st_UAE" + }, + { + "stringValue": "st_UAL" + }, + { + "stringValue": "st_UIA" + }, + { + "stringValue": "st_VIR" + }, + { + "stringValue": "st_VIV" + }, + { + "stringValue": "st_VLG" + }, + { + "stringValue": "st_VOE" + }, + { + "stringValue": "st_VOZ" + }, + { + "stringValue": "st_VRE" + }, + { + "stringValue": "st_VTA" + }, + { + "stringValue": "st_VTI" + }, + { + "stringValue": "st_WIA" + }, + { + "stringValue": "st_WIF" + }, + { + "stringValue": "st_WJA" + }, + { + "stringValue": "st_WSN" + } + ] + } + }, + "st_BTI": { + "arrayValue": { + "values": [ + { + "stringValue": "st_AAF" + }, + { + "stringValue": "st_AAL" + }, + { + "stringValue": "st_AAY" + }, + { + "stringValue": "st_ACA" + }, + { + "stringValue": "st_ACI" + }, + { + "stringValue": "st_AEA" + }, + { + "stringValue": "st_AEE" + }, + { + "stringValue": "st_AFR" + }, + { + "stringValue": "st_AIE" + }, + { + "stringValue": "st_AIZ" + }, + { + "stringValue": "st_AKT" + }, + { + "stringValue": "st_ALK" + }, + { + "stringValue": "st_AMX" + }, + { + "stringValue": "st_ARG" + }, + { + "stringValue": "st_ASA" + }, + { + "stringValue": "st_ASH" + }, + { + "stringValue": "st_ASL" + }, + { + "stringValue": "st_AUA" + }, + { + "stringValue": "st_AVA" + }, + { + "stringValue": "st_BAW" + }, + { + "stringValue": "st_BCY" + }, + { + "stringValue": "st_BEE" + }, + { + "stringValue": "st_BEL" + }, + { + "stringValue": "st_BLA" + }, + { + "stringValue": "st_BLS" + }, + { + "stringValue": "st_BTI" + }, + { + "stringValue": "st_BTI" + }, + { + "stringValue": "st_CAL" + }, + { + "stringValue": "st_CCM" + }, + { + "stringValue": "st_CFG" + }, + { + "stringValue": "st_CNF" + }, + { + "stringValue": "st_CPA" + }, + { + "stringValue": "st_CRK" + }, + { + "stringValue": "st_CRL" + }, + { + "stringValue": "st_CTN" + }, + { + "stringValue": "st_CYP" + }, + { + "stringValue": "st_DAL" + }, + { + "stringValue": "st_DLA" + }, + { + "stringValue": "st_DLH" + }, + { + "stringValue": "st_DWI" + }, + { + "stringValue": "st_EDW" + }, + { + "stringValue": "st_ELY" + }, + { + "stringValue": "st_ETD" + }, + { + "stringValue": "st_ETH" + }, + { + "stringValue": "st_EVA" + }, + { + "stringValue": "st_EWG" + }, + { + "stringValue": "st_EWL" + }, + { + "stringValue": "st_FBU" + }, + { + "stringValue": "st_FDB" + }, + { + "stringValue": "st_FIN" + }, + { + "stringValue": "st_FLI" + }, + { + "stringValue": "st_FPO" + }, + { + "stringValue": "st_FWI" + }, + { + "stringValue": "st_GFA" + }, + { + "stringValue": "st_GLO" + }, + { + "stringValue": "st_GLR" + }, + { + "stringValue": "st_HAL" + }, + { + "stringValue": "st_HOP" + }, + { + "stringValue": "st_IBB" + }, + { + "stringValue": "st_IBE" + }, + { + "stringValue": "st_ICE" + }, + { + "stringValue": "st_ISR" + }, + { + "stringValue": "st_ISS" + }, + { + "stringValue": "st_ITY" + }, + { + "stringValue": "st_JBU" + }, + { + "stringValue": "st_KLM" + }, + { + "stringValue": "st_KQA" + }, + { + "stringValue": "st_KZR" + }, + { + "stringValue": "st_LAN" + }, + { + "stringValue": "st_LGL" + }, + { + "stringValue": "st_LOG" + }, + { + "stringValue": "st_LOT" + }, + { + "stringValue": "st_MAU" + }, + { + "stringValue": "st_MAY" + }, + { + "stringValue": "st_MEA" + }, + { + "stringValue": "st_MXY" + }, + { + "stringValue": "st_NBT" + }, + { + "stringValue": "st_NKS" + }, + { + "stringValue": "st_NMB" + }, + { + "stringValue": "st_OMA" + }, + { + "stringValue": "st_POE" + }, + { + "stringValue": "st_QFA" + }, + { + "stringValue": "st_QTR" + }, + { + "stringValue": "st_RAM" + }, + { + "stringValue": "st_RBA" + }, + { + "stringValue": "st_REU" + }, + { + "stringValue": "st_RJA" + }, + { + "stringValue": "st_ROT" + }, + { + "stringValue": "st_RVR" + }, + { + "stringValue": "st_RWD" + }, + { + "stringValue": "st_RXI" + }, + { + "stringValue": "st_SAS" + }, + { + "stringValue": "st_SAT" + }, + { + "stringValue": "st_SVA" + }, + { + "stringValue": "st_SWA" + }, + { + "stringValue": "st_SWR" + }, + { + "stringValue": "st_SXS" + }, + { + "stringValue": "st_TAP" + }, + { + "stringValue": "st_THA" + }, + { + "stringValue": "st_THT" + }, + { + "stringValue": "st_THY" + }, + { + "stringValue": "st_TRA" + }, + { + "stringValue": "st_TUI" + }, + { + "stringValue": "st_TVS" + }, + { + "stringValue": "st_UAE" + }, + { + "stringValue": "st_UAL" + }, + { + "stringValue": "st_VIR" + }, + { + "stringValue": "st_VLG" + }, + { + "stringValue": "st_VOE" + }, + { + "stringValue": "st_VOZ" + }, + { + "stringValue": "st_WIF" + }, + { + "stringValue": "st_WJA" + } + ] + } + }, + "st_MAS": { + "arrayValue": { + "values": [ + { + "stringValue": "st_AAL" + }, + { + "stringValue": "st_ACA" + }, + { + "stringValue": "st_AFR" + }, + { + "stringValue": "st_ANA" + }, + { + "stringValue": "st_ASA" + }, + { + "stringValue": "st_BAW" + }, + { + "stringValue": "st_CAL" + }, + { + "stringValue": "st_CPA" + }, + { + "stringValue": "st_CRK" + }, + { + "stringValue": "st_DAL" + }, + { + "stringValue": "st_DLH" + }, + { + "stringValue": "st_EIN" + }, + { + "stringValue": "st_EVA" + }, + { + "stringValue": "st_FIN" + }, + { + "stringValue": "st_IBE" + }, + { + "stringValue": "st_IGO" + }, + { + "stringValue": "st_JAL" + }, + { + "stringValue": "st_JST" + }, + { + "stringValue": "st_KAL" + }, + { + "stringValue": "st_KLM" + }, + { + "stringValue": "st_MAS" + }, + { + "stringValue": "st_MAS" + }, + { + "stringValue": "st_QFA" + }, + { + "stringValue": "st_QTR" + }, + { + "stringValue": "st_SJX" + }, + { + "stringValue": "st_SVA" + }, + { + "stringValue": "st_SWR" + }, + { + "stringValue": "st_UAE" + }, + { + "stringValue": "st_UAL" + }, + { + "stringValue": "st_VIR" + }, + { + "stringValue": "st_VOZ" + } + ] + } + }, + "st_WIA": { + "arrayValue": { + "values": [ + { + "stringValue": "st_AFR" + }, + { + "stringValue": "st_JBU" + } + ] + } + }, + "st_PAG": { + "arrayValue": { + "values": [ + { + "stringValue": "st_0N" + }, + { + "stringValue": "st_AAY" + }, + { + "stringValue": "st_ACA" + }, + { + "stringValue": "st_AFR" + }, + { + "stringValue": "st_AIE" + }, + { + "stringValue": "st_AKT" + }, + { + "stringValue": "st_AMX" + }, + { + "stringValue": "st_ANT" + }, + { + "stringValue": "st_ASA" + }, + { + "stringValue": "st_AUA" + }, + { + "stringValue": "st_BAW" + }, + { + "stringValue": "st_CAV" + }, + { + "stringValue": "st_CCM" + }, + { + "stringValue": "st_CFG" + }, + { + "stringValue": "st_CRQ" + }, + { + "stringValue": "st_DAL" + }, + { + "stringValue": "st_DLA" + }, + { + "stringValue": "st_EDW" + }, + { + "stringValue": "st_ELY" + }, + { + "stringValue": "st_EWG" + }, + { + "stringValue": "st_FFT" + }, + { + "stringValue": "st_FIN" + }, + { + "stringValue": "st_FLE" + }, + { + "stringValue": "st_GLO" + }, + { + "stringValue": "st_GLR" + }, + { + "stringValue": "st_MXY" + }, + { + "stringValue": "st_POE" + }, + { + "stringValue": "st_THT" + }, + { + "stringValue": "st_TIN" + }, + { + "stringValue": "st_TSC" + }, + { + "stringValue": "st_UAL" + }, + { + "stringValue": "st_WJA" + }, + { + "stringValue": "st_YB" + } + ] + } + }, + "st_NBT": { + "arrayValue": { + "values": [ + { + "stringValue": "st_AFR" + }, + { + "stringValue": "st_AUA" + }, + { + "stringValue": "st_BAW" + }, + { + "stringValue": "st_BEL" + }, + { + "stringValue": "st_BTI" + }, + { + "stringValue": "st_DAL" + }, + { + "stringValue": "st_DLH" + }, + { + "stringValue": "st_FIN" + }, + { + "stringValue": "st_JBU" + }, + { + "stringValue": "st_QFA" + }, + { + "stringValue": "st_SAS" + }, + { + "stringValue": "st_SWA" + }, + { + "stringValue": "st_SWR" + }, + { + "stringValue": "st_VLG" + }, + { + "stringValue": "st_WIF" + } + ] + } + }, + "st_ALK": { + "arrayValue": { + "values": [ + { + "stringValue": "st_AAL" + }, + { + "stringValue": "st_ACA" + }, + { + "stringValue": "st_BAW" + }, + { + "stringValue": "st_CPA" + }, + { + "stringValue": "st_DLH" + }, + { + "stringValue": "st_IBE" + }, + { + "stringValue": "st_IGO" + }, + { + "stringValue": "st_JST" + }, + { + "stringValue": "st_LOT" + }, + { + "stringValue": "st_QFA" + }, + { + "stringValue": "st_QTR" + }, + { + "stringValue": "st_SVA" + } + ] + } + }, + "st_APJ": { + "arrayValue": { + "values": [ + { + "stringValue": "st_ANA" + }, + { + "stringValue": "st_EVA" + }, + { + "stringValue": "st_UAL" + } + ] + } + }, + "st_SPR": { + "arrayValue": { + "values": [ + { + "stringValue": "st_ACA" + } + ] + } + }, + "st_ETH": { + "arrayValue": { + "values": [ + { + "stringValue": "st_AAL" + }, + { + "stringValue": "st_ACA" + }, + { + "stringValue": "st_AFR" + }, + { + "stringValue": "st_ASA" + }, + { + "stringValue": "st_AUA" + }, + { + "stringValue": "st_BAW" + }, + { + "stringValue": "st_CPA" + }, + { + "stringValue": "st_DAL" + }, + { + "stringValue": "st_DLH" + }, + { + "stringValue": "st_FIN" + }, + { + "stringValue": "st_IBE" + }, + { + "stringValue": "st_LOT" + }, + { + "stringValue": "st_QTR" + }, + { + "stringValue": "st_SAS" + }, + { + "stringValue": "st_SWA" + }, + { + "stringValue": "st_SWR" + }, + { + "stringValue": "st_TAP" + }, + { + "stringValue": "st_UAE" + }, + { + "stringValue": "st_UAL" + } + ] + } + }, + "st_CEB": { + "arrayValue": { + "values": [ + { + "stringValue": "st_SWA" + }, + { + "stringValue": "st_UAL" + } + ] + } + }, + "st_CCA": { + "arrayValue": { + "values": [ + { + "stringValue": "st_AAL" + }, + { + "stringValue": "st_AFR" + }, + { + "stringValue": "st_DLH" + }, + { + "stringValue": "st_SWA" + }, + { + "stringValue": "st_UAL" + } + ] + } + }, + "st_EXS": { + "arrayValue": { + "values": [ + { + "stringValue": "st_AAL" + }, + { + "stringValue": "st_AEA" + }, + { + "stringValue": "st_AFR" + }, + { + "stringValue": "st_AJX" + }, + { + "stringValue": "st_ALK" + }, + { + "stringValue": "st_AMX" + }, + { + "stringValue": "st_ARG" + }, + { + "stringValue": "st_ASA" + }, + { + "stringValue": "st_BAW" + }, + { + "stringValue": "st_CAL" + }, + { + "stringValue": "st_CES" + }, + { + "stringValue": "st_CPA" + }, + { + "stringValue": "st_CXA" + }, + { + "stringValue": "st_DAL" + }, + { + "stringValue": "st_EIN" + }, + { + "stringValue": "st_FIN" + }, + { + "stringValue": "st_FJI" + }, + { + "stringValue": "st_GIA" + }, + { + "stringValue": "st_HVN" + }, + { + "stringValue": "st_IBE" + }, + { + "stringValue": "st_ITY" + }, + { + "stringValue": "st_KAL" + }, + { + "stringValue": "st_KLM" + }, + { + "stringValue": "st_KQA" + }, + { + "stringValue": "st_MAS" + }, + { + "stringValue": "st_MEA" + }, + { + "stringValue": "st_OMA" + }, + { + "stringValue": "st_QFA" + }, + { + "stringValue": "st_QTR" + }, + { + "stringValue": "st_RAM" + }, + { + "stringValue": "st_RJA" + }, + { + "stringValue": "st_ROT" + }, + { + "stringValue": "st_SVA" + }, + { + "stringValue": "st_VGI" + }, + { + "stringValue": "st_VIR" + } + ] + } + }, + "st_FBU": { + "arrayValue": { + "values": [ + { + "stringValue": "st_AAL" + }, + { + "stringValue": "st_ACA" + }, + { + "stringValue": "st_AFR" + }, + { + "stringValue": "st_ASA" + }, + { + "stringValue": "st_DLH" + }, + { + "stringValue": "st_JBU" + }, + { + "stringValue": "st_SWA" + }, + { + "stringValue": "st_SWR" + }, + { + "stringValue": "st_UAL" + }, + { + "stringValue": "st_VLG" + }, + { + "stringValue": "st_WJA" + } + ] + } + }, + "st_REU": { + "arrayValue": { + "values": [ + { + "stringValue": "st_AFR" + }, + { + "stringValue": "st_SWR" + } + ] + } + }, + "st_CSH": { + "arrayValue": { + "values": [ + { + "stringValue": "st_AAL" + }, + { + "stringValue": "st_ACA" + }, + { + "stringValue": "st_AEA" + }, + { + "stringValue": "st_AFR" + }, + { + "stringValue": "st_AMX" + }, + { + "stringValue": "st_ANZ" + }, + { + "stringValue": "st_ARG" + }, + { + "stringValue": "st_ASA" + }, + { + "stringValue": "st_AUA" + }, + { + "stringValue": "st_BAW" + }, + { + "stringValue": "st_CAL" + }, + { + "stringValue": "st_CES" + }, + { + "stringValue": "st_CSA" + }, + { + "stringValue": "st_CXA" + }, + { + "stringValue": "st_DAL" + }, + { + "stringValue": "st_ETD" + }, + { + "stringValue": "st_FIN" + }, + { + "stringValue": "st_GIA" + }, + { + "stringValue": "st_HAL" + }, + { + "stringValue": "st_HVN" + }, + { + "stringValue": "st_JJP" + }, + { + "stringValue": "st_JSA" + }, + { + "stringValue": "st_JST" + }, + { + "stringValue": "st_KAL" + }, + { + "stringValue": "st_KLM" + }, + { + "stringValue": "st_KQA" + }, + { + "stringValue": "st_LOT" + }, + { + "stringValue": "st_MEA" + }, + { + "stringValue": "st_NKS" + }, + { + "stringValue": "st_QFA" + }, + { + "stringValue": "st_RBA" + }, + { + "stringValue": "st_THT" + }, + { + "stringValue": "st_VIR" + } + ] + } + }, + "st_SZS": { + "arrayValue": { + "values": [ + { + "stringValue": "st_AFR" + }, + { + "stringValue": "st_BAW" + }, + { + "stringValue": "st_DLH" + }, + { + "stringValue": "st_EIN" + }, + { + "stringValue": "st_ETD" + }, + { + "stringValue": "st_FIN" + }, + { + "stringValue": "st_SAS" + }, + { + "stringValue": "st_SWR" + }, + { + "stringValue": "st_THA" + } + ] + } + }, + "st_PIA": { + "arrayValue": { + "values": [ + { + "stringValue": "st_ACA" + }, + { + "stringValue": "st_BAW" + }, + { + "stringValue": "st_ETD" + }, + { + "stringValue": "st_POE" + }, + { + "stringValue": "st_THY" + }, + { + "stringValue": "st_TRA" + }, + { + "stringValue": "st_UAE" + }, + { + "stringValue": "st_UAL" + }, + { + "stringValue": "st_WJA" + } + ] + } + }, + "st_VOE": { + "arrayValue": { + "values": [ + { + "stringValue": "st_AAL" + }, + { + "stringValue": "st_ACA" + }, + { + "stringValue": "st_AEA" + }, + { + "stringValue": "st_AFR" + }, + { + "stringValue": "st_ARG" + }, + { + "stringValue": "st_AVA" + }, + { + "stringValue": "st_BAW" + }, + { + "stringValue": "st_DAL" + }, + { + "stringValue": "st_DLH" + }, + { + "stringValue": "st_ETD" + }, + { + "stringValue": "st_IBE" + }, + { + "stringValue": "st_ITY" + }, + { + "stringValue": "st_LAN" + }, + { + "stringValue": "st_SWR" + }, + { + "stringValue": "st_THY" + }, + { + "stringValue": "st_TVF" + }, + { + "stringValue": "st_UAE" + }, + { + "stringValue": "st_UAL" + }, + { + "stringValue": "st_VLG" + } + ] + } + }, + "st_AWI": { + "arrayValue": { + "values": [ + { + "stringValue": "st_AAL" + }, + { + "stringValue": "st_DAL" + }, + { + "stringValue": "st_SWA" + }, + { + "stringValue": "st_UAL" + } + ] + } + }, + "st_VTA": { + "arrayValue": { + "values": [ + { + "stringValue": "st_AFR" + }, + { + "stringValue": "st_ANZ" + }, + { + "stringValue": "st_ASA" + }, + { + "stringValue": "st_HAL" + }, + { + "stringValue": "st_THT" + }, + { + "stringValue": "st_UAL" + } + ] + } + }, + "st_KZR": { + "arrayValue": { + "values": [ + { + "stringValue": "st_AAR" + }, + { + "stringValue": "st_CPA" + }, + { + "stringValue": "st_DLH" + }, + { + "stringValue": "st_ETD" + }, + { + "stringValue": "st_EWG" + }, + { + "stringValue": "st_FDB" + }, + { + "stringValue": "st_LOT" + }, + { + "stringValue": "st_OCN" + }, + { + "stringValue": "st_QFA" + }, + { + "stringValue": "st_QTR" + }, + { + "stringValue": "st_SXS" + }, + { + "stringValue": "st_THY" + }, + { + "stringValue": "st_UAE" + } + ] + } + }, + "st_EIN": { + "arrayValue": { + "values": [ + { + "stringValue": "st_AAL" + }, + { + "stringValue": "st_ACA" + }, + { + "stringValue": "st_AFR" + }, + { + "stringValue": "st_ANZ" + }, + { + "stringValue": "st_ASA" + }, + { + "stringValue": "st_BAW" + }, + { + "stringValue": "st_BCY" + }, + { + "stringValue": "st_CPA" + }, + { + "stringValue": "st_DAL" + }, + { + "stringValue": "st_DLH" + }, + { + "stringValue": "st_EAI" + }, + { + "stringValue": "st_EDV" + }, + { + "stringValue": "st_EDW" + }, + { + "stringValue": "st_EIN" + }, + { + "stringValue": "st_ENY" + }, + { + "stringValue": "st_ETD" + }, + { + "stringValue": "st_EZY" + }, + { + "stringValue": "st_FFT" + }, + { + "stringValue": "st_FIN" + }, + { + "stringValue": "st_GFA" + }, + { + "stringValue": "st_HAL" + }, + { + "stringValue": "st_HDA" + }, + { + "stringValue": "st_IBE" + }, + { + "stringValue": "st_IBS" + }, + { + "stringValue": "st_JBU" + }, + { + "stringValue": "st_JJP" + }, + { + "stringValue": "st_JSA" + }, + { + "stringValue": "st_JST" + }, + { + "stringValue": "st_KLM" + }, + { + "stringValue": "st_MAS" + }, + { + "stringValue": "st_MXY" + }, + { + "stringValue": "st_NMB" + }, + { + "stringValue": "st_PDT" + }, + { + "stringValue": "st_QFA" + }, + { + "stringValue": "st_QTR" + }, + { + "stringValue": "st_QXE" + }, + { + "stringValue": "st_RYR" + }, + { + "stringValue": "st_SAS" + }, + { + "stringValue": "st_SUS" + }, + { + "stringValue": "st_SW" + }, + { + "stringValue": "st_SWA" + }, + { + "stringValue": "st_SWR" + }, + { + "stringValue": "st_SZS" + }, + { + "stringValue": "st_THY" + }, + { + "stringValue": "st_UAE" + }, + { + "stringValue": "st_UAL" + }, + { + "stringValue": "st_VIR" + }, + { + "stringValue": "st_VLG" + } + ] + } + }, + "st_LOG": { + "arrayValue": { + "values": [ + { + "stringValue": "st_ACA" + }, + { + "stringValue": "st_BAW" + }, + { + "stringValue": "st_CPA" + }, + { + "stringValue": "st_QFA" + }, + { + "stringValue": "st_UAE" + }, + { + "stringValue": "st_VIR" + } + ] + } + }, + "st_AMX": { + "arrayValue": { + "values": [ + { + "stringValue": "st_AAL" + }, + { + "stringValue": "st_AAY" + }, + { + "stringValue": "st_ACA" + }, + { + "stringValue": "st_AFR" + }, + { + "stringValue": "st_AMX" + }, + { + "stringValue": "st_AMX" + }, + { + "stringValue": "st_ARG" + }, + { + "stringValue": "st_ASA" + }, + { + "stringValue": "st_AUA" + }, + { + "stringValue": "st_AVA" + }, + { + "stringValue": "st_BAW" + }, + { + "stringValue": "st_CFG" + }, + { + "stringValue": "st_CMP" + }, + { + "stringValue": "st_DAL" + }, + { + "stringValue": "st_DLH" + }, + { + "stringValue": "st_EWG" + }, + { + "stringValue": "st_FFT" + }, + { + "stringValue": "st_GLO" + }, + { + "stringValue": "st_IBE" + }, + { + "stringValue": "st_JBU" + }, + { + "stringValue": "st_LAN" + }, + { + "stringValue": "st_LOT" + }, + { + "stringValue": "st_NKS" + }, + { + "stringValue": "st_POE" + }, + { + "stringValue": "st_QFA" + }, + { + "stringValue": "st_QTR" + }, + { + "stringValue": "st_SKW" + }, + { + "stringValue": "st_SWA" + }, + { + "stringValue": "st_SWR" + }, + { + "stringValue": "st_TSC" + }, + { + "stringValue": "st_UAE" + }, + { + "stringValue": "st_UAL" + }, + { + "stringValue": "st_VIR" + }, + { + "stringValue": "st_VLG" + }, + { + "stringValue": "st_WJA" + } + ] + } + }, + "st_TAM": { + "arrayValue": { + "values": [ + { + "stringValue": "st_BAW" + }, + { + "stringValue": "st_DAL" + }, + { + "stringValue": "st_DLH" + }, + { + "stringValue": "st_GLO" + }, + { + "stringValue": "st_LAN" + }, + { + "stringValue": "st_TAP" + }, + { + "stringValue": "st_UAL" + } + ] + } + }, + "st_CRK": { + "arrayValue": { + "values": [ + { + "stringValue": "st_AAL" + }, + { + "stringValue": "st_AAR" + }, + { + "stringValue": "st_AAY" + }, + { + "stringValue": "st_ACA" + }, + { + "stringValue": "st_AFR" + }, + { + "stringValue": "st_AKT" + }, + { + "stringValue": "st_AMU" + }, + { + "stringValue": "st_ANA" + }, + { + "stringValue": "st_ANZ" + }, + { + "stringValue": "st_ASA" + }, + { + "stringValue": "st_AUA" + }, + { + "stringValue": "st_BAW" + }, + { + "stringValue": "st_BKP" + }, + { + "stringValue": "st_CAL" + }, + { + "stringValue": "st_CPA" + }, + { + "stringValue": "st_CRK" + }, + { + "stringValue": "st_CRK" + }, + { + "stringValue": "st_DAL" + }, + { + "stringValue": "st_DLH" + }, + { + "stringValue": "st_ETD" + }, + { + "stringValue": "st_EVA" + }, + { + "stringValue": "st_EWG" + }, + { + "stringValue": "st_FIN" + }, + { + "stringValue": "st_FLE" + }, + { + "stringValue": "st_HAL" + }, + { + "stringValue": "st_HKE" + }, + { + "stringValue": "st_IBE" + }, + { + "stringValue": "st_JBU" + }, + { + "stringValue": "st_JJP" + }, + { + "stringValue": "st_JST" + }, + { + "stringValue": "st_LAN" + }, + { + "stringValue": "st_LOT" + }, + { + "stringValue": "st_MAS" + }, + { + "stringValue": "st_POE" + }, + { + "stringValue": "st_QFA" + }, + { + "stringValue": "st_QTR" + }, + { + "stringValue": "st_SJX" + }, + { + "stringValue": "st_SWA" + }, + { + "stringValue": "st_SWR" + }, + { + "stringValue": "st_THA" + }, + { + "stringValue": "st_THY" + }, + { + "stringValue": "st_TSC" + }, + { + "stringValue": "st_TTW" + }, + { + "stringValue": "st_UAE" + }, + { + "stringValue": "st_UAL" + }, + { + "stringValue": "st_VOZ" + }, + { + "stringValue": "st_WJA" + } + ] + } + }, + "st_RXI": { + "arrayValue": { + "values": [ + { + "stringValue": "st_KNE" + }, + { + "stringValue": "st_OMA" + }, + { + "stringValue": "st_RJA" + }, + { + "stringValue": "st_SVA" + }, + { + "stringValue": "st_VIR" + } + ] + } + }, + "st_TZP": { + "arrayValue": { + "values": [ + { + "stringValue": "st_AAL" + }, + { + "stringValue": "st_ASA" + }, + { + "stringValue": "st_SWA" + }, + { + "stringValue": "st_UAL" + } + ] + } + }, + "st_JJA": { + "arrayValue": { + "values": [ + { + "stringValue": "st_DAL" + }, + { + "stringValue": "st_UAL" + } + ] + } + }, + "st_VOZ": { + "arrayValue": { + "values": [ + { + "stringValue": "st_4T" + }, + { + "stringValue": "st_AAL" + }, + { + "stringValue": "st_AAR" + }, + { + "stringValue": "st_AAY" + }, + { + "stringValue": "st_ACA" + }, + { + "stringValue": "st_ACI" + }, + { + "stringValue": "st_AFR" + }, + { + "stringValue": "st_AIE" + }, + { + "stringValue": "st_AKT" + }, + { + "stringValue": "st_ANA" + }, + { + "stringValue": "st_ANZ" + }, + { + "stringValue": "st_ARG" + }, + { + "stringValue": "st_ASA" + }, + { + "stringValue": "st_AUA" + }, + { + "stringValue": "st_BAW" + }, + { + "stringValue": "st_BEE" + }, + { + "stringValue": "st_BEL" + }, + { + "stringValue": "st_BTI" + }, + { + "stringValue": "st_CAL" + }, + { + "stringValue": "st_CCM" + }, + { + "stringValue": "st_CES" + }, + { + "stringValue": "st_CKS" + }, + { + "stringValue": "st_CMP" + }, + { + "stringValue": "st_CPA" + }, + { + "stringValue": "st_CRK" + }, + { + "stringValue": "st_DAL" + }, + { + "stringValue": "st_DJT" + }, + { + "stringValue": "st_DLH" + }, + { + "stringValue": "st_EDW" + }, + { + "stringValue": "st_ELY" + }, + { + "stringValue": "st_ETD" + }, + { + "stringValue": "st_EVA" + }, + { + "stringValue": "st_EWG" + }, + { + "stringValue": "st_FC" + }, + { + "stringValue": "st_FDB" + }, + { + "stringValue": "st_FFT" + }, + { + "stringValue": "st_FIN" + }, + { + "stringValue": "st_FJI" + }, + { + "stringValue": "st_FPO" + }, + { + "stringValue": "st_GIA" + }, + { + "stringValue": "st_GLO" + }, + { + "stringValue": "st_GLR" + }, + { + "stringValue": "st_GZ" + }, + { + "stringValue": "st_HAL" + }, + { + "stringValue": "st_HKE" + }, + { + "stringValue": "st_HVN" + }, + { + "stringValue": "st_IBE" + }, + { + "stringValue": "st_ICE" + }, + { + "stringValue": "st_ITY" + }, + { + "stringValue": "st_JBU" + }, + { + "stringValue": "st_JST" + }, + { + "stringValue": "st_JSX" + }, + { + "stringValue": "st_KAL" + }, + { + "stringValue": "st_KLM" + }, + { + "stringValue": "st_LAN" + }, + { + "stringValue": "st_LOG" + }, + { + "stringValue": "st_LOT" + }, + { + "stringValue": "st_MAS" + }, + { + "stringValue": "st_MAU" + }, + { + "stringValue": "st_MMD" + }, + { + "stringValue": "st_MXY" + }, + { + "stringValue": "st_NKS" + }, + { + "stringValue": "st_NOZ" + }, + { + "stringValue": "st_PAL" + }, + { + "stringValue": "st_POE" + }, + { + "stringValue": "st_QTR" + }, + { + "stringValue": "st_RJA" + }, + { + "stringValue": "st_RZO" + }, + { + "stringValue": "st_SAA" + }, + { + "stringValue": "st_SAS" + }, + { + "stringValue": "st_SCE" + }, + { + "stringValue": "st_SIA" + }, + { + "stringValue": "st_SIL" + }, + { + "stringValue": "st_SKW" + }, + { + "stringValue": "st_SOL" + }, + { + "stringValue": "st_SWA" + }, + { + "stringValue": "st_SWR" + }, + { + "stringValue": "st_TAP" + }, + { + "stringValue": "st_THT" + }, + { + "stringValue": "st_TIN" + }, + { + "stringValue": "st_UAE" + }, + { + "stringValue": "st_UAL" + }, + { + "stringValue": "st_VIR" + }, + { + "stringValue": "st_VJH" + }, + { + "stringValue": "st_VLG" + }, + { + "stringValue": "st_VOE" + }, + { + "stringValue": "st_VOZ" + }, + { + "stringValue": "st_WIF" + }, + { + "stringValue": "st_WJA" + } + ] + } + }, + "st_UAL": { + "arrayValue": { + "values": [ + { + "stringValue": "st_AAL" + }, + { + "stringValue": "st_AAR" + }, + { + "stringValue": "st_AAY" + }, + { + "stringValue": "st_ABX" + }, + { + "stringValue": "st_ACA" + }, + { + "stringValue": "st_AEA" + }, + { + "stringValue": "st_AEE" + }, + { + "stringValue": "st_AFL" + }, + { + "stringValue": "st_AFR" + }, + { + "stringValue": "st_AIC" + }, + { + "stringValue": "st_AIE" + }, + { + "stringValue": "st_AIZ" + }, + { + "stringValue": "st_AKT" + }, + { + "stringValue": "st_AKX" + }, + { + "stringValue": "st_AMF" + }, + { + "stringValue": "st_AMX" + }, + { + "stringValue": "st_ANA" + }, + { + "stringValue": "st_ANG" + }, + { + "stringValue": "st_ANT" + }, + { + "stringValue": "st_ANZ" + }, + { + "stringValue": "st_APJ" + }, + { + "stringValue": "st_APZ" + }, + { + "stringValue": "st_ARG" + }, + { + "stringValue": "st_ASA" + }, + { + "stringValue": "st_ASH" + }, + { + "stringValue": "st_ASL" + }, + { + "stringValue": "st_ASQ" + }, + { + "stringValue": "st_ATN" + }, + { + "stringValue": "st_AUA" + }, + { + "stringValue": "st_AVA" + }, + { + "stringValue": "st_AWI" + }, + { + "stringValue": "st_AZU" + }, + { + "stringValue": "st_BAW" + }, + { + "stringValue": "st_BCV" + }, + { + "stringValue": "st_BEE" + }, + { + "stringValue": "st_BEL" + }, + { + "stringValue": "st_BKP" + }, + { + "stringValue": "st_BLS" + }, + { + "stringValue": "st_BTI" + }, + { + "stringValue": "st_BTQ" + }, + { + "stringValue": "st_BWA" + }, + { + "stringValue": "st_CAL" + }, + { + "stringValue": "st_CAV" + }, + { + "stringValue": "st_CAY" + }, + { + "stringValue": "st_CCA" + }, + { + "stringValue": "st_CCM" + }, + { + "stringValue": "st_CEB" + }, + { + "stringValue": "st_CES" + }, + { + "stringValue": "st_CFE" + }, + { + "stringValue": "st_CFG" + }, + { + "stringValue": "st_CFS" + }, + { + "stringValue": "st_CKS" + }, + { + "stringValue": "st_CMP" + }, + { + "stringValue": "st_CPA" + }, + { + "stringValue": "st_CRK" + }, + { + "stringValue": "st_CSA" + }, + { + "stringValue": "st_CSZ" + }, + { + "stringValue": "st_CTN" + }, + { + "stringValue": "st_DAL" + }, + { + "stringValue": "st_DJT" + }, + { + "stringValue": "st_DLA" + }, + { + "stringValue": "st_DLH" + }, + { + "stringValue": "st_DWI" + }, + { + "stringValue": "st_EDV" + }, + { + "stringValue": "st_EDW" + }, + { + "stringValue": "st_EIN" + }, + { + "stringValue": "st_ELY" + }, + { + "stringValue": "st_ENY" + }, + { + "stringValue": "st_ETD" + }, + { + "stringValue": "st_ETH" + }, + { + "stringValue": "st_EVA" + }, + { + "stringValue": "st_EWE" + }, + { + "stringValue": "st_EWG" + }, + { + "stringValue": "st_EZY" + }, + { + "stringValue": "st_FBU" + }, + { + "stringValue": "st_FDB" + }, + { + "stringValue": "st_FDX" + }, + { + "stringValue": "st_FDY" + }, + { + "stringValue": "st_FFT" + }, + { + "stringValue": "st_FIN" + }, + { + "stringValue": "st_FJI" + }, + { + "stringValue": "st_FLE" + }, + { + "stringValue": "st_FPO" + }, + { + "stringValue": "st_FRG" + }, + { + "stringValue": "st_FWI" + }, + { + "stringValue": "st_GFA" + }, + { + "stringValue": "st_GJS" + }, + { + "stringValue": "st_GLG" + }, + { + "stringValue": "st_GLO" + }, + { + "stringValue": "st_GLR" + }, + { + "stringValue": "st_GPD" + }, + { + "stringValue": "st_GRL" + }, + { + "stringValue": "st_GTI" + }, + { + "stringValue": "st_GZ" + }, + { + "stringValue": "st_HAL" + }, + { + "stringValue": "st_HDA" + }, + { + "stringValue": "st_HI" + }, + { + "stringValue": "st_HKE" + }, + { + "stringValue": "st_HVN" + }, + { + "stringValue": "st_IBB" + }, + { + "stringValue": "st_IBE" + }, + { + "stringValue": "st_ICE" + }, + { + "stringValue": "st_IGO" + }, + { + "stringValue": "st_ISR" + }, + { + "stringValue": "st_ITY" + }, + { + "stringValue": "st_JAL" + }, + { + "stringValue": "st_JAT" + }, + { + "stringValue": "st_JBU" + }, + { + "stringValue": "st_JIA" + }, + { + "stringValue": "st_JJA" + }, + { + "stringValue": "st_JJP" + }, + { + "stringValue": "st_JSA" + }, + { + "stringValue": "st_JST" + }, + { + "stringValue": "st_JSX" + }, + { + "stringValue": "st_JTA" + }, + { + "stringValue": "st_JZA" + }, + { + "stringValue": "st_KAC" + }, + { + "stringValue": "st_KAL" + }, + { + "stringValue": "st_KAP" + }, + { + "stringValue": "st_KII" + }, + { + "stringValue": "st_KLM" + }, + { + "stringValue": "st_KMM" + }, + { + "stringValue": "st_KQA" + }, + { + "stringValue": "st_LAN" + }, + { + "stringValue": "st_LAP" + }, + { + "stringValue": "st_LGL" + }, + { + "stringValue": "st_LHX" + }, + { + "stringValue": "st_LIA" + }, + { + "stringValue": "st_LNE" + }, + { + "stringValue": "st_LOG" + }, + { + "stringValue": "st_LOT" + }, + { + "stringValue": "st_LRC" + }, + { + "stringValue": "st_LYM" + }, + { + "stringValue": "st_MAS" + }, + { + "stringValue": "st_MAU" + }, + { + "stringValue": "st_MDA" + }, + { + "stringValue": "st_MEA" + }, + { + "stringValue": "st_MHO" + }, + { + "stringValue": "st_MSR" + }, + { + "stringValue": "st_MXY" + }, + { + "stringValue": "st_NDA" + }, + { + "stringValue": "st_OAE" + }, + { + "stringValue": "st_OAL" + }, + { + "stringValue": "st_OAW" + }, + { + "stringValue": "st_OCN" + }, + { + "stringValue": "st_OMA" + }, + { + "stringValue": "st_PAG" + }, + { + "stringValue": "st_PAL" + }, + { + "stringValue": "st_PDT" + }, + { + "stringValue": "st_PGT" + }, + { + "stringValue": "st_PIA" + }, + { + "stringValue": "st_POE" + }, + { + "stringValue": "st_POE_2025" + }, + { + "stringValue": "st_PVL" + }, + { + "stringValue": "st_QFA" + }, + { + "stringValue": "st_QLK" + }, + { + "stringValue": "st_QXE" + }, + { + "stringValue": "st_RAM" + }, + { + "stringValue": "st_RJA" + }, + { + "stringValue": "st_ROU" + }, + { + "stringValue": "st_RPA" + }, + { + "stringValue": "st_RPB" + }, + { + "stringValue": "st_RVF" + }, + { + "stringValue": "st_RZO" + }, + { + "stringValue": "st_SAA" + }, + { + "stringValue": "st_SAS" + }, + { + "stringValue": "st_SAT" + }, + { + "stringValue": "st_SBI" + }, + { + "stringValue": "st_SCE" + }, + { + "stringValue": "st_SCX" + }, + { + "stringValue": "st_SDM" + }, + { + "stringValue": "st_SEY" + }, + { + "stringValue": "st_SHU" + }, + { + "stringValue": "st_SIL" + }, + { + "stringValue": "st_SJX" + }, + { + "stringValue": "st_SKK" + }, + { + "stringValue": "st_SKU" + }, + { + "stringValue": "st_SKW" + }, + { + "stringValue": "st_SKX" + }, + { + "stringValue": "st_SVA" + }, + { + "stringValue": "st_SWA" + }, + { + "stringValue": "st_SWG" + }, + { + "stringValue": "st_SWR" + }, + { + "stringValue": "st_SXS" + }, + { + "stringValue": "st_TAI" + }, + { + "stringValue": "st_TAM" + }, + { + "stringValue": "st_TAO" + }, + { + "stringValue": "st_TAP" + }, + { + "stringValue": "st_THA" + }, + { + "stringValue": "st_THT" + }, + { + "stringValue": "st_THY" + }, + { + "stringValue": "st_TOS" + }, + { + "stringValue": "st_TRA" + }, + { + "stringValue": "st_TSC" + }, + { + "stringValue": "st_TTW" + }, + { + "stringValue": "st_TUI" + }, + { + "stringValue": "st_TVF" + }, + { + "stringValue": "st_TVJ" + }, + { + "stringValue": "st_TVS" + }, + { + "stringValue": "st_TWB" + }, + { + "stringValue": "st_TZP" + }, + { + "stringValue": "st_UAE" + }, + { + "stringValue": "st_UAL" + }, + { + "stringValue": "st_UCA" + }, + { + "stringValue": "st_UIA" + }, + { + "stringValue": "st_UPS" + }, + { + "stringValue": "st_VIR" + }, + { + "stringValue": "st_VIV" + }, + { + "stringValue": "st_VJC" + }, + { + "stringValue": "st_VJH" + }, + { + "stringValue": "st_VJT" + }, + { + "stringValue": "st_VLG" + }, + { + "stringValue": "st_VOE" + }, + { + "stringValue": "st_VOI" + }, + { + "stringValue": "st_VOZ" + }, + { + "stringValue": "st_VRD" + }, + { + "stringValue": "st_VTA" + }, + { + "stringValue": "st_VTE" + }, + { + "stringValue": "st_VTI" + }, + { + "stringValue": "st_VXP" + }, + { + "stringValue": "st_WEN" + }, + { + "stringValue": "st_WGN" + }, + { + "stringValue": "st_WIA" + }, + { + "stringValue": "st_WIF" + }, + { + "stringValue": "st_WJA" + }, + { + "stringValue": "st_WSN" + }, + { + "stringValue": "st_XBO" + } + ] + } + }, + "st_DHA": { + "arrayValue": { + "values": [ + { + "stringValue": "st_DLH" + } + ] + } + }, + "st_LPE": { + "arrayValue": { + "values": [ + { + "stringValue": "st_DAL" + } + ] + } + }, + "st_ANG": { + "arrayValue": { + "values": [ + { + "stringValue": "st_QFA" + } + ] + } + }, + "st_CAL": { + "arrayValue": { + "values": [ + { + "stringValue": "st_AAL" + }, + { + "stringValue": "st_AAR" + }, + { + "stringValue": "st_ACA" + }, + { + "stringValue": "st_ACI" + }, + { + "stringValue": "st_AEA" + }, + { + "stringValue": "st_AEE" + }, + { + "stringValue": "st_AFR" + }, + { + "stringValue": "st_AIZ" + }, + { + "stringValue": "st_ALK" + }, + { + "stringValue": "st_AMU" + }, + { + "stringValue": "st_AMX" + }, + { + "stringValue": "st_ANA" + }, + { + "stringValue": "st_ANT" + }, + { + "stringValue": "st_ANZ" + }, + { + "stringValue": "st_ARG" + }, + { + "stringValue": "st_ASA" + }, + { + "stringValue": "st_AUA" + }, + { + "stringValue": "st_AVA" + }, + { + "stringValue": "st_BAW" + }, + { + "stringValue": "st_BBL" + }, + { + "stringValue": "st_BEL" + }, + { + "stringValue": "st_BKP" + }, + { + "stringValue": "st_BTI" + }, + { + "stringValue": "st_CAL" + }, + { + "stringValue": "st_CAL" + }, + { + "stringValue": "st_CES" + }, + { + "stringValue": "st_CPA" + }, + { + "stringValue": "st_CRK" + }, + { + "stringValue": "st_CSH" + }, + { + "stringValue": "st_CTN" + }, + { + "stringValue": "st_DAL" + }, + { + "stringValue": "st_DLA" + }, + { + "stringValue": "st_DLH" + }, + { + "stringValue": "st_DWI" + }, + { + "stringValue": "st_ELY" + }, + { + "stringValue": "st_ENY" + }, + { + "stringValue": "st_ETD" + }, + { + "stringValue": "st_ETH" + }, + { + "stringValue": "st_EVA" + }, + { + "stringValue": "st_FCM" + }, + { + "stringValue": "st_FIN" + }, + { + "stringValue": "st_FLE" + }, + { + "stringValue": "st_GFA" + }, + { + "stringValue": "st_GIA" + }, + { + "stringValue": "st_HAL" + }, + { + "stringValue": "st_HVN" + }, + { + "stringValue": "st_IBE" + }, + { + "stringValue": "st_ICE" + }, + { + "stringValue": "st_ITY" + }, + { + "stringValue": "st_JAL" + }, + { + "stringValue": "st_JBU" + }, + { + "stringValue": "st_JJP" + }, + { + "stringValue": "st_JST" + }, + { + "stringValue": "st_KAL" + }, + { + "stringValue": "st_KLM" + }, + { + "stringValue": "st_KMM" + }, + { + "stringValue": "st_KQA" + }, + { + "stringValue": "st_LAN" + }, + { + "stringValue": "st_LGL" + }, + { + "stringValue": "st_LOT" + }, + { + "stringValue": "st_MAS" + }, + { + "stringValue": "st_MEA" + }, + { + "stringValue": "st_NKS" + }, + { + "stringValue": "st_OMA" + }, + { + "stringValue": "st_PAL" + }, + { + "stringValue": "st_POE" + }, + { + "stringValue": "st_POE_2025" + }, + { + "stringValue": "st_QFA" + }, + { + "stringValue": "st_QTR" + }, + { + "stringValue": "st_RBA" + }, + { + "stringValue": "st_RJA" + }, + { + "stringValue": "st_RPA" + }, + { + "stringValue": "st_RVF" + }, + { + "stringValue": "st_SAA" + }, + { + "stringValue": "st_SAS" + }, + { + "stringValue": "st_SAT" + }, + { + "stringValue": "st_SJX" + }, + { + "stringValue": "st_SKW" + }, + { + "stringValue": "st_SOL" + }, + { + "stringValue": "st_SVA" + }, + { + "stringValue": "st_SWA" + }, + { + "stringValue": "st_SWR" + }, + { + "stringValue": "st_SXS" + }, + { + "stringValue": "st_TAP" + }, + { + "stringValue": "st_THA" + }, + { + "stringValue": "st_THT" + }, + { + "stringValue": "st_THY" + }, + { + "stringValue": "st_TRA" + }, + { + "stringValue": "st_TSC" + }, + { + "stringValue": "st_TTW" + }, + { + "stringValue": "st_TVF" + }, + { + "stringValue": "st_TVS" + }, + { + "stringValue": "st_UAE" + }, + { + "stringValue": "st_UAL" + }, + { + "stringValue": "st_UIA" + }, + { + "stringValue": "st_VIR" + }, + { + "stringValue": "st_VOZ" + }, + { + "stringValue": "st_WIF" + }, + { + "stringValue": "st_WJA" + } + ] + } + }, + "st_ICE": { + "arrayValue": { + "values": [ + { + "stringValue": "st_4T" + }, + { + "stringValue": "st_AAF" + }, + { + "stringValue": "st_AAL" + }, + { + "stringValue": "st_AAY" + }, + { + "stringValue": "st_ABY" + }, + { + "stringValue": "st_ACA" + }, + { + "stringValue": "st_ACI" + }, + { + "stringValue": "st_AEA" + }, + { + "stringValue": "st_AEE" + }, + { + "stringValue": "st_AFL" + }, + { + "stringValue": "st_AFR" + }, + { + "stringValue": "st_AIE" + }, + { + "stringValue": "st_AIZ" + }, + { + "stringValue": "st_AKT" + }, + { + "stringValue": "st_AMU" + }, + { + "stringValue": "st_AMX" + }, + { + "stringValue": "st_ANT" + }, + { + "stringValue": "st_ARG" + }, + { + "stringValue": "st_ASA" + }, + { + "stringValue": "st_ASH" + }, + { + "stringValue": "st_ASL" + }, + { + "stringValue": "st_AUA" + }, + { + "stringValue": "st_AVA" + }, + { + "stringValue": "st_AZU" + }, + { + "stringValue": "st_BAW" + }, + { + "stringValue": "st_BCV" + }, + { + "stringValue": "st_BCY" + }, + { + "stringValue": "st_BEE" + }, + { + "stringValue": "st_BEL" + }, + { + "stringValue": "st_BLA" + }, + { + "stringValue": "st_BLS" + }, + { + "stringValue": "st_BRX" + }, + { + "stringValue": "st_BTI" + }, + { + "stringValue": "st_CAL" + }, + { + "stringValue": "st_CAV" + }, + { + "stringValue": "st_CCM" + }, + { + "stringValue": "st_CFG" + }, + { + "stringValue": "st_CMP" + }, + { + "stringValue": "st_CNF" + }, + { + "stringValue": "st_CPA" + }, + { + "stringValue": "st_CRL" + }, + { + "stringValue": "st_CSA" + }, + { + "stringValue": "st_CTN" + }, + { + "stringValue": "st_CTU" + }, + { + "stringValue": "st_DAL" + }, + { + "stringValue": "st_DJT" + }, + { + "stringValue": "st_DLA" + }, + { + "stringValue": "st_DLH" + }, + { + "stringValue": "st_DSM" + }, + { + "stringValue": "st_DTR" + }, + { + "stringValue": "st_EDW" + }, + { + "stringValue": "st_ELY" + }, + { + "stringValue": "st_ETD" + }, + { + "stringValue": "st_EVA" + }, + { + "stringValue": "st_EWG" + }, + { + "stringValue": "st_FBU" + }, + { + "stringValue": "st_FFT" + }, + { + "stringValue": "st_FIN" + }, + { + "stringValue": "st_FJI" + }, + { + "stringValue": "st_FLI" + }, + { + "stringValue": "st_FPO" + }, + { + "stringValue": "st_FWI" + }, + { + "stringValue": "st_GFA" + }, + { + "stringValue": "st_GLG" + }, + { + "stringValue": "st_GLO" + }, + { + "stringValue": "st_GLR" + }, + { + "stringValue": "st_GPD" + }, + { + "stringValue": "st_GRL" + }, + { + "stringValue": "st_HAL" + }, + { + "stringValue": "st_HDA" + }, + { + "stringValue": "st_IBB" + }, + { + "stringValue": "st_IBE" + }, + { + "stringValue": "st_ICE" + }, + { + "stringValue": "st_ISS" + }, + { + "stringValue": "st_ITY" + }, + { + "stringValue": "st_JBU" + }, + { + "stringValue": "st_JJP" + }, + { + "stringValue": "st_JSA" + }, + { + "stringValue": "st_JST" + }, + { + "stringValue": "st_JSX" + }, + { + "stringValue": "st_KAP" + }, + { + "stringValue": "st_KLM" + }, + { + "stringValue": "st_KMM" + }, + { + "stringValue": "st_KQA" + }, + { + "stringValue": "st_LAN" + }, + { + "stringValue": "st_LGL" + }, + { + "stringValue": "st_LNE" + }, + { + "stringValue": "st_LOG" + }, + { + "stringValue": "st_LOT" + }, + { + "stringValue": "st_LRC" + }, + { + "stringValue": "st_MXY" + }, + { + "stringValue": "st_NDA" + }, + { + "stringValue": "st_NKS" + }, + { + "stringValue": "st_NMB" + }, + { + "stringValue": "st_NOZ" + }, + { + "stringValue": "st_NSZ" + }, + { + "stringValue": "st_OAL" + }, + { + "stringValue": "st_OAW" + }, + { + "stringValue": "st_OCN" + }, + { + "stringValue": "st_OMA" + }, + { + "stringValue": "st_ONE" + }, + { + "stringValue": "st_PAG" + }, + { + "stringValue": "st_PCO" + }, + { + "stringValue": "st_POE" + }, + { + "stringValue": "st_QFA" + }, + { + "stringValue": "st_QTR" + }, + { + "stringValue": "st_RBA" + }, + { + "stringValue": "st_RJA" + }, + { + "stringValue": "st_RVF" + }, + { + "stringValue": "st_RZO" + }, + { + "stringValue": "st_SAA" + }, + { + "stringValue": "st_SAS" + }, + { + "stringValue": "st_SAT" + }, + { + "stringValue": "st_SBI" + }, + { + "stringValue": "st_SCE" + }, + { + "stringValue": "st_SCX" + }, + { + "stringValue": "st_SKU" + }, + { + "stringValue": "st_SKW" + }, + { + "stringValue": "st_SKX" + }, + { + "stringValue": "st_SVA" + }, + { + "stringValue": "st_SWA" + }, + { + "stringValue": "st_SWR" + }, + { + "stringValue": "st_SXS" + }, + { + "stringValue": "st_TAI" + }, + { + "stringValue": "st_TAP" + }, + { + "stringValue": "st_TCV" + }, + { + "stringValue": "st_THA" + }, + { + "stringValue": "st_THT" + }, + { + "stringValue": "st_THY" + }, + { + "stringValue": "st_TIN" + }, + { + "stringValue": "st_TPC" + }, + { + "stringValue": "st_TRA" + }, + { + "stringValue": "st_TUI" + }, + { + "stringValue": "st_TVF" + }, + { + "stringValue": "st_UAE" + }, + { + "stringValue": "st_UAL" + }, + { + "stringValue": "st_VIR" + }, + { + "stringValue": "st_VIV" + }, + { + "stringValue": "st_VJH" + }, + { + "stringValue": "st_VLG" + }, + { + "stringValue": "st_VOE" + }, + { + "stringValue": "st_WIF" + }, + { + "stringValue": "st_WJA" + }, + { + "stringValue": "st_WSN" + } + ] + } + }, + "st_FRG": { + "arrayValue": { + "values": [ + { + "stringValue": "st_UAL" + } + ] + } + }, + "st_MMD": { + "arrayValue": { + "values": [ + { + "stringValue": "st_DLH" + }, + { + "stringValue": "st_SAS" + } + ] + } + }, + "st_ASL": { + "arrayValue": { + "values": [ + { + "stringValue": "st_BTI" + }, + { + "stringValue": "st_DLH" + }, + { + "stringValue": "st_ETD" + }, + { + "stringValue": "st_QTR" + }, + { + "stringValue": "st_UAL" + } + ] + } + }, + "st_EJU": { + "arrayValue": { + "values": [ + { + "stringValue": "st_CPA" + } + ] + } + }, + "st_MXY": { + "arrayValue": { + "values": [ + { + "stringValue": "st_4T" + }, + { + "stringValue": "st_AAL" + }, + { + "stringValue": "st_AAY" + }, + { + "stringValue": "st_ACA" + }, + { + "stringValue": "st_ACO" + }, + { + "stringValue": "st_AEE" + }, + { + "stringValue": "st_AFR" + }, + { + "stringValue": "st_AIE" + }, + { + "stringValue": "st_AKT" + }, + { + "stringValue": "st_AMX" + }, + { + "stringValue": "st_ANT" + }, + { + "stringValue": "st_ANZ" + }, + { + "stringValue": "st_ASA" + }, + { + "stringValue": "st_ASL" + }, + { + "stringValue": "st_AUA" + }, + { + "stringValue": "st_AVA" + }, + { + "stringValue": "st_AZU" + }, + { + "stringValue": "st_BAW" + }, + { + "stringValue": "st_BEL" + }, + { + "stringValue": "st_BLS" + }, + { + "stringValue": "st_BRX" + }, + { + "stringValue": "st_BTI" + }, + { + "stringValue": "st_BTQ" + }, + { + "stringValue": "st_BWA" + }, + { + "stringValue": "st_CAV" + }, + { + "stringValue": "st_CCM" + }, + { + "stringValue": "st_CFG" + }, + { + "stringValue": "st_CNF" + }, + { + "stringValue": "st_CRQ" + }, + { + "stringValue": "st_CS" + }, + { + "stringValue": "st_CSA" + }, + { + "stringValue": "st_CTN" + }, + { + "stringValue": "st_DAL" + }, + { + "stringValue": "st_DJT" + }, + { + "stringValue": "st_DLA" + }, + { + "stringValue": "st_DLH" + }, + { + "stringValue": "st_DTR" + }, + { + "stringValue": "st_DWI" + }, + { + "stringValue": "st_EDV" + }, + { + "stringValue": "st_EDW" + }, + { + "stringValue": "st_EIN" + }, + { + "stringValue": "st_ELY" + }, + { + "stringValue": "st_ETD" + }, + { + "stringValue": "st_EVA" + }, + { + "stringValue": "st_EWG" + }, + { + "stringValue": "st_FBU" + }, + { + "stringValue": "st_FDB" + }, + { + "stringValue": "st_FDX" + }, + { + "stringValue": "st_FDY" + }, + { + "stringValue": "st_FFT" + }, + { + "stringValue": "st_FIN" + }, + { + "stringValue": "st_FJI" + }, + { + "stringValue": "st_FLE" + }, + { + "stringValue": "st_FPO" + }, + { + "stringValue": "st_FWI" + }, + { + "stringValue": "st_GLO" + }, + { + "stringValue": "st_GLR" + }, + { + "stringValue": "st_GPD" + }, + { + "stringValue": "st_GZ" + }, + { + "stringValue": "st_HAL" + }, + { + "stringValue": "st_HI" + }, + { + "stringValue": "st_IBB" + }, + { + "stringValue": "st_IBE" + }, + { + "stringValue": "st_ICE" + }, + { + "stringValue": "st_ISR" + }, + { + "stringValue": "st_JBU" + }, + { + "stringValue": "st_JJP" + }, + { + "stringValue": "st_JSA" + }, + { + "stringValue": "st_JST" + }, + { + "stringValue": "st_JSX" + }, + { + "stringValue": "st_KAC" + }, + { + "stringValue": "st_KAP" + }, + { + "stringValue": "st_KEN" + }, + { + "stringValue": "st_KMM" + }, + { + "stringValue": "st_KQA" + }, + { + "stringValue": "st_KZR" + }, + { + "stringValue": "st_LAN" + }, + { + "stringValue": "st_LGL" + }, + { + "stringValue": "st_LOG" + }, + { + "stringValue": "st_LOT" + }, + { + "stringValue": "st_MHV" + }, + { + "stringValue": "st_MXY" + }, + { + "stringValue": "st_NKS" + }, + { + "stringValue": "st_OAW" + }, + { + "stringValue": "st_OCN" + }, + { + "stringValue": "st_OMA" + }, + { + "stringValue": "st_PGT" + }, + { + "stringValue": "st_POE" + }, + { + "stringValue": "st_PSC" + }, + { + "stringValue": "st_PTB" + }, + { + "stringValue": "st_PVL" + }, + { + "stringValue": "st_QFA" + }, + { + "stringValue": "st_REU" + }, + { + "stringValue": "st_RJA" + }, + { + "stringValue": "st_RPA" + }, + { + "stringValue": "st_RVF" + }, + { + "stringValue": "st_RWD" + }, + { + "stringValue": "st_SAA" + }, + { + "stringValue": "st_SAS" + }, + { + "stringValue": "st_SCE" + }, + { + "stringValue": "st_SCX" + }, + { + "stringValue": "st_SEY" + }, + { + "stringValue": "st_SIL" + }, + { + "stringValue": "st_SJX" + }, + { + "stringValue": "st_SKW" + }, + { + "stringValue": "st_SWA" + }, + { + "stringValue": "st_SWR" + }, + { + "stringValue": "st_SXS" + }, + { + "stringValue": "st_TAM" + }, + { + "stringValue": "st_TAP" + }, + { + "stringValue": "st_THT" + }, + { + "stringValue": "st_TOS" + }, + { + "stringValue": "st_TRA" + }, + { + "stringValue": "st_TSC" + }, + { + "stringValue": "st_TUI" + }, + { + "stringValue": "st_TVF" + }, + { + "stringValue": "st_UAE" + }, + { + "stringValue": "st_UAL" + }, + { + "stringValue": "st_UPS" + }, + { + "stringValue": "st_VIR" + }, + { + "stringValue": "st_VIV" + }, + { + "stringValue": "st_VLG" + }, + { + "stringValue": "st_VOE" + }, + { + "stringValue": "st_VOZ" + }, + { + "stringValue": "st_VRE" + }, + { + "stringValue": "st_VTE" + }, + { + "stringValue": "st_VXP" + }, + { + "stringValue": "st_WIA" + }, + { + "stringValue": "st_WIF" + }, + { + "stringValue": "st_WJA" + }, + { + "stringValue": "st_WSN" + }, + { + "stringValue": "st_YB" + } + ] + } + }, + "st_OAE": { + "arrayValue": { + "values": [ + { + "stringValue": "st_SWA" + }, + { + "stringValue": "st_UAL" + } + ] + } + }, + "st_RAM": { + "arrayValue": { + "values": [ + { + "stringValue": "st_AAL" + }, + { + "stringValue": "st_ACA" + }, + { + "stringValue": "st_AFR" + }, + { + "stringValue": "st_ASA" + }, + { + "stringValue": "st_BAW" + }, + { + "stringValue": "st_BEL" + }, + { + "stringValue": "st_DAL" + }, + { + "stringValue": "st_DLH" + }, + { + "stringValue": "st_POE" + }, + { + "stringValue": "st_QTR" + }, + { + "stringValue": "st_SWA" + }, + { + "stringValue": "st_THY" + }, + { + "stringValue": "st_UAE" + }, + { + "stringValue": "st_UAL" + } + ] + } + }, + "st_QTR": { + "arrayValue": { + "values": [ + { + "stringValue": "st_AAL" + }, + { + "stringValue": "st_AAR" + }, + { + "stringValue": "st_ACA" + }, + { + "stringValue": "st_AEA" + }, + { + "stringValue": "st_AEE" + }, + { + "stringValue": "st_AFR" + }, + { + "stringValue": "st_AIC" + }, + { + "stringValue": "st_ALK" + }, + { + "stringValue": "st_AMX" + }, + { + "stringValue": "st_ANA" + }, + { + "stringValue": "st_ANZ" + }, + { + "stringValue": "st_ARG" + }, + { + "stringValue": "st_ASA" + }, + { + "stringValue": "st_ASL" + }, + { + "stringValue": "st_AUA" + }, + { + "stringValue": "st_AVA" + }, + { + "stringValue": "st_AZU" + }, + { + "stringValue": "st_BAW" + }, + { + "stringValue": "st_BEL" + }, + { + "stringValue": "st_BKP" + }, + { + "stringValue": "st_BTI" + }, + { + "stringValue": "st_CAL" + }, + { + "stringValue": "st_CFG" + }, + { + "stringValue": "st_CMP" + }, + { + "stringValue": "st_CPA" + }, + { + "stringValue": "st_CRK" + }, + { + "stringValue": "st_CTN" + }, + { + "stringValue": "st_CXA" + }, + { + "stringValue": "st_DAL" + }, + { + "stringValue": "st_DLA" + }, + { + "stringValue": "st_DLH" + }, + { + "stringValue": "st_EDW" + }, + { + "stringValue": "st_EIN" + }, + { + "stringValue": "st_ENY" + }, + { + "stringValue": "st_ETD" + }, + { + "stringValue": "st_ETH" + }, + { + "stringValue": "st_EVA" + }, + { + "stringValue": "st_EWG" + }, + { + "stringValue": "st_EZY" + }, + { + "stringValue": "st_FIN" + }, + { + "stringValue": "st_GFA" + }, + { + "stringValue": "st_GLO" + }, + { + "stringValue": "st_HAL" + }, + { + "stringValue": "st_HKC" + }, + { + "stringValue": "st_HKE" + }, + { + "stringValue": "st_HVN" + }, + { + "stringValue": "st_IBE" + }, + { + "stringValue": "st_ICE" + }, + { + "stringValue": "st_IGO" + }, + { + "stringValue": "st_ITY" + }, + { + "stringValue": "st_JAL" + }, + { + "stringValue": "st_JBU" + }, + { + "stringValue": "st_JJP" + }, + { + "stringValue": "st_JST" + }, + { + "stringValue": "st_JSX" + }, + { + "stringValue": "st_JZA" + }, + { + "stringValue": "st_JZR" + }, + { + "stringValue": "st_KAL" + }, + { + "stringValue": "st_KLM" + }, + { + "stringValue": "st_KZR" + }, + { + "stringValue": "st_LAN" + }, + { + "stringValue": "st_LGL" + }, + { + "stringValue": "st_LOT" + }, + { + "stringValue": "st_MAS" + }, + { + "stringValue": "st_NKS" + }, + { + "stringValue": "st_NOZ" + }, + { + "stringValue": "st_NSZ" + }, + { + "stringValue": "st_OCN" + }, + { + "stringValue": "st_OMA" + }, + { + "stringValue": "st_PAL" + }, + { + "stringValue": "st_PDT" + }, + { + "stringValue": "st_PGT" + }, + { + "stringValue": "st_POE" + }, + { + "stringValue": "st_QFA" + }, + { + "stringValue": "st_QTR" + }, + { + "stringValue": "st_QTR" + }, + { + "stringValue": "st_RAM" + }, + { + "stringValue": "st_RJA" + }, + { + "stringValue": "st_SAA" + }, + { + "stringValue": "st_SAS" + }, + { + "stringValue": "st_SJX" + }, + { + "stringValue": "st_SVA" + }, + { + "stringValue": "st_SWA" + }, + { + "stringValue": "st_SWR" + }, + { + "stringValue": "st_SXS" + }, + { + "stringValue": "st_TAP" + }, + { + "stringValue": "st_THA" + }, + { + "stringValue": "st_THY" + }, + { + "stringValue": "st_TRA" + }, + { + "stringValue": "st_TSC" + }, + { + "stringValue": "st_TVS" + }, + { + "stringValue": "st_UAE" + }, + { + "stringValue": "st_UAL" + }, + { + "stringValue": "st_VIR" + }, + { + "stringValue": "st_VLG" + }, + { + "stringValue": "st_VOZ" + }, + { + "stringValue": "st_WIF" + }, + { + "stringValue": "st_WJA" + } + ] + } + }, + "st_DWI": { + "arrayValue": { + "values": [ + { + "stringValue": "st_DAL" + }, + { + "stringValue": "st_DLH" + }, + { + "stringValue": "st_JBU" + }, + { + "stringValue": "st_LAN" + }, + { + "stringValue": "st_SWA" + }, + { + "stringValue": "st_UAL" + } + ] + } + }, + "st_OCN": { + "arrayValue": { + "values": [ + { + "stringValue": "st_AAL" + }, + { + "stringValue": "st_AAY" + }, + { + "stringValue": "st_ACA" + }, + { + "stringValue": "st_AEA" + }, + { + "stringValue": "st_AEE" + }, + { + "stringValue": "st_AFR" + }, + { + "stringValue": "st_ANZ" + }, + { + "stringValue": "st_ASA" + }, + { + "stringValue": "st_AVA" + }, + { + "stringValue": "st_BAW" + }, + { + "stringValue": "st_BKP" + }, + { + "stringValue": "st_CFG" + }, + { + "stringValue": "st_CMP" + }, + { + "stringValue": "st_CPA" + }, + { + "stringValue": "st_DAL" + }, + { + "stringValue": "st_DLH" + }, + { + "stringValue": "st_ETD" + }, + { + "stringValue": "st_EVA" + }, + { + "stringValue": "st_EWG" + }, + { + "stringValue": "st_FFT" + }, + { + "stringValue": "st_FIN" + }, + { + "stringValue": "st_HAL" + }, + { + "stringValue": "st_HVN" + }, + { + "stringValue": "st_IBE" + }, + { + "stringValue": "st_JBU" + }, + { + "stringValue": "st_KZR" + }, + { + "stringValue": "st_LAN" + }, + { + "stringValue": "st_LGL" + }, + { + "stringValue": "st_LOT" + }, + { + "stringValue": "st_NKS" + }, + { + "stringValue": "st_OMA" + }, + { + "stringValue": "st_QFA" + }, + { + "stringValue": "st_QTR" + }, + { + "stringValue": "st_SAS" + }, + { + "stringValue": "st_SWA" + }, + { + "stringValue": "st_TAP" + }, + { + "stringValue": "st_TGW" + }, + { + "stringValue": "st_TUI" + }, + { + "stringValue": "st_UAE" + }, + { + "stringValue": "st_UAL" + }, + { + "stringValue": "st_VIR" + }, + { + "stringValue": "st_VJH" + }, + { + "stringValue": "st_VLG" + }, + { + "stringValue": "st_WIF" + }, + { + "stringValue": "st_WJA" + } + ] + } + }, + "st_BTQ": { + "arrayValue": { + "values": [ + { + "stringValue": "st_AAL" + }, + { + "stringValue": "st_ASA" + }, + { + "stringValue": "st_DAL" + }, + { + "stringValue": "st_FFT" + }, + { + "stringValue": "st_JBU" + }, + { + "stringValue": "st_NKS" + }, + { + "stringValue": "st_SWA" + }, + { + "stringValue": "st_UAL" + } + ] + } + }, + "st_NGN": { + "arrayValue": { + "values": [ + { + "stringValue": "st_CFG" + }, + { + "stringValue": "st_DLH" + }, + { + "stringValue": "st_ETD" + } + ] + } + }, + "st_JIA": { + "arrayValue": { + "values": [ + { + "stringValue": "st_AAL" + }, + { + "stringValue": "st_AAY" + }, + { + "stringValue": "st_ACA" + }, + { + "stringValue": "st_AFR" + }, + { + "stringValue": "st_ANA" + }, + { + "stringValue": "st_ASA" + }, + { + "stringValue": "st_BAW" + }, + { + "stringValue": "st_CPA" + }, + { + "stringValue": "st_DAL" + }, + { + "stringValue": "st_DLH" + }, + { + "stringValue": "st_FFT" + }, + { + "stringValue": "st_HAL" + }, + { + "stringValue": "st_IBE" + }, + { + "stringValue": "st_JAL" + }, + { + "stringValue": "st_JBU" + }, + { + "stringValue": "st_KAL" + }, + { + "stringValue": "st_NKS" + }, + { + "stringValue": "st_QFA" + }, + { + "stringValue": "st_SWA" + }, + { + "stringValue": "st_UAL" + } + ] + } + }, + "st_SXS": { + "arrayValue": { + "values": [ + { + "stringValue": "st_AFR" + }, + { + "stringValue": "st_CFG" + }, + { + "stringValue": "st_CPA" + }, + { + "stringValue": "st_DAL" + }, + { + "stringValue": "st_DLH" + }, + { + "stringValue": "st_ETD" + }, + { + "stringValue": "st_FIN" + }, + { + "stringValue": "st_KZR" + }, + { + "stringValue": "st_QTR" + }, + { + "stringValue": "st_SAS" + }, + { + "stringValue": "st_THY" + }, + { + "stringValue": "st_UAE" + }, + { + "stringValue": "st_UAL" + } + ] + } + }, + "st_HKC": { + "arrayValue": { + "values": [ + { + "stringValue": "st_DLH" + }, + { + "stringValue": "st_QTR" + } + ] + } + } + } + } + }, + "modifiedAt": { + "timestampValue": "2026-04-20T09:05:20.705Z" + } + }, + "createTime": "2026-03-12T06:06:41.140263Z", + "updateTime": "2026-04-20T09:05:20.917448Z" +} \ No newline at end of file diff --git a/api_docs/stafftraveler_captures/searchFlightsByRoute_DFW-LAS_request.json b/api_docs/stafftraveler_captures/searchFlightsByRoute_DFW-LAS_request.json new file mode 100644 index 0000000..472727a --- /dev/null +++ b/api_docs/stafftraveler_captures/searchFlightsByRoute_DFW-LAS_request.json @@ -0,0 +1 @@ +{"originIata":"DFW","destinationIata":"LAS","dates":["2026-04-22"],"maxConnections":0,"allowNearbyDepartures":false,"allowNearbyArrivals":false,"payloadType":"passenger","includeMultipleCarriers":false} diff --git a/api_docs/stafftraveler_captures/searchFlightsByRoute_DFW-LAS_response.json b/api_docs/stafftraveler_captures/searchFlightsByRoute_DFW-LAS_response.json new file mode 100644 index 0000000..c11a699 --- /dev/null +++ b/api_docs/stafftraveler_captures/searchFlightsByRoute_DFW-LAS_response.json @@ -0,0 +1 @@ +{"payload":{"directFlights":[{"id":"bb63191166831946611a89b89b0da8ed","id_v2":"91d19b09724b6ac186b5ce05689f0775","id_v3":"AA_1292_DFW_2026_04_22","airlineId":"AA","flightNumber":1292,"flightCode":"AA1292","departureAirportId":"DFW","arrivalAirportId":"LAS","departureTimeLocal":"2026-04-22T11:05:00-05:00","departureTimeUtc":"2026-04-22T16:05:00Z","arrivalTimeLocal":"2026-04-22T12:02:00-07:00","arrivalTimeUtc":"2026-04-22T19:02:00Z","flightEquipmentId":"321","durationMinutes":177,"isCargoFlight":false,"airlineStCode":"st_AAL","departureAirportIata":"DFW","arrivalAirportIata":"LAS","flightEquipmentIata":"321","seatsTotal":190,"seatsByClass":{"first":0,"business":20,"premiumEconomy":0,"economy":170}},{"id":"aa1a8052ad91c2e4ea6ed14bde5f7b5a","id_v2":"f91280a3e42c182ebe97ecd189430e0e","id_v3":"AA_777_DFW_2026_04_22","airlineId":"AA","flightNumber":777,"flightCode":"AA777","departureAirportId":"DFW","arrivalAirportId":"LAS","departureTimeLocal":"2026-04-22T12:41:00-05:00","departureTimeUtc":"2026-04-22T17:41:00Z","arrivalTimeLocal":"2026-04-22T13:39:00-07:00","arrivalTimeUtc":"2026-04-22T20:39:00Z","flightEquipmentId":"321","durationMinutes":178,"isCargoFlight":false,"airlineStCode":"st_AAL","departureAirportIata":"DFW","arrivalAirportIata":"LAS","flightEquipmentIata":"321","seatsTotal":190,"seatsByClass":{"first":0,"business":20,"premiumEconomy":0,"economy":170}},{"id":"ff7c2f05159cb18512dcfa08c9b0a1fd","id_v2":"d6e7cd8b2d3620df1ef6b8f853fbecbc","id_v3":"AA_1584_DFW_2026_04_22","airlineId":"AA","flightNumber":1584,"flightCode":"AA1584","departureAirportId":"DFW","arrivalAirportId":"LAS","departureTimeLocal":"2026-04-22T08:52:00-05:00","departureTimeUtc":"2026-04-22T13:52:00Z","arrivalTimeLocal":"2026-04-22T09:50:00-07:00","arrivalTimeUtc":"2026-04-22T16:50:00Z","flightEquipmentId":"321","durationMinutes":178,"isCargoFlight":false,"airlineStCode":"st_AAL","departureAirportIata":"DFW","arrivalAirportIata":"LAS","flightEquipmentIata":"321","seatsTotal":190,"seatsByClass":{"first":0,"business":20,"premiumEconomy":0,"economy":170}},{"id":"e1997b73432895001834efdc5fd6bf37","id_v2":"ebfae5a08e8d2ce1a2852d3ed80a5b39","id_v3":"AA_1969_DFW_2026_04_22","airlineId":"AA","flightNumber":1969,"flightCode":"AA1969","departureAirportId":"DFW","arrivalAirportId":"LAS","departureTimeLocal":"2026-04-22T07:05:00-05:00","departureTimeUtc":"2026-04-22T12:05:00Z","arrivalTimeLocal":"2026-04-22T08:03:00-07:00","arrivalTimeUtc":"2026-04-22T15:03:00Z","flightEquipmentId":"321","durationMinutes":178,"isCargoFlight":false,"airlineStCode":"st_AAL","departureAirportIata":"DFW","arrivalAirportIata":"LAS","flightEquipmentIata":"321","seatsTotal":190,"seatsByClass":{"first":0,"business":20,"premiumEconomy":0,"economy":170}},{"id":"3268691a6bb930522ddbfda96c258852","id_v2":"e190723905f7048d0848aff4a64ece16","id_v3":"AA_2864_DFW_2026_04_22","airlineId":"AA","flightNumber":2864,"flightCode":"AA2864","departureAirportId":"DFW","arrivalAirportId":"LAS","departureTimeLocal":"2026-04-22T14:59:00-05:00","departureTimeUtc":"2026-04-22T19:59:00Z","arrivalTimeLocal":"2026-04-22T15:57:00-07:00","arrivalTimeUtc":"2026-04-22T22:57:00Z","flightEquipmentId":"738","durationMinutes":178,"isCargoFlight":false,"airlineStCode":"st_AAL","departureAirportIata":"DFW","arrivalAirportIata":"LAS","flightEquipmentIata":"738","seatsTotal":172,"seatsByClass":{"first":0,"business":16,"premiumEconomy":0,"economy":156}},{"id":"24fb4e2feabe37790b3415ebd9845989","id_v2":"7ee4d68a8570cc775675bc48b09f8c89","id_v3":"AA_2243_DFW_2026_04_22","airlineId":"AA","flightNumber":2243,"flightCode":"AA2243","departureAirportId":"DFW","arrivalAirportId":"LAS","departureTimeLocal":"2026-04-22T17:56:00-05:00","departureTimeUtc":"2026-04-22T22:56:00Z","arrivalTimeLocal":"2026-04-22T18:55:00-07:00","arrivalTimeUtc":"2026-04-23T01:55:00Z","flightEquipmentId":"321","durationMinutes":179,"isCargoFlight":false,"airlineStCode":"st_AAL","departureAirportIata":"DFW","arrivalAirportIata":"LAS","flightEquipmentIata":"321","seatsTotal":190,"seatsByClass":{"first":0,"business":20,"premiumEconomy":0,"economy":170}},{"id":"752b17dbcb10b1cebcbad7bb12690a4d","id_v2":"8c7df1fcd6ee580b76184613a0a477a7","id_v3":"AA_884_DFW_2026_04_22","airlineId":"AA","flightNumber":884,"flightCode":"AA884","departureAirportId":"DFW","arrivalAirportId":"LAS","departureTimeLocal":"2026-04-22T18:55:00-05:00","departureTimeUtc":"2026-04-22T23:55:00Z","arrivalTimeLocal":"2026-04-22T19:55:00-07:00","arrivalTimeUtc":"2026-04-23T02:55:00Z","flightEquipmentId":"738","durationMinutes":180,"isCargoFlight":false,"airlineStCode":"st_AAL","departureAirportIata":"DFW","arrivalAirportIata":"LAS","flightEquipmentIata":"738","seatsTotal":172,"seatsByClass":{"first":0,"business":16,"premiumEconomy":0,"economy":156}},{"id":"e736981204758daf3bd95faf4bf938d5","id_v2":"38a7c164767ccb5c11f2f7f05e35c4ff","id_v3":"AA_1615_DFW_2026_04_22","airlineId":"AA","flightNumber":1615,"flightCode":"AA1615","departureAirportId":"DFW","arrivalAirportId":"LAS","departureTimeLocal":"2026-04-22T21:45:00-05:00","departureTimeUtc":"2026-04-23T02:45:00Z","arrivalTimeLocal":"2026-04-22T22:45:00-07:00","arrivalTimeUtc":"2026-04-23T05:45:00Z","flightEquipmentId":"738","durationMinutes":180,"isCargoFlight":false,"airlineStCode":"st_AAL","departureAirportIata":"DFW","arrivalAirportIata":"LAS","flightEquipmentIata":"738","seatsTotal":172,"seatsByClass":{"first":0,"business":16,"premiumEconomy":0,"economy":156}},{"id":"74116e6233d75d7231eec1a216d66038","id_v2":"52dd09121bfecaa2dc54cd342c971bc9","id_v3":"AA_1771_DFW_2026_04_22","airlineId":"AA","flightNumber":1771,"flightCode":"AA1771","departureAirportId":"DFW","arrivalAirportId":"LAS","departureTimeLocal":"2026-04-22T20:00:00-05:00","departureTimeUtc":"2026-04-23T01:00:00Z","arrivalTimeLocal":"2026-04-22T21:00:00-07:00","arrivalTimeUtc":"2026-04-23T04:00:00Z","flightEquipmentId":"321","durationMinutes":180,"isCargoFlight":false,"airlineStCode":"st_AAL","departureAirportIata":"DFW","arrivalAirportIata":"LAS","flightEquipmentIata":"321","seatsTotal":190,"seatsByClass":{"first":0,"business":20,"premiumEconomy":0,"economy":170}},{"id":"e845eb80e130f87c75077837c377c51f","id_v2":"c2d9540efb21f35dd683ba73b9d0bb63","id_v3":"AA_1797_DFW_2026_04_22","airlineId":"AA","flightNumber":1797,"flightCode":"AA1797","departureAirportId":"DFW","arrivalAirportId":"LAS","departureTimeLocal":"2026-04-22T20:56:00-05:00","departureTimeUtc":"2026-04-23T01:56:00Z","arrivalTimeLocal":"2026-04-22T21:56:00-07:00","arrivalTimeUtc":"2026-04-23T04:56:00Z","flightEquipmentId":"738","durationMinutes":180,"isCargoFlight":false,"airlineStCode":"st_AAL","departureAirportIata":"DFW","arrivalAirportIata":"LAS","flightEquipmentIata":"738","seatsTotal":172,"seatsByClass":{"first":0,"business":16,"premiumEconomy":0,"economy":156}},{"id":"eaf7520be61069e5dabfb2a8a14fa46a","id_v2":"76fc116f9e81fd52f49642528583a6bf","id_v3":"AA_783_DFW_2026_04_22","airlineId":"AA","flightNumber":783,"flightCode":"AA783","departureAirportId":"DFW","arrivalAirportId":"LAS","departureTimeLocal":"2026-04-22T09:31:00-05:00","departureTimeUtc":"2026-04-22T14:31:00Z","arrivalTimeLocal":"2026-04-22T10:32:00-07:00","arrivalTimeUtc":"2026-04-22T17:32:00Z","flightEquipmentId":"738","durationMinutes":181,"isCargoFlight":false,"airlineStCode":"st_AAL","departureAirportIata":"DFW","arrivalAirportIata":"LAS","flightEquipmentIata":"738","seatsTotal":172,"seatsByClass":{"first":0,"business":16,"premiumEconomy":0,"economy":156}},{"id":"a23d6f8379f5109eddeb5bbf78bdccc1","id_v2":"0d9d0702b203d224ace3e6eb94531dde","id_v3":"AA_2178_DFW_2026_04_22","airlineId":"AA","flightNumber":2178,"flightCode":"AA2178","departureAirportId":"DFW","arrivalAirportId":"LAS","departureTimeLocal":"2026-04-22T16:45:00-05:00","departureTimeUtc":"2026-04-22T21:45:00Z","arrivalTimeLocal":"2026-04-22T17:46:00-07:00","arrivalTimeUtc":"2026-04-23T00:46:00Z","flightEquipmentId":"32Q","durationMinutes":181,"isCargoFlight":false,"airlineStCode":"st_AAL","departureAirportIata":"DFW","arrivalAirportIata":"LAS","flightEquipmentIata":"32Q","seatsTotal":196,"seatsByClass":{"first":0,"business":20,"premiumEconomy":0,"economy":176}},{"id":"8e8751cee0baccd857e19933fb4901fe","id_v2":"3f4dea321a142357cfd61656fe6d80ed","id_v3":"F9_1051_DFW_2026_04_22","airlineId":"F9","flightNumber":1051,"flightCode":"F91051","departureAirportId":"DFW","arrivalAirportId":"LAS","departureTimeLocal":"2026-04-22T11:45:00-05:00","departureTimeUtc":"2026-04-22T16:45:00Z","arrivalTimeLocal":"2026-04-22T12:57:00-07:00","arrivalTimeUtc":"2026-04-22T19:57:00Z","flightEquipmentId":"32N","durationMinutes":192,"isCargoFlight":false,"airlineStCode":"st_FFT","departureAirportIata":"DFW","arrivalAirportIata":"LAS","flightEquipmentIata":"32N","seatsTotal":186,"seatsByClass":{"first":0,"business":0,"premiumEconomy":0,"economy":186}},{"id":"cdd35ba4432c63696acb3164957413f2","id_v2":"62aa67a1e7320f412dd7e9514afe7cf8","id_v3":"AA_2998_DFW_2026_04_22","airlineId":"AA","flightNumber":2998,"flightCode":"AA2998","departureAirportId":"DFW","arrivalAirportId":"LAS","departureTimeLocal":"2026-04-22T22:56:00-05:00","departureTimeUtc":"2026-04-23T03:56:00Z","arrivalTimeLocal":"2026-04-22T23:51:00-07:00","arrivalTimeUtc":"2026-04-23T06:51:00Z","flightEquipmentId":"738","durationMinutes":175,"isCargoFlight":false,"airlineStCode":"st_AAL","departureAirportIata":"DFW","arrivalAirportIata":"LAS","flightEquipmentIata":"738","seatsTotal":172,"seatsByClass":{"first":0,"business":16,"premiumEconomy":0,"economy":156}},{"id":"9cdcc5bddd1a4ff9dd4856c4077ef7b6","id_v2":"f59a502438aaaaeb0a3f87dcb24831b3","id_v3":"F9_3885_DFW_2026_04_22","airlineId":"F9","flightNumber":3885,"flightCode":"F93885","departureAirportId":"DFW","arrivalAirportId":"LAS","departureTimeLocal":"2026-04-22T22:45:00-05:00","departureTimeUtc":"2026-04-23T03:45:00Z","arrivalTimeLocal":"2026-04-22T23:59:00-07:00","arrivalTimeUtc":"2026-04-23T06:59:00Z","flightEquipmentId":"32N","durationMinutes":194,"isCargoFlight":false,"airlineStCode":"st_FFT","departureAirportIata":"DFW","arrivalAirportIata":"LAS","flightEquipmentIata":"32N","seatsTotal":186,"seatsByClass":{"first":0,"business":0,"premiumEconomy":0,"economy":186}}],"connectingFlights":[],"numberOfDiscardedFlights":0,"messages":[],"settingsFilteredCount":0}} \ No newline at end of file diff --git a/api_docs/stafftraveler_captures/url_surface_crawl.md b/api_docs/stafftraveler_captures/url_surface_crawl.md new file mode 100644 index 0000000..f37564f --- /dev/null +++ b/api_docs/stafftraveler_captures/url_surface_crawl.md @@ -0,0 +1,100 @@ +# StaffTraveler — URL surface crawl (2026-04-22) + +Full enumeration of what is and isn't accessible with a valid user Firebase ID token from the `stafftraveler-prod` project. Tested as user `3NNPesQMiMRNYnPmuQzh6w2YKyh1` (WN/`st_SWA`) using fresh tokens from `app.stafftraveler.com`. + +## HTTP commands (`api.stafftraveler.com/v1/commands/user/`) + +All 34 commands confirmed via `createFirebaseCommand` enumeration in the Hermes bundle. Only the `user/` prefix exists — tried `public/`, `internal/`, `admin/`, `v2/`, `flights/`, `loads/`, `system/`, `airline/` → all 404. + +**Read-ish (test with safe payloads):** +- `appActive` — heartbeat. Requires `{localDateIso: ISO8601, appType: "mobile"|"web"}`. Returns `{payload: null}`. +- `mobile` — stub, returns `"Command mobile is not implemented"`. +- `searchFlightsByCode`, `searchFlightsByRoute` — flight search (free, any route). + +**Everything else is a mutation:** `createLoadsRequests`, `deleteLoadsRequest`, `reopenLoadsRequest`, `upgradeLoadsRequest`, `requestLockForLoadsRequest`, `unlockLoadsRequest`, `submitLoadsReport`, `reviseLoadsReport`, `flagLoadsReport`, `addAirlineDetails`, `addComment`, `addIdentity`, `addCreditsForPurchase`, `createTip`, `deleteUserAccount`, `disableAllAutoRequestSubscriptions`, `disableFlightStatusUpdates`, `enableFlightStatusUpdates`, `discardHint`, `omitIdentity`, `pinFlight`, `unpinFlight`, `registerUser`, `removeComment`, `reportComment`, `setAutoRequestSubscription`, `submitFeedback`, `unlikeTip`, `updateUserProfile`, `appLogout`. + +**`api.stafftraveler.com/health`** returns `{message:"ok", serverTime:...}` — open. + +## Firestore collections (`firestore.googleapis.com/v1/projects/stafftraveler-prod/databases/(default)/documents`) + +All reads require `Authorization: Bearer ` + `X-Firebase-GMPID: 1:628258099825:web:35b20eaab4d441894041d0` + `?key=AIzaSyD82Hiqx-jAbHF8faMGSveqLw8CdX8a-Uc`. + +### Publicly readable, cross-airline (globally listable or get-by-id) + +| Path | Content | Size | +|------|---------|------| +| `__system/maintenance` | service maintenance flags | 1 doc | +| `__system/version` | required client versions (android/ios blacklists) | 1 doc | +| `__system/supportedCurrencies` | currency support map | 1 doc | +| `__derived/nonRevAgreementsBySt` | **Full interline non-rev agreement matrix**: `agreements: { st_XXX: [st_YYY, ...], ... }` | 300 airline keys — pulled and saved to `nonRevAgreementsBySt.json` | +| `airlinesBySt/*` | Airline ST-code directory | 300+ docs — pulled to `airlinesBySt_full.json` | +| `airlines/*` | Airline IATA directory | publicly readable per-doc (tested `AA`) | +| `airportsByIata/*` | Airport IATA directory | publicly readable per-doc | +| `airlineNotesBySt/*` | Per-airline non-rev notes | publicly readable per-doc | +| `flightEquipment/*` | Aircraft type directory | publicly readable per-doc | +| `conversations/*` | Flight comment threads | 404 for empty (rule allows, doc absent); readable where they exist | +| `tips/*` | Travel recommendations (restaurants, lounges, etc.) | 5+ docs listable (pagination not tested to completion) | +| `autoRequestRecords/*` | **Global** auto-request subscription configs — user uids, trigger schedules, blocked users | 500+ docs listable; flight metadata is NOT in the doc itself (likely derivable from the doc ID hash), but user-activity is | + +### Airline-scoped (only MY airline == `st_SWA`) + +| Query | Behavior | +|-------|----------| +| `trackedFlights where scheduledFlight.airlineStCode == "st_SWA"` | ✅ 500+ docs (historic WN load requests, all status=closed) | +| `trackedFlights where scheduledFlight.airlineStCode == "st_AAL/DAL/UAL/JBU/..."` | ❌ 403 — rules scope to own airline | +| `trackedFlights/{flightId_v3}` direct get, same-airline | ✅ readable (even if I'm not the creator) — exposes `currentLoadsReportId`, `reportAuthorList`, `seatsAvailabilityScore` | +| `trackedFlights/{flightId_v3}` direct get, other airline | ❌ 403 | + +### Strictly user-scoped (me only) + +| Path | Notes | +|------|-------| +| `users/{MY uid}` | My profile. Other uids → 403. | +| `userCredits/{MY uid}`, `userHints/{MY uid}`, `userRequestCounters/{MY uid}`, `userPriorityRequestCounters/{MY uid}`, `userMetrics/{MY uid}`, `userAchievements/{MY uid}`, `userFlightSearchHistory/{MY uid}` | my state only | +| `users/{MY uid}/pinnedFlights`, `users/{MY uid}/connectingFlights` | my subcollections only | +| `derivedLoadsReports where flightId == ""` | ✅ readable | +| `derivedLoadsReports/{docId}` direct get, my flight | ✅ readable | +| `derivedLoadsReports where flightId == ""` | ❌ 403 (cross-checked with direct-get of `dVb4zStjhITceArRgLBB` — a WN862 load doc I don't own) | +| `trackedFlights/{flight_I_created}/statusUpdates` subcollection | readable only for flights I own | + +### Explicitly denied for listing / querying + +| Path | Error | +|------|-------| +| `LIST derivedLoadsReports` without a matching where-filter | 403 | +| `LIST trackedFlights` without airlineStCode filter | 403 | +| `runQuery` on `derivedLoadsReports`, `trackedFlights`, `scheduledFlights`, `flights`, `flightRecord`, `userRegistrations`, `userEmailVerifications`, `loadsReports` (as singular), `conversations` (list-only, 403) without proper predicates | 403 | +| Collection-group queries on sensitive collections | 403 | +| `scheduledFlights/{id}`, `flights/{id}`, `flightRecord/{id}` direct get for ANY flight | 403 | + +## Other domains on stafftraveler.com (tested unauthenticated GET) + +| URL | Response | +|-----|----------| +| `app.stafftraveler.com/` | web app (Next.js); redirects to `/login` if unauth | +| `share.stafftraveler.com/` | 200 HTML — share landing page (Next.js). Tried `/request/`, `/flight/`, `/loads/`, `/r/` → all 404 | +| `blog.stafftraveler.com/` | blog (not tested deeply) | +| `hotels.stafftraveler.com/` | hotels deals (WebView target) | +| `carrental.stafftraveler.com/` | car rentals (WebView target, URL pattern `/mobile.html?...`) | +| `support.stafftraveler.com/` | support/help | +| `shop.stafftraveler.com/` | merch | +| `links.stafftraveler.com/` | 404 not-found page (linktree-style, but empty) | +| `webhooks.stafftraveler.com/` | Fastify API; `{error:"Not Found"}` on `/`; `/request-password-reset` returns `{error:"Invalid arguments"}` on empty body | +| `stafftraveler.com/r/` | Returns generic HTML (any path) | +| `images.stafftraveler.com/avatars/*` | Public avatar CDN | + +## Goal analysis: "find all filled requests" + +- **For my own airline (WN/`st_SWA`):** ✅ possible — enumerate all `trackedFlights` with `airlineStCode == "st_SWA"` and `status == "closed"`. 500+ historic records. But actually reading the per-request **load data** (`openSeats.{first,business,economy}.count`, `staffListing.count`) still requires having personally called `createLoadsRequests` on each flight. +- **For other airlines:** ❌ blocked. The rule `scheduledFlight.airlineStCode == ` is the hard wall. Verified negatively across 9 airline codes (AAL/DAL/UAL/JBU/ACA/KLM/AFR/BAW/DLH). +- **Community-aggregated filled-request data, cross-airline:** not exposed anywhere I found. `autoRequestRecords` comes closest — it shows *who's auto-subscribing*, not what loads were reported. + +The design is intentional: StaffTraveler's value proposition is a credit-gated access to crowd-sourced data on your own airline's routes. The rules don't let you enumerate outside that scope. + +## Useful artifacts saved + +- `nonRevAgreementsBySt.json` — complete 300-airline interline matrix +- `airlinesBySt_full.json` — ST code → airline directory (partial if stopped paging) +- `firestore_listen_targets_and_queries.txt` — all Listen-channel queries captured from the web client +- `derivedLoadsReports_AA2178_*.json` — single known-working load response capture +- `searchFlightsByRoute_DFW-LAS_*.json` / `createLoadsRequests_AA2178_*.json` — HTTP command captures diff --git a/api_docs/stafftraveler_findings.md b/api_docs/stafftraveler_findings.md new file mode 100644 index 0000000..61d1408 --- /dev/null +++ b/api_docs/stafftraveler_findings.md @@ -0,0 +1,368 @@ +# StaffTraveler — complete findings + +Single source of truth for the StaffTraveler reverse-engineering effort. Verified by HTTP captures, Firestore REST probes, and Hermes bytecode analysis against the live `stafftraveler-prod` Firebase project. Raw artifacts in `stafftraveler_captures/`. + +Source app: `com.stafftraveler.webview` v3.12.0 (build 1880000346), iOS UA `stafftraveler/560 CFNetwork/3860.500.112 Darwin/25.4.0`. Web client at `https://app.stafftraveler.com` (same Firebase project, same Firestore rules — used for inspection because it sends the long-poll fallback transport instead of gRPC). + +## TL;DR for the iOS Flights integration + +To show flight loads inside our app: + +1. Add a secondary `FirebaseApp` named e.g. `StaffTravelerFirebaseApp` configured with the **web** API key + GMPID below. +2. Sign in as the user with Firebase Auth (email/password) → store refresh token in Keychain. +3. To search routes, `POST https://api.stafftraveler.com/v1/commands/user/searchFlightsByRoute` with the Bearer ID token. +4. To **unlock** loads on a flight, `POST .../createLoadsRequests` with the flight object + `isPriorityRequest: false` — costs **1 credit per new flight**, idempotent on replay. +5. After unlock, attach a Firestore snapshot listener on `derivedLoadsReports.where("flightId", "==", flightIdV3).order("createdAt", desc)` to receive live load updates. +6. Optional surface for "what's happening on my own airline": query `trackedFlights.where("scheduledFlight.airlineStCode", "==", userStCode)` to see flights other employees on the same airline have requested. + +You **cannot** show real load numbers for a flight without first calling `createLoadsRequests` on that specific flight. There is no bulk/peek endpoint — verified extensively (see "Security model"). + +--- + +## Architecture + +React Native + Hermes bytecode iOS/Android app with a thin native shell. All business logic in `assets/index.android.bundle`. Backend is Firebase: + +| Component | Service | +|-----------|---------| +| Auth | Firebase Auth (email/password, Google, Apple, Facebook) | +| Real-time data | Cloud Firestore (`stafftraveler-prod`) | +| Mutations | Custom HTTP commands API at `api.stafftraveler.com/v1/commands/user/` (likely Cloud Functions) | +| Config | Firebase Remote Config (controls API base URL, Typesense host/key, feature flags) | +| Search index | Typesense (`enhk2ji1vu6csxzrp-1.a1.typesense.net`) — server-side, not hit directly by the client | +| Push | FCM / APNs | +| Static CDN | `images.stafftraveler.com` | + +No SSL pinning. No App Check enforcement (Play Integrity classes are bundled but the `createFirebaseCommand` fetch doesn't attach an `X-Firebase-AppCheck` header, and the web client makes every request with just the ID token). + +## Firebase project config + +From APK `res/values/strings.xml` and the web client's IndexedDB: + +| Key | Value | +|-----|-------| +| Project ID | `stafftraveler-prod` | +| **Web API key** (the one that works for REST) | `AIzaSyD82Hiqx-jAbHF8faMGSveqLw8CdX8a-Uc` | +| Web App ID / GMPID | `1:628258099825:web:35b20eaab4d441894041d0` | +| Android API key | `AIzaSyC2zG6ArnguzzdWsLYV1qjQznma0zl1Q0s` (locked to the signed APK) | +| Android App ID | `1:628258099825:android:5fb976ba6ad1bb05` | +| Sender ID | `628258099825` | +| Firestore | `(default)` database | +| RTDB | `https://stafftraveler-prod.firebaseio.com` (registered but unused for loads) | +| Storage | `stafftraveler-prod.appspot.com` | + +For an iOS integration, register a new web/iOS app in the same Firebase console — but the existing web app credentials above are sufficient for direct REST and the web SDK in our app. + +## Auth + +``` +POST https://identitytoolkit.googleapis.com/v1/accounts:signInWithPassword?key= +Content-Type: application/json +{ "email": "...", "password": "...", "returnSecureToken": true } +→ { idToken, refreshToken, expiresIn: "3600", localId: , ... } +``` + +The ID token is a 1-hour JWT; refresh via `securetoken.googleapis.com/v1/token?key=` with `grant_type=refresh_token&refresh_token=...`. The Firebase SDK does this transparently. + +Token claims include `email`, `user_id`, `is_registered`. Issuer `https://securetoken.google.com/stafftraveler-prod`, audience `stafftraveler-prod`. + +## HTTP commands API + +``` +POST https://api.stafftraveler.com/v1/commands/user/ +Authorization: Bearer +Content-Type: application/json +x-stafftraveler-client: mobile ← the iOS app sends this; web sends "web". Probably not enforced. +{ ... command-specific body ... } +``` + +Response: `{ payload: }` on success, `{ isError: true, payload: }` on validation/business errors. Both come back HTTP 200; check the `isError` flag. + +`api_commands_url` is fetched from Remote Config at startup. The deployed value is `https://api.stafftraveler.com/v1/commands/user`. The bundle disassembly confirms there is no other path prefix — tested `/public/`, `/internal/`, `/admin/`, `/v2/`, `/flights/`, `/loads/`, `/system/`, `/airline/` → all 404. + +Also exposed on the same host: `GET /health` → `{message:"ok", serverTime:...}`. + +### Command inventory (all 34, via `createFirebaseCommand` enumeration) + +**Reads (free, idempotent):** +- `searchFlightsByRoute` — flight schedule by origin/destination/date +- `searchFlightsByCode` — flight schedule by flight number +- `appActive` — heartbeat; needs `{localDateIso, appType}`; returns `{payload: null}` +- `mobile` — stub, returns `"not implemented"` + +**Mutations (most of these spend credits or modify account state):** + +``` +addAirlineDetails addCreditsForPurchase addComment addIdentity +appLogout createLoadsRequests createTip deleteLoadsRequest +deleteUserAccount disableAllAutoRequestSubscriptions +disableFlightStatusUpdates enableFlightStatusUpdates discardHint +flagLoadsReport omitIdentity pinFlight unpinFlight +registerUser removeComment reportComment +reopenLoadsRequest reviseLoadsReport requestLockForLoadsRequest +unlockLoadsRequest setAutoRequestSubscription submitFeedback +submitLoadsReport unlikeTip updateUserProfile upgradeLoadsRequest +``` + +### `searchFlightsByRoute` — confirmed payload + +```json +{ + "originIata": "DFW", + "destinationIata": "LAS", + "dates": ["2026-04-22"], + "maxConnections": 0, + "allowNearbyDepartures": false, + "allowNearbyArrivals": false, + "payloadType": "passenger", + "includeMultipleCarriers": false +} +``` + +Response: `{ payload: { directFlights: [...], connectingFlights: [...], numberOfDiscardedFlights, settingsFilteredCount, messages } }`. + +Flight object fields: +``` +id, id_v2, id_v3 (= "AA_2178_DFW_2026_04_22"), +airlineId, airlineStCode, flightCode, flightNumber, +departureAirportId, departureAirportIata, arrivalAirportId, arrivalAirportIata, +departureTimeLocal, departureTimeUtc, arrivalTimeLocal, arrivalTimeUtc, +durationMinutes, isCargoFlight, +flightEquipmentId, flightEquipmentIata, +seatsTotal, seatsByClass: { first, business, premiumEconomy, economy } +``` + +`id_v3` format is `{airlineId}_{flightNumber}_{departureIata}_{YYYY}_{MM}_{DD}`. **This is the key used everywhere downstream** (Firestore docs, command bodies, etc). + +`seatsByClass` is the **aircraft cabin configuration**, NOT current availability — that's a separate Firestore lookup. + +### `createLoadsRequests` — confirmed payload + +Body is a **bare JSON array** (no outer wrapper) of full flight objects, each with one extra field `isPriorityRequest: bool`: + +```json +[ + { ...full flight from search response..., "isPriorityRequest": false } +] +``` + +Response: +```json +{ + "payload": { + "numberOfRequests": 0, + "numberOfRequestsPaidFor": 0, + "numberOfRequestsPaidForPriority": 0, + "hasSufficientCredits": true, + "verifiedRequests": [ + { + "flightId": "AA_2178_DFW_2026_04_22", + "isExisting": true, + "isDuplicateForUser": true, + "isRequestUpdateForUser": false, + "hasDeparted": false, + "isCancelled": false, + "isPriorityRequest": false, + "hasRecentLoads": false, ← summary flag; actual loads come from Firestore + "scheduledFlight": { ... full flight ... } + } + ] + } +} +``` + +**Idempotency:** Replaying the same flight returns `numberOfRequests: 0` + `isDuplicateForUser: true` + **no credit charged**. Useful as a "what's the current state" probe — pay for the first call only, then replay free. + +## Firestore — the data plane + +REST endpoint: `https://firestore.googleapis.com/v1/projects/stafftraveler-prod/databases/(default)/documents` + +**Required headers on every read:** +``` +Authorization: Bearer +X-Firebase-GMPID: 1:628258099825:web:35b20eaab4d441894041d0 +?key=AIzaSyD82Hiqx-jAbHF8faMGSveqLw8CdX8a-Uc (URL query) +``` + +Omitting `?key=` or the GMPID gives `403 PERMISSION_DENIED` even with a valid token — the project-consumer context is required. + +**Why mobile mitm couldn't see this:** the iOS Firebase SDK uses gRPC over HTTP/2 to `firestore.googleapis.com`. Many proxies show those streams as opaque binary frames. The web client uses the long-poll fallback (`Listen/channel?VER=8&TYPE=xmlhttp`) with URL-encoded JSON bodies — fully decodable. That's why the answer only fell out via the browser. + +### Loads — `derivedLoadsReports` + +The single most important query for the integration: + +```json +POST documents:runQuery +{ + "structuredQuery": { + "from": [{"collectionId": "derivedLoadsReports"}], + "where": { + "fieldFilter": { + "field": {"fieldPath": "flightId"}, + "op": "EQUAL", + "value": {"stringValue": "AA_2178_DFW_2026_04_22"} + } + }, + "orderBy": [ + {"field": {"fieldPath": "createdAt"}, "direction": "DESCENDING"}, + {"field": {"fieldPath": "__name__"}, "direction": "DESCENDING"} + ] + } +} +``` + +Doc shape (verified live capture, AA2178 2026-04-22): + +```json +{ + "flightId": "AA_2178_DFW_2026_04_22", + "openSeats": { + "first": { "count": 3 }, + "eco": { "count": 9 } + // also: business, premiumEconomy. Absent class = 0/unknown. + }, + "staffListing": { + "type": "available", // also: "upgrade" variants per checkForLoads heuristic + "count": 6, // # standby/listed non-rev passengers + "countByClass": {} + }, + "responseTimeSeconds": 196, + "numberOfCreditsRewarded": 1, + "isFlagged": false, + "isFlaggedConfirmed": false, + "seatsAvailabilityScore": 0.79, // 0-1; app uses for color coding + "hasClosedRequest": true, + "isJackpotHit": false, + "isPriorityRequest": false, + "createdAt": "2026-04-22T18:42:51.313Z", + "expireAt": "2026-07-21T21:45:00Z", // ~90 days + "creatorName": "M", // first letter only (privacy) + "creatorImageUrl": "https://images.stafftraveler.com/avatars/happysuitcase.png", + "creatorImagePath": "avatars/happysuitcase.png" +} +``` + +### `trackedFlights` — request state + +One doc per (flight, anyone-who-requested-it). Doc ID = `id_v3` of the flight. Key fields: + +``` +scheduledFlight: { full flight object — same shape as searchFlightsByRoute } +status: "open" | "closed" +createdBy: +createdAt, statusChangedAt, expireAt +priority: integer +priorityElevatedAt +isPriorityRequest, isAutoRequest, isLocked, isCancelled, isDeleted, isDelayed, isDiverted +hasDeparted, hasArrived, hasBeenRefunded +lockedBy, lockedAt ← while a reporter is filling it in +loadsUpdateRequestedBy +currentLoadsReportId ← doc ID into derivedLoadsReports +seatsAvailabilityScore ← summary score (also in derivedLoadsReports) +reportAuthorList: [] ← who has reported on this flight +reportAuthors: { : true, ... } +subscribedUsers: { : true, ... } ← all users tracking this flight +subscribedUserList: [] +statusUpdatesSubscribedUserIds: [] +usersRequestingLoads: { : , ... } ← users currently requesting an update +usersRequestingPriority: { ... } +usersEligibleForRefund: { : 1, ... } +sita: { ... rich live SITA flight record (gate, registration, flight times, marketing carriers, etc) ... } +__checksums: { typesense: "..." } +``` + +### Other Firestore listeners the web client opens (captured) + +From the live `Listen/channel` body capture in `firestore_listen_targets_and_queries.txt`: + +| Target | Use | +|--------|-----| +| `users/{uid}` | profile | +| `userHints/{uid}`, `userRequestCounters/{uid}`, `userPriorityRequestCounters/{uid}`, `userCredits/{uid}`, `userAchievements/{uid}`, `userMetrics/{uid}`, `userFlightSearchHistory/{uid}` | per-user state | +| `airportsByIata/{IATA}` | airport metadata | +| `airlinesBySt/{stCode}` | airline metadata by ST code | +| `airlineNotesBySt/{stCode}` | non-rev policy notes | +| `flightEquipment/{type}` | aircraft type info | +| `conversations/{flightId_v3}` | per-flight comment thread | +| `users/{uid}/pinnedFlights` (subcoll. query) | pinned flights | +| `users/{uid}/connectingFlights` (subcoll. query) | connecting flight definitions | +| `trackedFlights/{flightId_v3}/statusUpdates` (subcoll. query) | flight status change feed | +| `trackedFlights` query | see "Security model" — airline-scoped | +| `autoRequestRecords` query filtered by `subscribedUserIds ARRAY_CONTAINS uid` AND `isActive == true` | user's auto-subscriptions | + +## Security model (the load-data unlock) + +This is the constraint that defines the integration shape. Verified by exhaustive probing. + +**Rules summary** (inferred from observed access pattern): + +| Collection | Rule (effective) | +|------------|------------------| +| `__system/*`, `__derived/nonRevAgreementsBySt`, `airlines/*`, `airlinesBySt/*`, `airportsByIata/*`, `airlineNotesBySt/*`, `flightEquipment/*`, `tips/*`, `autoRequestRecords/*`, `conversations/*` | Public read for any authenticated user | +| `users/{uid}`, `userCredits/{uid}`, all other `user*/{uid}` | Owner-only | +| `trackedFlights` query (`list`) | Allowed only when filtered by `scheduledFlight.airlineStCode == ` | +| `trackedFlights/{id}` direct read (`get`) | Allowed if same-airline OR createdBy == auth.uid | +| `trackedFlights/{id}/statusUpdates` subcollection | Allowed only if you own/created the flight | +| `derivedLoadsReports` query and direct-get | Allowed only if you have a matching `trackedFlights/{flightId}` where you're the creator/subscriber | +| `scheduledFlights/{id}`, `flightRecord/{id}`, `flights/{id}` | Denied for direct-get on any flight | + +**Verified 2026-04-22:** +- AA2178 query (I have a request on it) → 200, returns the load doc. +- WN862 query (someone else's request, my airline) → 403. +- Direct GET on `derivedLoadsReports/dVb4zStjhITceArRgLBB` (WN862's load doc, ID extracted from the trackedFlight doc which IS readable as same-airline) → still 403. Same token, same headers. So knowing the doc ID is not a bypass. +- DL/AA/UA/JBU/etc trackedFlights queries → 403 across all 9 airlines tested. +- Same-airline trackedFlights query → 500+ historic WN flights returned (status=closed mostly), confirming the airline-scope leak. + +**Net consequence:** there is no "peek" path. To see load numbers on a flight, you must spend a credit on it via `createLoadsRequests`. After that, both the trackedFlight and derivedLoadsReports become readable indefinitely (or until the flight expires ~90 days later), and snapshot listeners deliver new community-submitted reports for free. + +The same-airline `trackedFlights` listing exposes one useful summary signal without paying: `seatsAvailabilityScore` (0–1) on flights other employees on your own airline have asked about. Coarse go/no-go indicator, no class-level breakdown. + +## Public reference data worth caching + +Pulled and saved to `stafftraveler_captures/`: + +- **`__derived/nonRevAgreementsBySt`** (`nonRevAgreementsBySt.json`) — full interline matrix: 300 airlines, each with an array of airline ST codes they have non-rev agreements with. Useful for filtering search results to "airlines I can actually non-rev on" without us building this ourselves. +- **`airlinesBySt/*`** (`airlinesBySt_full.json`) — ST-code → airline directory. + +Both stable, refresh occasionally. + +## What the iOS app actually needs + +Concrete integration plan: + +1. **Secondary FirebaseApp** `StaffTravelerApp` configured with the web key + GMPID above. Initialize on first user-opt-in. +2. **Auth screen** — email/password login → store refresh token in Keychain. Surface "no StaffTraveler account? Sign up in the StaffTraveler app first" — `addAirlineDetails` verification has to happen there. +3. **Bridge user state** — read `users/{uid}` (gets `airlineStCode`, name) and `userCredits/{uid}` (gets balance). Display credit balance in our UI. +4. **Search**: `POST /v1/commands/user/searchFlightsByRoute`. Free. +5. **Flight row UI**: for each result, attach a Firestore snapshot listener on `derivedLoadsReports.where("flightId", "==", flightId_v3)`. + - If the listener gets a doc → render loads inline. + - If 403 → flight isn't unlocked yet; show a "Request loads (1 credit)" CTA. +6. **Request CTA** → `POST /v1/commands/user/createLoadsRequests` with the full flight + `isPriorityRequest: false`. Idempotent — surface "you already requested this" if `isDuplicateForUser: true`. +7. **Comments / status feed (optional)** — listeners on `conversations/{flightId}` and `trackedFlights/{flightId}/statusUpdates`. +8. **Token refresh** — let Firebase iOS SDK handle it. Don't try to do it manually. + +Mutations to wire later if useful: `pinFlight`/`unpinFlight`, `setAutoRequestSubscription` (auto-poll a recurring route), `submitLoadsReport` (let the user contribute back if they're at the gate). Skip everything else. + +## Captures (raw artifacts) + +In `stafftraveler_captures/`: + +- `searchFlightsByRoute_DFW-LAS_request.json` / `_response.json` — schedule API +- `createLoadsRequests_AA2178_request.json` / `_response.json` / `_response_headers.txt` — load-request API +- `derivedLoadsReports_AA2178_request.json` / `_response.json` — actual loads readout +- `firestore_listen_targets_and_queries.txt` — all `addTarget` bodies the web client opens in a session +- `nonRevAgreementsBySt.json` — interline matrix +- `airlinesBySt_full.json` — airline directory +- `firestore_schema.md`, `url_surface_crawl.md`, `README.md` — interim notes + +## Things that are NOT possible + +Documenting the dead ends so we don't relitigate: + +- **Cross-airline load enumeration** — blocked by the `airlineStCode` filter on `trackedFlights` and the createdBy check on `derivedLoadsReports`. Tested across 9 airline codes. +- **Bulk peek at multiple flights' loads in one call** — no API. Each flight needs its own credit unlock. +- **Reading another user's `derivedLoadsReports` by knowing the doc ID** — rule evaluates the doc's `flightId` against your tracked flights. Direct-GET on a known foreign doc ID returns 403. +- **Spoofing airline membership** — token claims are server-issued; `setAirlineStCodes` is a real command but changing your airline would affect the user's actual account. +- **Anonymous Firebase Auth on this project** — the Android API key is restricted to the signed APK package + cert SHA1. The web key is unrestricted on `signInWithPassword` but you still need real credentials. +- **App Check bypass** — moot; not enforced in practice. diff --git a/scripts/jsx_cdp_probe.mjs b/scripts/jsx_cdp_probe.mjs new file mode 100644 index 0000000..f151986 --- /dev/null +++ b/scripts/jsx_cdp_probe.mjs @@ -0,0 +1,1084 @@ +import { spawn } from "node:child_process"; +import { mkdir, rm, writeFile } from "node:fs/promises"; +import process from "node:process"; +import { setTimeout as delay } from "node:timers/promises"; + +const chromePath = "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome"; +const port = Number(process.env.CDP_PORT || 9229); +const origin = process.env.JSX_ORIGIN || "DAL"; +const destination = process.env.JSX_DESTINATION || "HOU"; +const beginDate = process.env.JSX_DATE || "2026-04-11"; +const headless = process.env.HEADLESS === "1"; +const userDataDir = process.env.CHROME_USER_DATA_DIR || `/tmp/jsx-chrome-${Date.now()}`; +const artifactsDir = process.env.JSX_ARTIFACTS_DIR || "/tmp/jsx-probe"; +const navigationUrl = process.env.JSX_URL || "https://www.jsx.com/"; +const settleMs = Number(process.env.SETTLE_MS || 8000); +const requestTimeoutMs = Number(process.env.REQUEST_TIMEOUT_MS || 30000); + +await mkdir(artifactsDir, { recursive: true }); + +function log(message, details) { + if (details === undefined) { + console.log(`[probe] ${message}`); + return; + } + console.log(`[probe] ${message}`, details); +} + +async function fetchJson(url) { + const response = await fetch(url); + if (!response.ok) { + throw new Error(`HTTP ${response.status} for ${url}`); + } + return response.json(); +} + +async function waitForDebugger() { + const deadline = Date.now() + requestTimeoutMs; + while (Date.now() < deadline) { + try { + return await fetchJson(`http://127.0.0.1:${port}/json/version`); + } catch { + await delay(250); + } + } + throw new Error("Timed out waiting for Chrome remote debugger"); +} + +function launchChrome() { + const args = [ + `--remote-debugging-port=${port}`, + `--user-data-dir=${userDataDir}`, + "--no-first-run", + "--no-default-browser-check", + "--disable-default-apps", + "--disable-popup-blocking", + "--disable-background-networking", + "--disable-renderer-backgrounding", + "--window-size=1440,1200", + navigationUrl, + ]; + + if (headless) { + args.splice(args.length - 1, 0, "--headless=new"); + } + + log("Launching Chrome", { chromePath, port, userDataDir, headless, navigationUrl }); + const child = spawn(chromePath, args, { + detached: false, + stdio: ["ignore", "pipe", "pipe"], + }); + + child.stdout.on("data", chunk => { + const text = chunk.toString().trim(); + if (text) { + console.log(`[chrome] ${text}`); + } + }); + + child.stderr.on("data", chunk => { + const text = chunk.toString().trim(); + if (text) { + console.error(`[chrome] ${text}`); + } + }); + + return child; +} + +class CDPClient { + constructor(socketUrl) { + this.socketUrl = socketUrl; + this.ws = new WebSocket(socketUrl); + this.nextId = 1; + this.pending = new Map(); + this.eventHandlers = new Map(); + this.openPromise = new Promise((resolve, reject) => { + this.ws.addEventListener("open", () => resolve()); + this.ws.addEventListener("error", event => reject(event.error || new Error("WebSocket open failed"))); + }); + + this.ws.addEventListener("message", event => { + const message = JSON.parse(event.data.toString()); + if (message.id) { + const pending = this.pending.get(message.id); + if (!pending) { + return; + } + this.pending.delete(message.id); + if (message.error) { + pending.reject(new Error(message.error.message || JSON.stringify(message.error))); + } else { + pending.resolve(message.result); + } + return; + } + + const handlers = this.eventHandlers.get(message.method) || []; + for (const handler of handlers) { + handler(message.params || {}); + } + }); + } + + async ready() { + await this.openPromise; + } + + async send(method, params = {}) { + await this.ready(); + const id = this.nextId++; + const payload = JSON.stringify({ id, method, params }); + const promise = new Promise((resolve, reject) => { + this.pending.set(id, { resolve, reject }); + setTimeout(() => { + if (this.pending.has(id)) { + this.pending.delete(id); + reject(new Error(`Timed out waiting for ${method}`)); + } + }, requestTimeoutMs); + }); + + this.ws.send(payload); + return promise; + } + + on(method, handler) { + const handlers = this.eventHandlers.get(method) || []; + handlers.push(handler); + this.eventHandlers.set(method, handlers); + } + + async close() { + if (this.ws.readyState === WebSocket.OPEN || this.ws.readyState === WebSocket.CONNECTING) { + this.ws.close(); + } + } +} + +async function clickPoint(cdp, point) { + await cdp.send("Input.dispatchMouseEvent", { + type: "mouseMoved", + x: point.x, + y: point.y, + button: "none", + }); + await cdp.send("Input.dispatchMouseEvent", { + type: "mousePressed", + x: point.x, + y: point.y, + button: "left", + clickCount: 1, + }); + await cdp.send("Input.dispatchMouseEvent", { + type: "mouseReleased", + x: point.x, + y: point.y, + button: "left", + clickCount: 1, + }); +} + +async function clickButtonByText(cdp, textPattern) { + const result = await cdp.send("Runtime.evaluate", { + expression: ` +(() => { + const visible = element => !!(element.offsetWidth || element.offsetHeight || element.getClientRects().length); + const textOf = element => (element.innerText || element.textContent || "").replace(/\\s+/g, " ").trim(); + const button = Array.from(document.querySelectorAll("button, [role='button']")) + .filter(visible) + .find(element => ${textPattern}.test(textOf(element))); + + if (!button) { + return { success: false, reason: "button-not-found", pattern: "${textPattern}" }; + } + + const rect = button.getBoundingClientRect(); + return { + success: true, + text: textOf(button), + x: rect.left + rect.width / 2, + y: rect.top + rect.height / 2 + }; +})() +`, + awaitPromise: true, + returnByValue: true, + }); + + const details = result.result?.value; + if (!details?.success) { + return details; + } + + await clickPoint(cdp, details); + await delay(500); + return { success: true, text: details.text }; +} + +async function newTarget() { + const response = await fetch(`http://127.0.0.1:${port}/json/new?about:blank`, { + method: "PUT", + }); + if (!response.ok) { + throw new Error(`Failed to create target: HTTP ${response.status}`); + } + return response.json(); +} + +function visibleFilter(element) { + return !!(element.offsetWidth || element.offsetHeight || element.getClientRects().length); +} + +const pageProbeScript = ` +(() => { + const visible = element => !!(element.offsetWidth || element.offsetHeight || element.getClientRects().length); + const textOf = element => (element.innerText || element.textContent || "").replace(/\\s+/g, " ").trim(); + const describe = element => { + const label = element.labels && element.labels.length + ? Array.from(element.labels).map(label => textOf(label)).join(" | ") + : ""; + return { + tag: element.tagName.toLowerCase(), + type: element.getAttribute("type") || "", + id: element.id || "", + name: element.getAttribute("name") || "", + role: element.getAttribute("role") || "", + testId: element.getAttribute("data-testid") || "", + placeholder: element.getAttribute("placeholder") || "", + ariaLabel: element.getAttribute("aria-label") || "", + value: element.value || "", + text: textOf(element).slice(0, 120), + label: label.slice(0, 120), + }; + }; + + const elements = Array.from(document.querySelectorAll("input, button, select, textarea, [role='button'], [role='combobox'], [data-testid]")) + .filter(visible) + .map(describe) + .slice(0, 250); + + return { + url: location.href, + title: document.title, + readyState: document.readyState, + bodyTextPreview: textOf(document.body).slice(0, 1000), + localStorage: Object.fromEntries(Object.keys(localStorage).sort().map(key => [key, localStorage.getItem(key)])), + sessionStorage: Object.fromEntries(Object.keys(sessionStorage).sort().map(key => [key, sessionStorage.getItem(key)])), + elements, + }; +})() +`; + +const acceptConsentScript = ` +(() => { + const visible = element => !!(element.offsetWidth || element.offsetHeight || element.getClientRects().length); + const exactLabels = new Set([ + "accept", + "accept all", + "allow all", + "i agree", + "agree" + ]); + + const candidates = Array.from(document.querySelectorAll("button, [role='button']")) + .filter(visible); + + for (const candidate of candidates) { + const text = (candidate.innerText || candidate.textContent || "").replace(/\\s+/g, " ").trim().toLowerCase(); + if (exactLabels.has(text)) { + candidate.click(); + return { clicked: true, text }; + } + } + + return { clicked: false }; +})() +`; + +const setOneWayTripScript = ` +(async () => { + const visible = element => !!(element.offsetWidth || element.offsetHeight || element.getClientRects().length); + const textOf = element => (element.innerText || element.textContent || "").replace(/\\s+/g, " ").trim(); + const tripTrigger = Array.from(document.querySelectorAll("[role='combobox']")) + .find(element => /round trip|one way|multi city/i.test(textOf(element))); + + if (!tripTrigger) { + return { success: false, reason: "trip-trigger-not-found" }; + } + + const anyOption = () => Array.from(document.querySelectorAll("mat-option, [role='option']")).find(visible); + const tried = []; + + tripTrigger.scrollIntoView?.({ block: "center" }); + tripTrigger.click(); + tried.push("click"); + await new Promise(resolve => setTimeout(resolve, 500)); + + if (!anyOption()) { + tripTrigger.focus?.(); + await new Promise(resolve => setTimeout(resolve, 100)); + for (const key of ["Enter", " ", "ArrowDown"]) { + tripTrigger.dispatchEvent(new KeyboardEvent("keydown", { + key, + code: key === " " ? "Space" : key, + keyCode: key === "Enter" ? 13 : key === " " ? 32 : 40, + bubbles: true, + cancelable: true, + })); + tried.push("key:" + key); + await new Promise(resolve => setTimeout(resolve, 350)); + if (anyOption()) break; + } + } + + if (!anyOption()) { + const ctxKey = Object.keys(tripTrigger).find(key => key.startsWith("__ngContext__")); + if (ctxKey) { + for (const item of tripTrigger[ctxKey] || []) { + if (item && typeof item === "object" && typeof item.open === "function") { + try { item.open(); tried.push("ngContext.open"); } catch {} + await new Promise(resolve => setTimeout(resolve, 400)); + if (anyOption()) break; + } + } + } + } + + const options = Array.from(document.querySelectorAll("mat-option, [role='option']")).filter(visible); + const oneWay = options.find(element => /^one way$/i.test(textOf(element))); + if (!oneWay) { + return { + success: false, + reason: "one-way-option-not-found", + tried, + visibleOptions: options.map(textOf).filter(Boolean).slice(0, 40) + }; + } + + oneWay.scrollIntoView?.({ block: "center" }); + for (const type of ["pointerdown", "mousedown", "pointerup", "mouseup", "click"]) { + oneWay.dispatchEvent(new MouseEvent(type, { bubbles: true, cancelable: true })); + } + oneWay.click?.(); + await new Promise(resolve => setTimeout(resolve, 500)); + + let usedAngular = false; + const returnVisible = Array.from(document.querySelectorAll("input")).some(input => { + const label = (input.getAttribute("aria-label") || "").toLowerCase(); + return label.includes("return date") && (input.offsetWidth || input.offsetHeight); + }); + if (returnVisible) { + const ctxKey = Object.keys(oneWay).find(key => key.startsWith("__ngContext__")); + if (ctxKey) { + for (const item of oneWay[ctxKey] || []) { + if (!item || typeof item !== "object") continue; + if (typeof item._selectViaInteraction === "function") { + try { item._selectViaInteraction(); usedAngular = true; break; } catch {} + } + if (typeof item.select === "function" && item.value !== undefined) { + try { item.select(); usedAngular = true; break; } catch {} + } + } + } + await new Promise(resolve => setTimeout(resolve, 500)); + } + + const finalReturnVisible = Array.from(document.querySelectorAll("input")).some(input => { + const label = (input.getAttribute("aria-label") || "").toLowerCase(); + return label.includes("return date") && (input.offsetWidth || input.offsetHeight); + }); + + return { + success: !finalReturnVisible, + selected: textOf(oneWay), + tried, + usedAngular, + finalReturnVisible + }; +})() +`; + +const dismissMarketingPopupScript = ` +(() => { + const visible = element => !!(element.offsetWidth || element.offsetHeight || element.getClientRects().length); + const closeButton = Array.from(document.querySelectorAll("button, [role='button']")) + .filter(visible) + .find(element => (element.getAttribute("aria-label") || "").toLowerCase() === "close dialog"); + + if (!closeButton) { + return { dismissed: false }; + } + + closeButton.click(); + return { dismissed: true }; +})() +`; + +const selectStationScript = (index, stationCode) => ` +(async () => { + const visible = element => !!(element.offsetWidth || element.offsetHeight || element.getClientRects().length); + const textOf = element => (element.innerText || element.textContent || "").replace(/\\s+/g, " ").trim(); + const metaOf = element => [ + element.getAttribute("placeholder") || "", + element.getAttribute("aria-label") || "", + element.getAttribute("name") || "", + element.id || "", + textOf(element.parentElement || element), + ].join(" ").toLowerCase(); + const nativeValueSetter = Object.getOwnPropertyDescriptor(HTMLInputElement.prototype, "value")?.set; + const setInputValue = (input, value) => { + input.focus(); + if (nativeValueSetter) { + nativeValueSetter.call(input, value); + } else { + input.value = value; + } + input.dispatchEvent(new InputEvent("input", { bubbles: true, data: value })); + input.dispatchEvent(new Event("change", { bubbles: true })); + }; + + const stationButtons = Array.from(document.querySelectorAll("[aria-label='Station select'], [aria-label*='Station select']")) + .filter(visible); + const trigger = stationButtons[${index}]; + if (!trigger) { + return { + success: false, + reason: "station-trigger-not-found", + triggers: stationButtons.map(textOf) + }; + } + + trigger.click(); + await new Promise(resolve => setTimeout(resolve, 700)); + + const searchInput = Array.from(document.querySelectorAll("input")) + .filter(visible) + .find(input => { + const placeholder = (input.getAttribute("placeholder") || "").toLowerCase(); + return placeholder === "airport or city" || (/airport|station|city|search|origin|destination/.test(metaOf(input)) && !/date|email|phone/.test(metaOf(input))); + }); + + if (searchInput) { + setInputValue(searchInput, "${stationCode}"); + await new Promise(resolve => setTimeout(resolve, 700)); + } + + const stationPattern = new RegExp("(^|\\\\b)${stationCode}(\\\\b|$)", "i"); + const candidates = Array.from(document.querySelectorAll("li[role='option'].station-options__item, li[role='option'], .station-options__item")) + .filter(visible); + const target = candidates.find(element => stationPattern.test(textOf(element))); + + if (!target) { + return { + success: false, + reason: "station-option-not-found", + searchInputMeta: searchInput ? metaOf(searchInput) : null, + visibleOptions: candidates.map(textOf).filter(Boolean).slice(0, 80) + }; + } + + target.scrollIntoView?.({ block: "center" }); + for (const type of ["pointerdown", "mousedown", "pointerup", "mouseup", "click"]) { + target.dispatchEvent(new MouseEvent(type, { bubbles: true, cancelable: true })); + } + target.click?.(); + await new Promise(resolve => setTimeout(resolve, 500)); + + const after = () => Array.from(document.querySelectorAll("[aria-label='Station select']")).filter(visible)[${index}]; + let finalText = (after()?.textContent || "").trim(); + let usedAngular = false; + if (!finalText.includes("${stationCode}")) { + const ctxKey = Object.keys(target).find(key => key.startsWith("__ngContext__")); + if (ctxKey) { + for (const item of target[ctxKey] || []) { + if (!item || typeof item !== "object") continue; + for (const method of ["_selectViaInteraction", "select", "onSelect", "onClick", "handleClick"]) { + if (typeof item[method] === "function") { + try { item[method](); usedAngular = true; break; } catch {} + } + } + if (usedAngular) break; + } + } + await new Promise(resolve => setTimeout(resolve, 400)); + finalText = (after()?.textContent || "").trim(); + } + + return { + success: finalText.includes("${stationCode}"), + selected: textOf(target), + finalText, + usedAngular + }; +})() +`; + +const setDepartDateScript = isoDate => ` +(async () => { + const sleep = ms => new Promise(resolve => setTimeout(resolve, ms)); + const [year, month, day] = "${isoDate}".split("-").map(Number); + const monthNames = [ + "January","February","March","April","May","June", + "July","August","September","October","November","December" + ]; + const targetMonthName = monthNames[month - 1]; + + const input = Array.from(document.querySelectorAll("input")).find(element => { + const label = (element.getAttribute("aria-label") || "").toLowerCase(); + return label.includes("depart date") || (label.includes("date") && !label.includes("return")); + }); + if (!input) { + return { success: false, reason: "depart-input-not-found" }; + } + + const wrapper = input.closest("mat-form-field, jsx-form-field, .form-field, .jsx-form-field"); + const toggle = + wrapper?.querySelector("mat-datepicker-toggle button") || + wrapper?.querySelector("button[aria-label*='calendar' i]") || + wrapper?.querySelector("button[aria-label*='date picker' i]") || + input; + toggle.click(); + await sleep(800); + + const findCalendar = () => { + const direct = document.querySelector( + "mat-calendar, .mat-calendar, mat-datepicker-content, [class*='mat-datepicker']" + ); + if (direct) return direct; + const overlay = document.querySelector(".cdk-overlay-container"); + if (overlay) { + const panes = overlay.querySelectorAll(".cdk-overlay-pane, [class*='datepicker'], [class*='calendar'], [class*='date-picker']"); + for (const pane of panes) { + if (!(pane.offsetWidth || pane.offsetHeight)) continue; + const text = pane.textContent || ""; + if (/january|february|march|april|may|june|july|august|september|october|november|december/i.test(text)) { + return pane; + } + } + } + const candidates = Array.from(document.querySelectorAll("div, section, article")) + .filter(element => element.offsetWidth && element.offsetHeight && element.offsetWidth < 1000) + .filter(element => /\\b(Sun|Mon|Tue|Wed|Thu|Fri|Sat)\\b/.test(element.textContent || "")) + .filter(element => /january|february|march|april|may|june|july|august|september|october|november|december/i.test(element.textContent || "")); + return candidates[0] || null; + }; + + let calendar = findCalendar(); + if (!calendar) { + input.click(); + input.focus?.(); + await sleep(500); + calendar = findCalendar(); + } + if (!calendar) { + return { success: false, reason: "datepicker-did-not-open" }; + } + + const next = calendar.querySelector(".mat-calendar-next-button, [aria-label*='Next month' i]"); + const prev = calendar.querySelector(".mat-calendar-previous-button, [aria-label*='Previous month' i]"); + const monthIndex = name => + ["january","february","march","april","may","june","july","august","september","october","november","december"] + .indexOf(name.toLowerCase()); + + for (let i = 0; i < 24; i++) { + const header = calendar.querySelector(".mat-calendar-period-button, [class*='calendar-header']"); + const text = header?.textContent?.trim() || ""; + if (text.includes(targetMonthName) && text.includes(String(year))) break; + const match = text.match(/(\\w+)\\s+(\\d{4})/); + let forward = true; + if (match) { + const current = parseInt(match[2], 10) * 12 + monthIndex(match[1]); + const target = year * 12 + (month - 1); + forward = current < target; + } + const button = forward ? next : prev; + if (!button || button.disabled) break; + button.click(); + await sleep(250); + } + + const ariaExact = targetMonthName + " " + day + ", " + year; + const ariaLoose = targetMonthName + " " + day + " " + year; + const allCells = Array.from(calendar.querySelectorAll("[aria-label]")) + .filter(element => element.offsetWidth || element.offsetHeight); + let cell = allCells.find(element => { + const aria = (element.getAttribute("aria-label") || "").trim(); + return aria === ariaExact || aria === ariaLoose || aria.startsWith(ariaExact); + }); + + if (!cell) { + const dayRe = new RegExp("\\\\b" + day + "\\\\b"); + cell = allCells.find(element => { + const aria = element.getAttribute("aria-label") || ""; + return aria.includes(targetMonthName) && aria.includes(String(year)) && dayRe.test(aria); + }); + } + + if (!cell) { + return { success: false, reason: "day-cell-not-found", ariaExact }; + } + + cell.scrollIntoView?.({ block: "center" }); + for (const type of ["pointerdown", "mousedown", "pointerup", "mouseup", "click"]) { + cell.dispatchEvent(new MouseEvent(type, { bubbles: true, cancelable: true })); + } + cell.click?.(); + await sleep(700); + + const doneButton = Array.from(document.querySelectorAll("button, [role='button']")) + .filter(element => element.offsetWidth || element.offsetHeight) + .find(element => /^\\s*done\\s*$/i.test((element.innerText || element.textContent || "").trim())); + let doneClicked = false; + if (doneButton) { + doneButton.scrollIntoView?.({ block: "center" }); + for (const type of ["pointerdown", "mousedown", "pointerup", "mouseup", "click"]) { + doneButton.dispatchEvent(new MouseEvent(type, { bubbles: true, cancelable: true })); + } + doneButton.click?.(); + doneClicked = true; + await sleep(600); + } + + document.body.click(); + for (const element of document.querySelectorAll("input")) { + element.dispatchEvent(new Event("blur", { bubbles: true })); + } + await sleep(300); + + return { + success: true, + value: input.value, + doneClicked + }; +})() +`; + +const forceAngularFormUpdateScript = ` +(async () => { + const sleep = ms => new Promise(resolve => setTimeout(resolve, ms)); + document.body.click(); + for (const input of document.querySelectorAll("input")) { + input.dispatchEvent(new Event("blur", { bubbles: true })); + } + await sleep(300); + + let touched = 0; + for (const element of document.querySelectorAll("*")) { + const ctxKey = Object.keys(element).find(key => key.startsWith("__ngContext__")); + if (!ctxKey) continue; + for (const item of element[ctxKey] || []) { + if (!item || typeof item !== "object" || !(item.controls || item.control)) continue; + const form = item.controls ? item : item.control?.controls ? item.control : null; + if (!form) continue; + try { form.markAllAsTouched?.(); } catch {} + try { form.updateValueAndValidity?.(); } catch {} + touched++; + } + if (touched > 20) break; + } + + const findButton = Array.from(document.querySelectorAll("button")) + .find(button => /find flights/i.test(button.textContent || "")); + return { + success: true, + touched, + findButtonDisabled: Boolean(findButton?.disabled || findButton?.getAttribute("aria-disabled") === "true") + }; +})() +`; + +const componentSnapshotScript = ` +(() => { + const safe = (value, depth = 0) => { + if (depth > 3) return null; + if (value === null || value === undefined) return value; + if (typeof value === "function") return "[function]"; + if (value instanceof Date) return value.toISOString(); + if (typeof value !== "object") return value; + if (Array.isArray(value)) return value.slice(0, 10).map(item => safe(item, depth + 1)); + const output = {}; + for (const key of Object.keys(value).slice(0, 25)) { + try { + output[key] = safe(value[key], depth + 1); + } catch { + output[key] = "[unreadable]"; + } + } + return output; + }; + + for (const element of document.querySelectorAll("*")) { + const ctxKey = Object.keys(element).find(key => key.startsWith("__ngContext__")); + if (!ctxKey) continue; + const ctx = element[ctxKey]; + if (!Array.isArray(ctx)) continue; + for (let idx = 0; idx < ctx.length; idx++) { + const item = ctx[idx]; + if (!item || typeof item !== "object") continue; + if (!("beginDate" in item) || !("origin" in item) || !("destination" in item) || typeof item.search !== "function") { + continue; + } + + const keys = Object.keys(item).sort(); + const proto = Object.getPrototypeOf(item); + const protoMethods = proto + ? Object.getOwnPropertyNames(proto) + .filter(name => name !== "constructor" && typeof item[name] === "function") + .sort() + : []; + + return { + found: true, + idx, + hostTag: (element.tagName || "").toLowerCase(), + hostClass: String(element.className || ""), + keys, + interestingKeys: keys.filter(name => /(origin|destination|home|station|airport|date|trip|search|market|store)/i.test(name)), + protoMethods: protoMethods.filter(name => /(origin|destination|home|station|airport|date|trip|search|select|set|update|submit)/i.test(name)), + gatingValues: { + departureSelectionComplete: item.departureSelectionComplete, + arrivalSelectionComplete: item.arrivalSelectionComplete, + tripType: item.tripType, + searchStart: item.searchStart, + searchComplete: item.searchComplete, + searchButtonDisabled: Boolean(item.searchButton?.disabled), + searchButtonAriaDisabled: item.searchButton?.getAttribute?.("aria-disabled") || null + }, + methodBodies: Object.fromEntries( + ["fromUpdated", "toUpdated", "setSelectedStations", "validateTripSelection", "validateDates", "search"] + .filter(name => typeof item[name] === "function") + .map(name => [name, String(item[name]).slice(0, 1200)]) + ), + fromStationProtoMethods: item.fromStation ? Object.getOwnPropertyNames(Object.getPrototypeOf(item.fromStation) || {}) + .filter(name => name !== "constructor" && typeof item.fromStation[name] === "function") + .filter(name => /(select|choose|station|input|search|update|focus|click|set)/i.test(name)) + .sort() : [], + toStationProtoMethods: item.toStation ? Object.getOwnPropertyNames(Object.getPrototypeOf(item.toStation) || {}) + .filter(name => name !== "constructor" && typeof item.toStation[name] === "function") + .filter(name => /(select|choose|station|input|search|update|focus|click|set)/i.test(name)) + .sort() : [], + originPreview: safe(item.origin), + destinationPreview: safe(item.destination), + beginDatePreview: safe(item.beginDate), + interestingValues: Object.fromEntries( + keys + .filter(name => /(origin|destination|home|station|airport|date|trip|market|arrivalSelectionComplete|departureSelectionComplete)/i.test(name)) + .slice(0, 20) + .map(name => { + try { + return [name, safe(item[name])]; + } catch { + return [name, "[unreadable]"]; + } + }) + ) + }; + } + } + + return { found: false }; +})() +`; + +const stationOverlayDebugScript = index => ` +(async () => { + const visible = element => !!(element.offsetWidth || element.offsetHeight || element.getClientRects().length); + const textOf = element => (element.innerText || element.textContent || "").replace(/\\s+/g, " ").trim(); + const stationButtons = Array.from(document.querySelectorAll("[aria-label='Station select'], [aria-label*='Station select']")) + .filter(visible); + const trigger = stationButtons[${index}]; + if (!trigger) { + return { success: false, reason: "station-trigger-not-found" }; + } + + trigger.click(); + await new Promise(resolve => setTimeout(resolve, 900)); + + const elements = Array.from(document.querySelectorAll("input, button, [role='button'], [role='option'], [role='dialog'], mat-option, li, .mat-mdc-option, .mat-option")) + .filter(visible) + .map(element => ({ + tag: element.tagName.toLowerCase(), + role: element.getAttribute("role") || "", + ariaLabel: element.getAttribute("aria-label") || "", + placeholder: element.getAttribute("placeholder") || "", + id: element.id || "", + className: element.className || "", + text: textOf(element).slice(0, 160) + })) + .filter(item => item.text || item.ariaLabel || item.placeholder) + .slice(0, 150); + + return { + success: true, + triggerText: textOf(trigger), + activeElement: document.activeElement ? { + tag: document.activeElement.tagName.toLowerCase(), + ariaLabel: document.activeElement.getAttribute("aria-label") || "", + placeholder: document.activeElement.getAttribute("placeholder") || "", + id: document.activeElement.id || "", + text: textOf(document.activeElement).slice(0, 160) + } : null, + elements + }; +})() +`; + +const availabilityProbeScript = ` +(async ({ origin, destination, beginDate }) => { + const payload = { + beginDate, + destination, + origin, + passengers: { + types: [{ count: 1, type: "ADT" }] + }, + taxesAndFees: 2, + filters: { + maxConnections: 4, + compressionType: 1, + sortOptions: [4], + fareTypes: ["R"], + exclusionType: 2 + }, + numberOfFaresPerJourney: 10, + codes: { + currencyCode: "USD" + }, + ssrCollectionsMode: 1 + }; + + const tokenData = JSON.parse(sessionStorage.getItem("navitaire.digital.token") || "null"); + const token = tokenData?.token || ""; + + const response = await fetch("https://api.jsx.com/api/nsk/v4/availability/search/simple", { + method: "POST", + credentials: "include", + headers: { + "Content-Type": "application/json", + "Accept": "application/json, text/plain, */*", + "Authorization": token + }, + body: JSON.stringify(payload) + }); + + const body = await response.text(); + + return { + tokenPresent: Boolean(token), + tokenPrefix: token.slice(0, 24), + tokenExpiration: tokenData?.expiration || null, + status: response.status, + bodyLength: body.length, + bodySnippet: body.slice(0, 4000) + }; +})(${JSON.stringify({ origin, destination, beginDate })}) +`; + +async function main() { + const chrome = launchChrome(); + let cdp; + + try { + await waitForDebugger(); + const target = await newTarget(); + log("Connected target", { id: target.id, url: target.url }); + cdp = new CDPClient(target.webSocketDebuggerUrl); + await cdp.ready(); + + const requests = []; + const responseMetaByRequestId = new Map(); + + cdp.on("Network.requestWillBeSent", params => { + const url = params.request?.url || ""; + if (!url.includes("jsx.com")) { + return; + } + const record = { + stage: "request", + type: params.type || "", + method: params.request?.method || "", + url, + postData: params.request?.postData || "", + hasAuthHeader: Boolean(params.request?.headers?.Authorization), + }; + requests.push(record); + console.log(JSON.stringify(record)); + }); + + cdp.on("Network.responseReceived", params => { + const url = params.response?.url || ""; + if (!url.includes("jsx.com")) { + return; + } + const record = { + stage: "response", + type: params.type || "", + status: params.response?.status || 0, + mimeType: params.response?.mimeType || "", + url, + }; + responseMetaByRequestId.set(params.requestId, record); + requests.push(record); + console.log(JSON.stringify(record)); + }); + + cdp.on("Network.loadingFinished", async params => { + const meta = responseMetaByRequestId.get(params.requestId); + if (!meta || !meta.url.includes("api.jsx.com")) { + return; + } + try { + const body = await cdp.send("Network.getResponseBody", { requestId: params.requestId }); + const snippet = (body.body || "").slice(0, 3000); + const record = { + stage: "body", + status: meta.status, + url: meta.url, + bodySnippet: snippet, + base64Encoded: Boolean(body.base64Encoded), + }; + requests.push(record); + console.log(JSON.stringify(record)); + } catch (error) { + console.log(JSON.stringify({ + stage: "body-error", + url: meta.url, + error: error.message, + })); + } + }); + + await cdp.send("Page.enable"); + await cdp.send("Runtime.enable"); + await cdp.send("Network.enable", { + maxTotalBufferSize: 100_000_000, + maxResourceBufferSize: 10_000_000, + maxPostDataSize: 1_000_000, + }); + await cdp.send("Network.setCacheDisabled", { cacheDisabled: true }); + + log("Navigating page target", navigationUrl); + await cdp.send("Page.navigate", { url: navigationUrl }); + await delay(settleMs); + + const consentResult = await cdp.send("Runtime.evaluate", { + expression: acceptConsentScript, + awaitPromise: true, + returnByValue: true, + }); + log("Consent result", consentResult.result?.value); + + await delay(1500); + + const initialProbe = await cdp.send("Runtime.evaluate", { + expression: pageProbeScript, + awaitPromise: true, + returnByValue: true, + }); + await writeFile(`${artifactsDir}/page-probe-before-search.json`, JSON.stringify(initialProbe.result?.value || {}, null, 2)); + log("Page probe saved", `${artifactsDir}/page-probe-before-search.json`); + + if (process.env.DEBUG_STATION_OVERLAY === "1") { + const overlayProbe = await cdp.send("Runtime.evaluate", { + expression: stationOverlayDebugScript(0), + awaitPromise: true, + returnByValue: true, + }); + await writeFile( + `${artifactsDir}/station-overlay-debug.json`, + JSON.stringify(overlayProbe.result?.value || {}, null, 2) + ); + log("Station overlay debug", overlayProbe.result?.value); + } + + const popupDismissResult = await cdp.send("Runtime.evaluate", { + expression: dismissMarketingPopupScript, + awaitPromise: true, + returnByValue: true, + }); + log("Marketing popup result", popupDismissResult.result?.value); + + const tripTypeResult = await cdp.send("Runtime.evaluate", { + expression: setOneWayTripScript, + awaitPromise: true, + returnByValue: true, + }); + log("Trip type result", tripTypeResult.result?.value); + + const originResult = await cdp.send("Runtime.evaluate", { + expression: selectStationScript(0, origin), + awaitPromise: true, + returnByValue: true, + }); + log("Origin selection result", originResult.result?.value); + + const destinationResult = await cdp.send("Runtime.evaluate", { + expression: selectStationScript(1, destination), + awaitPromise: true, + returnByValue: true, + }); + log("Destination selection result", destinationResult.result?.value); + + const dateResult = await cdp.send("Runtime.evaluate", { + expression: setDepartDateScript(beginDate), + awaitPromise: true, + returnByValue: true, + }); + log("Depart date result", dateResult); + + const formUpdateResult = await cdp.send("Runtime.evaluate", { + expression: forceAngularFormUpdateScript, + awaitPromise: true, + returnByValue: true, + }); + log("Form update result", formUpdateResult.result?.value); + + const componentSnapshot = await cdp.send("Runtime.evaluate", { + expression: componentSnapshotScript, + awaitPromise: true, + returnByValue: true, + }); + await writeFile( + `${artifactsDir}/component-snapshot-before-search.json`, + JSON.stringify(componentSnapshot.result?.value || {}, null, 2) + ); + log("Component snapshot", componentSnapshot.result?.value); + + const searchResult = await clickButtonByText(cdp, "/^find flights$/i"); + log("Search click result", searchResult); + + if (process.env.DIRECT_AVAILABILITY_PROBE === "1") { + const availabilityProbe = await cdp.send("Runtime.evaluate", { + expression: availabilityProbeScript, + awaitPromise: true, + returnByValue: true, + }); + await writeFile( + `${artifactsDir}/availability-probe.json`, + JSON.stringify(availabilityProbe.result?.value || {}, null, 2) + ); + log("Availability probe", availabilityProbe.result?.value); + } + + await delay(settleMs); + + const finalProbe = await cdp.send("Runtime.evaluate", { + expression: pageProbeScript, + awaitPromise: true, + returnByValue: true, + }); + await writeFile(`${artifactsDir}/page-probe-after-search.json`, JSON.stringify(finalProbe.result?.value || {}, null, 2)); + await writeFile(`${artifactsDir}/network-events.json`, JSON.stringify(requests, null, 2)); + log("Artifacts saved", artifactsDir); + } finally { + if (cdp) { + await cdp.close(); + } + chrome.kill("SIGTERM"); + await delay(500); + await rm(userDataDir, { recursive: true, force: true }); + } +} + +await main(); diff --git a/scripts/jsx_live_monitor.mjs b/scripts/jsx_live_monitor.mjs new file mode 100644 index 0000000..326dc76 --- /dev/null +++ b/scripts/jsx_live_monitor.mjs @@ -0,0 +1,294 @@ +import { spawn } from "node:child_process"; +import { mkdir, rm } from "node:fs/promises"; +import { createWriteStream } from "node:fs"; +import process from "node:process"; +import { setTimeout as delay } from "node:timers/promises"; + +const chromePath = "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome"; +const port = Number(process.env.CDP_PORT || 9230); +const navigationUrl = process.env.JSX_URL || "https://www.jsx.com/"; +const userDataDir = process.env.CHROME_USER_DATA_DIR || `/tmp/jsx-live-monitor-${Date.now()}`; +const artifactsDir = process.env.JSX_ARTIFACTS_DIR || "/tmp/jsx-live-monitor"; +const logPath = `${artifactsDir}/network-events.ndjson`; +const requestTimeoutMs = Number(process.env.REQUEST_TIMEOUT_MS || 30000); + +await mkdir(artifactsDir, { recursive: true }); + +const logStream = createWriteStream(logPath, { flags: "a" }); + +function writeLine(line) { + console.log(line); + logStream.write(`${line}\n`); +} + +function log(message, details) { + if (details === undefined) { + writeLine(`[monitor] ${message}`); + return; + } + writeLine(`[monitor] ${message} ${JSON.stringify(details)}`); +} + +async function fetchJson(url, init = undefined) { + const response = await fetch(url, init); + if (!response.ok) { + throw new Error(`HTTP ${response.status} for ${url}`); + } + return response.json(); +} + +async function waitForDebugger() { + const deadline = Date.now() + requestTimeoutMs; + while (Date.now() < deadline) { + try { + return await fetchJson(`http://127.0.0.1:${port}/json/version`); + } catch { + await delay(250); + } + } + throw new Error("Timed out waiting for Chrome remote debugger"); +} + +async function waitForPageTarget() { + const deadline = Date.now() + requestTimeoutMs; + while (Date.now() < deadline) { + try { + const targets = await fetchJson(`http://127.0.0.1:${port}/json/list`); + const pageTarget = targets.find(target => + target.type === "page" && + typeof target.url === "string" && + target.url.startsWith("http") && + target.webSocketDebuggerUrl + ); + if (pageTarget) { + return pageTarget; + } + } catch { + // Ignore transient startup failures while Chrome is coming up. + } + await delay(250); + } + throw new Error("Timed out waiting for initial Chrome page target"); +} + +function launchChrome() { + const args = [ + `--remote-debugging-port=${port}`, + `--user-data-dir=${userDataDir}`, + "--no-first-run", + "--no-default-browser-check", + "--disable-default-apps", + "--disable-popup-blocking", + "--window-size=1440,1200", + navigationUrl, + ]; + + log("Launching Chrome", { chromePath, port, userDataDir, navigationUrl, logPath }); + + const child = spawn(chromePath, args, { + detached: false, + stdio: ["ignore", "pipe", "pipe"], + }); + + child.stdout.on("data", chunk => { + const text = chunk.toString().trim(); + if (text) { + writeLine(`[chrome] ${text}`); + } + }); + + child.stderr.on("data", chunk => { + const text = chunk.toString().trim(); + if (text) { + writeLine(`[chrome] ${text}`); + } + }); + + return child; +} + +class CDPClient { + constructor(socketUrl) { + this.socketUrl = socketUrl; + this.ws = new WebSocket(socketUrl); + this.nextId = 1; + this.pending = new Map(); + this.eventHandlers = new Map(); + this.openPromise = new Promise((resolve, reject) => { + this.ws.addEventListener("open", () => resolve()); + this.ws.addEventListener("error", event => reject(event.error || new Error("WebSocket open failed"))); + }); + + this.ws.addEventListener("message", event => { + const message = JSON.parse(event.data.toString()); + if (message.id) { + const pending = this.pending.get(message.id); + if (!pending) { + return; + } + this.pending.delete(message.id); + if (message.error) { + pending.reject(new Error(message.error.message || JSON.stringify(message.error))); + } else { + pending.resolve(message.result); + } + return; + } + + const handlers = this.eventHandlers.get(message.method) || []; + for (const handler of handlers) { + handler(message.params || {}); + } + }); + } + + async ready() { + await this.openPromise; + } + + async send(method, params = {}) { + await this.ready(); + const id = this.nextId++; + const payload = JSON.stringify({ id, method, params }); + const promise = new Promise((resolve, reject) => { + this.pending.set(id, { resolve, reject }); + setTimeout(() => { + if (this.pending.has(id)) { + this.pending.delete(id); + reject(new Error(`Timed out waiting for ${method}`)); + } + }, requestTimeoutMs); + }); + + this.ws.send(payload); + return promise; + } + + on(method, handler) { + const handlers = this.eventHandlers.get(method) || []; + handlers.push(handler); + this.eventHandlers.set(method, handlers); + } + + async close() { + if (this.ws.readyState === WebSocket.OPEN || this.ws.readyState === WebSocket.CONNECTING) { + this.ws.close(); + } + } +} + +let shuttingDown = false; + +async function main() { + const chrome = launchChrome(); + let cdp; + + const shutdown = async signal => { + if (shuttingDown) { + return; + } + shuttingDown = true; + log("Shutting down", { signal }); + if (cdp) { + await cdp.close(); + } + chrome.kill("SIGTERM"); + await delay(500); + await rm(userDataDir, { recursive: true, force: true }); + logStream.end(); + process.exit(0); + }; + + process.on("SIGINT", shutdown); + process.on("SIGTERM", shutdown); + + try { + await waitForDebugger(); + const target = await waitForPageTarget(); + cdp = new CDPClient(target.webSocketDebuggerUrl); + await cdp.ready(); + + log("Attached to page target", { id: target.id, url: target.url }); + log("Manual monitor ready", { instructions: "Drive the JSX page in Chrome. All api.jsx.com traffic will stream here." }); + + const responseMetaByRequestId = new Map(); + + cdp.on("Page.frameNavigated", params => { + const url = params.frame?.url; + if (url) { + log("Page navigated", { url }); + } + }); + + cdp.on("Network.requestWillBeSent", params => { + const url = params.request?.url || ""; + if (!url.includes("api.jsx.com")) { + return; + } + const record = { + stage: "request", + type: params.type || "", + method: params.request?.method || "", + url, + postData: params.request?.postData || "", + hasAuthHeader: Boolean(params.request?.headers?.Authorization), + }; + writeLine(JSON.stringify(record)); + }); + + cdp.on("Network.responseReceived", params => { + const url = params.response?.url || ""; + if (!url.includes("api.jsx.com")) { + return; + } + const record = { + stage: "response", + type: params.type || "", + status: params.response?.status || 0, + mimeType: params.response?.mimeType || "", + url, + }; + responseMetaByRequestId.set(params.requestId, record); + writeLine(JSON.stringify(record)); + }); + + cdp.on("Network.loadingFinished", async params => { + const meta = responseMetaByRequestId.get(params.requestId); + if (!meta || !meta.url.includes("api.jsx.com")) { + return; + } + try { + const body = await cdp.send("Network.getResponseBody", { requestId: params.requestId }); + writeLine(JSON.stringify({ + stage: "body", + status: meta.status, + url: meta.url, + bodySnippet: (body.body || "").slice(0, 4000), + base64Encoded: Boolean(body.base64Encoded), + })); + } catch (error) { + writeLine(JSON.stringify({ + stage: "body-error", + url: meta.url, + error: error.message, + })); + } + }); + + await cdp.send("Page.enable"); + await cdp.send("Runtime.enable"); + await cdp.send("Network.enable", { + maxTotalBufferSize: 100_000_000, + maxResourceBufferSize: 10_000_000, + maxPostDataSize: 1_000_000, + }); + await cdp.send("Network.setCacheDisabled", { cacheDisabled: true }); + + await new Promise(() => {}); + } catch (error) { + log("Monitor failed", { error: error.message }); + await shutdown("error"); + } +} + +await main(); diff --git a/scripts/jsx_swift_smoke.swift b/scripts/jsx_swift_smoke.swift new file mode 100644 index 0000000..79c9287 --- /dev/null +++ b/scripts/jsx_swift_smoke.swift @@ -0,0 +1,219 @@ +import AppKit +import Darwin +import Foundation +import WebKit + +private func logSmoke(_ message: String) { + fputs("[JSX-SMOKE] \(message)\n", stderr) + fflush(stderr) +} + +final class JSXSwiftSmokeApp: NSObject { + private let origin: String + private let destination: String + private let date: String + private let useService: Bool + private let flightNumber: String + private let departureTime: String? + + var exitCode: Int32 = 1 + + init( + origin: String, + destination: String, + date: String, + useService: Bool, + flightNumber: String, + departureTime: String? + ) { + self.origin = origin + self.destination = destination + self.date = date + self.useService = useService + self.flightNumber = flightNumber + self.departureTime = departureTime + } + + private func parsedDate() -> Date? { + let formatter = DateFormatter() + formatter.locale = Locale(identifier: "en_US_POSIX") + formatter.timeZone = TimeZone(secondsFromGMT: 0) + formatter.dateFormat = "yyyy-MM-dd" + return formatter.date(from: date) + } + + private func writeSummary(_ summary: [String: Any]) { + if JSONSerialization.isValidJSONObject(summary), + let data = try? JSONSerialization.data(withJSONObject: summary, options: [.prettyPrinted, .sortedKeys]), + let text = String(data: data, encoding: .utf8) { + print(text) + } else { + print("Failed to encode summary") + } + } + + @MainActor + private func runFetcherMode() async { + logSmoke("starting fetcher \(origin)->\(destination) on \(date)") + let fetcher = JSXWebViewFetcher() + let result = await fetcher.fetchAvailability( + origin: origin, + destination: destination, + date: date + ) + logSmoke("fetcher returned") + + let flights = result.flights.map { flight in + [ + "flightNumber": flight.flightNumber, + "origin": flight.origin, + "destination": flight.destination, + "departureLocal": flight.departureLocal, + "arrivalLocal": flight.arrivalLocal, + "stops": flight.stops, + "equipmentType": flight.equipmentType ?? "", + "totalAvailable": flight.totalAvailable, + "lowestFareTotal": flight.lowestFareTotal ?? NSNull(), + "classes": flight.classes.map { fareClass in + [ + "classOfService": fareClass.classOfService, + "productClass": fareClass.productClass, + "availableCount": fareClass.availableCount, + "fareTotal": fareClass.fareTotal, + "revenueTotal": fareClass.revenueTotal, + "fareBasisCode": fareClass.fareBasisCode ?? NSNull() + ] + } + ] as [String: Any] + } + + var summary: [String: Any] = [ + "mode": "fetcher", + "origin": origin, + "destination": destination, + "date": date, + "flightCount": result.flights.count, + "rawSearchBodyLength": result.rawSearchBody?.count ?? 0, + "error": result.error ?? NSNull(), + "flights": flights + ] + + if let lowFare = result.lowFareFallback { + summary["lowFareFallback"] = [ + "date": lowFare.date, + "available": lowFare.available, + "lowestPrice": lowFare.lowestPrice as Any? ?? NSNull() + ] + } + + writeSummary(summary) + + // Verification requires true per-flight data, not only the route-level fallback. + exitCode = (result.error == nil && !result.flights.isEmpty) ? 0 : 1 + } + + @MainActor + private func runServiceMode() async { + logSmoke("starting service \(flightNumber) \(origin)->\(destination) on \(date)" + + (departureTime.map { " @ \($0)" } ?? "")) + guard let queryDate = parsedDate() else { + writeSummary([ + "mode": "service", + "error": "invalid date \(date)" + ]) + exitCode = 1 + return + } + + let service = AirlineLoadService() + let result = await service.fetchLoad( + airlineCode: "XE", + flightNumber: flightNumber, + date: queryDate, + origin: origin, + destination: destination, + departureTime: departureTime + ) + logSmoke("service returned") + + let cabins = result?.cabins.map { cabin in + [ + "name": cabin.name, + "capacity": cabin.capacity, + "booked": cabin.booked, + "available": cabin.available, + "revenueStandby": cabin.revenueStandby, + "nonRevStandby": cabin.nonRevStandby, + "waitListCount": cabin.waitListCount, + "jumpSeat": cabin.jumpSeat + ] + } ?? [] + + let summary: [String: Any] = [ + "mode": "service", + "queryFlightNumber": flightNumber, + "queryDepartureTime": departureTime ?? NSNull(), + "origin": origin, + "destination": destination, + "date": date, + "result": result.map { load in + [ + "airlineCode": load.airlineCode, + "flightNumber": load.flightNumber, + "totalAvailable": load.totalAvailable, + "totalCapacity": load.totalCapacity, + "cabins": cabins + ] as [String: Any] + } ?? NSNull() + ] + + writeSummary(summary) + + let isPerFlightCabin = cabins.contains { ($0["name"] as? String) == "Cabin" } + exitCode = (result != nil && isPerFlightCabin) ? 0 : 1 + } + + @MainActor + func start() async { + if useService { + await runServiceMode() + } else { + await runFetcherMode() + } + NSApp.terminate(nil) + } +} + +@main +struct JSXSwiftSmokeMain { + static func main() { + let env = ProcessInfo.processInfo.environment + let origin = (env["JSX_ORIGIN"] ?? "DAL").uppercased() + let destination = (env["JSX_DESTINATION"] ?? "HOU").uppercased() + let date = env["JSX_DATE"] ?? "2026-04-15" + let useService = env["JSX_USE_SERVICE"] == "1" + let flightNumber = env["JSX_FLIGHT_NUMBER"] ?? "XE280" + let departureTime = env["JSX_DEPARTURE_TIME"] + + let app = NSApplication.shared + let delegate = JSXSwiftSmokeApp( + origin: origin, + destination: destination, + date: date, + useService: useService, + flightNumber: flightNumber, + departureTime: departureTime + ) + logSmoke("booting app") + app.setActivationPolicy(.prohibited) + Timer.scheduledTimer(withTimeInterval: 120, repeats: false) { _ in + logSmoke("timeout after 120s") + NSApp.terminate(nil) + } + Task { @MainActor in + await delegate.start() + } + app.run() + exit(delegate.exitCode) + } +}