@salesforce/lds-runtime-aura 1.435.0 → 1.436.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -41,8 +41,10 @@ import lightningConnectEnabled from '@salesforce/gate/ui.services.LightningConne
41
41
  import bypassAppRestrictionEnabled from '@salesforce/gate/ui.services.LightningConnect.BypassAppRestriction.enabled';
42
42
  import csrfValidationEnabled from '@salesforce/gate/ui.services.LightningConnect.CsrfValidation.enabled';
43
43
  import sessionApiEnabled from '@salesforce/gate/ui.uisdk.session.api.enabled';
44
- import useHttpUiapiOneApp from '@salesforce/gate/lds.useHttpUiapiOneApp';
45
- import useHttpUiapiOneRuntime from '@salesforce/gate/lds.useHttpUiapiOneRuntime';
44
+ import useHttpUiapiOneAppPublic from '@salesforce/gate/lds.useHttpUiapiOneAppPublic';
45
+ import useHttpUiapiOneAppPrivate from '@salesforce/gate/lds.useHttpUiapiOneAppPrivate';
46
+ import useHttpUiapiOneRuntimePublic from '@salesforce/gate/lds.useHttpUiapiOneRuntimePublic';
47
+ import useHttpUiapiOneRuntimePrivate from '@salesforce/gate/lds.useHttpUiapiOneRuntimePrivate';
46
48
  import disableCreateContentDocumentAndVersionHTTPLexRuntime from '@salesforce/gate/lds.lex.http.disableCreateContentDocumentAndVersion';
47
49
  import useHotspotLimit from '@salesforce/gate/lds.pdl.useHotspotLimit';
48
50
  import { registerSubRequestNetworkAdapter } from 'force/ldsNetwork';
@@ -2760,7 +2762,7 @@ function buildServiceDescriptor$d(luvio) {
2760
2762
  },
2761
2763
  };
2762
2764
  }
2763
- // version: 1.435.0-5818ce3c48
2765
+ // version: 1.436.0-581b8a5964
2764
2766
 
2765
2767
  /*!
2766
2768
  * Copyright (c) 2022, Salesforce, Inc.,
@@ -3113,7 +3115,7 @@ function buildServiceDescriptor$9(notifyRecordUpdateAvailable, getNormalizedLuvi
3113
3115
  },
3114
3116
  };
3115
3117
  }
3116
- // version: 1.435.0-5818ce3c48
3118
+ // version: 1.436.0-581b8a5964
3117
3119
 
3118
3120
  /*!
3119
3121
  * Copyright (c) 2022, Salesforce, Inc.,
@@ -5743,7 +5745,7 @@ function getEnvironmentSetting(name) {
5743
5745
  }
5744
5746
  return undefined;
5745
5747
  }
5746
- // version: 1.435.0-615ebb9bbd
5748
+ // version: 1.436.0-7cd4295391
5747
5749
 
5748
5750
  const environmentHasAura = typeof window !== 'undefined' && typeof window.$A !== 'undefined';
5749
5751
  const defaultConfig = {
@@ -6738,31 +6740,187 @@ function isOneRuntime() {
6738
6740
  return !!globalThis.LWR;
6739
6741
  }
6740
6742
  /**
6741
- * Base set of url paths that this adapter can serve via HTTP when enabled.
6742
- * Extend this list to support additional endpoints (see predicate wiring below).
6743
+ * Public UIAPI url paths verified for HTTP transport.
6743
6744
  *
6744
- * Examples:
6745
- * - Add another endpoint pattern:
6746
- * "/ui-api/records/{recordId}"
6747
- * - Keep placeholders for variable segments wrapped in "{}".
6745
+ * Inclusion criteria:
6746
+ * 1. The path's underlying Connect resource does NOT carry
6747
+ * `clientFilters=@ConnectClientFilters({@ConnectClientFilter(key = "UiTier")...})`.
6748
+ * 2. LDS actually invokes this URL via a Luvio adapter wired into
6749
+ * `ldsEngineCreator.js` (i.e. there is a corresponding `*AdapterFactory`
6750
+ * import). Connect resources with no LDS adapter are intentionally
6751
+ * excluded — adding them produces no traffic and just bloats the matcher.
6752
+ *
6753
+ * Where a single Connect resource exposes multiple URL shapes (e.g. a 4-segment
6754
+ * GET form alongside a 3-segment POST form), all forms LDS adapters can hit at
6755
+ * runtime are registered.
6748
6756
  */
6749
- const UIAPI_PATHS = [
6750
- // getObjectInfo
6757
+ const UIAPI_PUBLIC_PATHS = [
6758
+ // ----- Object Info -----
6759
+ // getObjectInfo — IObjectInfoResource
6751
6760
  '/ui-api/object-info/{objectApiName}',
6752
- // getObjectInfos
6761
+ // getObjectInfos (batch) — IObjectInfoBatchResource
6753
6762
  '/ui-api/object-info/batch/{objectApiNames}',
6754
- // getPicklistValuesByRecordType
6763
+ // getPicklistValues — IPicklistValuesResource
6764
+ '/ui-api/object-info/{objectApiName}/picklist-values/{recordTypeId}/{fieldApiName}',
6765
+ // getPicklistValuesByRecordType — IPicklistValuesByRecordTypeResource
6755
6766
  '/ui-api/object-info/{objectApiName}/picklist-values/{recordTypeId}',
6756
- // getDuplicates
6757
- '/ui-api/predupe',
6758
- // getRecord
6767
+ // ----- Records -----
6768
+ // createRecord (POST) — IRecordDataCollectionResource
6769
+ '/ui-api/records',
6770
+ // getRecord / updateRecord (PATCH) / deleteRecord (DELETE) — IRecordDataResource
6759
6771
  '/ui-api/records/{recordId}',
6760
- // getRecordUi
6772
+ // getRecords (batch GET) — IBatchRecordDataResource
6773
+ '/ui-api/records/batch/{recordIds}',
6774
+ // executeBatchRecordOperations (POST, no recordIds segment) — IBatchRecordResource
6775
+ '/ui-api/records/batch',
6776
+ // getRecordUi — IRecordUiResource
6761
6777
  '/ui-api/record-ui/{recordIds}',
6762
- // getRelatedListInfo
6778
+ // ----- Layout -----
6779
+ // getLayout — ILayoutResource
6780
+ '/ui-api/layout/{objectApiName}',
6781
+ // getPathLayout — IPathLayoutResource
6782
+ '/ui-api/path/layout/{objectApiName}',
6783
+ // ----- Record Defaults -----
6784
+ // getRecordCreateDefaults — IRecordCreateDefaultsResource
6785
+ '/ui-api/record-defaults/create/{objectApiName}',
6786
+ // getRecordDefaultsTemplateForCreate — IRecordDefaultsTemplateCreateResource
6787
+ '/ui-api/record-defaults/template/create/{objectApiName}',
6788
+ // getRecordDefaultsTemplateClone — IRecordDefaultsTemplateCloneResource
6789
+ '/ui-api/record-defaults/template/clone/{recordId}',
6790
+ // ----- Duplicates -----
6791
+ // getDuplicateConfig — IDuplicateConfigResource
6792
+ '/ui-api/duplicates/{objectApiName}',
6793
+ // findDuplicates (POST) — IPredupeResource
6794
+ '/ui-api/predupe',
6795
+ // ----- GraphQL -----
6796
+ // executeGraphQL (POST) — IGraphQLResource (no /ui-api prefix)
6797
+ '/graphql',
6798
+ // ----- List UI -----
6799
+ // getListUiByName (2-segment form) — IListUiResource212
6800
+ '/ui-api/list-ui/{objectApiName}/{listViewApiName}',
6801
+ // 1-segment form covers both:
6802
+ // /ui-api/list-ui/{listViewId} — IListUiResource
6803
+ // /ui-api/list-ui/{objectApiName} — IListCollectionResource
6804
+ '/ui-api/list-ui/{objectApiNameOrListViewId}',
6805
+ // getListInfoByName (GET) / updateListInfoByApiName (PATCH) / deleteListInfo (DELETE) — IListInfoResource
6806
+ // (Also covers /ui-api/list-info/{listViewId} via shape collision.)
6807
+ '/ui-api/list-info/{objectApiName}/{listViewApiName}',
6808
+ // getListInfosByObjectName (GET) / createListInfo (POST) — IListInfoCreationAndCollectionResource
6809
+ // (Also covers /ui-api/list-info/batch — IListInfoBatchResource — via shape collision.)
6810
+ '/ui-api/list-info/{objectApiName}',
6811
+ // getListObjectInfo — IListObjectInfoResource
6812
+ '/ui-api/list-object-info/{objectApiName}',
6813
+ // postListRecordsByName (POST) — IListRecordsResource
6814
+ '/ui-api/list-records/{objectApiName}/{listViewApiName}',
6815
+ // getListPreferences (GET) / updateListPreferences (PATCH) — IListPreferencesResource
6816
+ '/ui-api/list-preferences/{objectApiName}/{listViewApiName}',
6817
+ // ----- Related List UI -----
6818
+ // getRelatedListInfo (GET) / updateRelatedListInfo (PATCH) — IRelatedListInfoResource
6819
+ // (Also covers /ui-api/related-list-info/{parentRecordId}/{relatedListId} via shape collision.)
6763
6820
  '/ui-api/related-list-info/{parentObjectApiName}/{relatedListId}',
6764
- // getRelatedListRecords
6821
+ // getRelatedListInfoBatch — IRelatedListInfoBatchResource
6822
+ '/ui-api/related-list-info/batch/{parentObjectApiName}/{relatedListNames}',
6823
+ // getRelatedListsInfo (collection) — IRelatedListInfoCollectionResource
6824
+ '/ui-api/related-list-info/{parentObjectApiName}',
6825
+ // postRelatedListRecords (POST) — IRelatedListRecordsResource
6765
6826
  '/ui-api/related-list-records/{parentRecordId}/{relatedListId}',
6827
+ // postRelatedListRecordsBatch (POST, 3-segment form) — IRelatedListRecordsBatchResource
6828
+ '/ui-api/related-list-records/batch/{parentRecordId}',
6829
+ // getRelatedListRecordsBatch (GET, 4-segment form) — IRelatedListRecordsBatchResource [newly added]
6830
+ '/ui-api/related-list-records/batch/{parentRecordId}/{relatedListIds}',
6831
+ // getRelatedListCount — IRelatedListRecordCountResource
6832
+ '/ui-api/related-list-count/{parentRecordId}/{relatedListId}',
6833
+ // getRelatedListsCount (batch) — IRelatedListRecordCountBatchResource
6834
+ '/ui-api/related-list-count/batch/{parentRecordId}/{relatedListNames}',
6835
+ // getRelatedListPreferences (GET) / updateRelatedListPreferences (PATCH) — IRelatedListPreferencesResource
6836
+ '/ui-api/related-list-preferences/{preferencesId}',
6837
+ // getRelatedListPreferencesBatch — IRelatedListPreferencesBatchResource
6838
+ '/ui-api/related-list-preferences/batch/{preferencesIds}',
6839
+ // ----- Actions -----
6840
+ // getGlobalActions — IActionGlobalResource
6841
+ '/ui-api/actions/global',
6842
+ // getActionLayout — IActionLayoutResource
6843
+ '/ui-api/actions/layout/{actionApiName}',
6844
+ // getLookupActions — IActionLookupResource
6845
+ '/ui-api/actions/lookup/{objectApiNames}',
6846
+ // getObjectCreateActions — IActionObjectResource
6847
+ '/ui-api/actions/object/{objectApiName}/record-create',
6848
+ // getActionOverrides — IActionOverrideResource
6849
+ '/ui-api/actions/overrides/{objectApiName}',
6850
+ // performQuickAction (POST) / performUpdateRecordQuickAction (PATCH) — IActionPerformQuickActionResource
6851
+ '/ui-api/actions/perform-quick-action/{actionApiName}',
6852
+ // getQuickActionInfo — IActionQuickActionInfoResource
6853
+ '/ui-api/actions/quick-action-info/{actionApiName}',
6854
+ // getRecordActions — IActionRecordResource
6855
+ '/ui-api/actions/record/{recordIds}',
6856
+ // getRecordEditActions — IActionRecordEditResource
6857
+ '/ui-api/actions/record/{recordIds}/record-edit',
6858
+ // getAllRelatedListActionsForRecord (4-segment form) — IActionRelatedListResource [newly added]
6859
+ '/ui-api/actions/record/{recordIds}/related-list',
6860
+ // postRelatedListActions (POST) — IActionRelatedListResource
6861
+ '/ui-api/actions/record/{recordIds}/related-list/{relatedListId}',
6862
+ // postRelatedListsActions (POST) / getRelatedListsActions (GET, 5-segment form) — IActionRelatedListBatchResource
6863
+ '/ui-api/actions/record/{recordIds}/related-list/batch',
6864
+ // getRelatedListsActions (GET, 6-segment form) — IActionRelatedListBatchResource [newly added]
6865
+ '/ui-api/actions/record/{recordIds}/related-list/batch/{relatedListIds}',
6866
+ // getRelatedListRecordActions — IActionRelatedListRecordResource
6867
+ '/ui-api/actions/record/{recordIds}/related-list-record/{relatedListRecordIds}',
6868
+ // getQuickActionDefaults — IActionQuickActionDefaultsResource
6869
+ '/ui-api/actions/record-defaults/{actionApiName}',
6870
+ // getFlexipageFormulaOverrides — IActionFlexipageFormulaActivationResource
6871
+ '/ui-api/actions/formula-activation/{actionFeature}',
6872
+ // ----- Lookup / Search -----
6873
+ // lookup (POST) — ILookupEntityResource
6874
+ '/ui-api/lookups/{objectApiName}/{keyPrefix}/{targetApiName}',
6875
+ // searchResults (POST) — ISearchResultsResource
6876
+ '/ui-api/search/results',
6877
+ // searchKeywordResults (POST) — IKeywordSearchResultsResource
6878
+ '/ui-api/search/results/keyword',
6879
+ // getSearchFilterMetadata — ISearchInfoFilterMetadataCollectionResource
6880
+ '/ui-api/search-info/{objectApiName}/filters',
6881
+ // getSearchFilterOptions — ISearchInfoFilterOptionsResource
6882
+ '/ui-api/search-info/{objectApiName}/filters/{filterApiName}/options',
6883
+ // getLookupMetadata — ILookupMetadataResource
6884
+ '/ui-api/search-info/{objectApiName}/lookup/{fieldApiName}',
6885
+ // ----- MRU Lists -----
6886
+ // getMruListUi — IMruListUiResource
6887
+ '/ui-api/mru-list-ui/{objectApiName}',
6888
+ // getMruListRecords — IMruListRecordsResource
6889
+ '/ui-api/mru-list-records/{objectApiName}',
6890
+ // ----- Apps / Nav -----
6891
+ // getNavItems — INavItemsResource
6892
+ '/ui-api/nav-items',
6893
+ // getAllApps — IAppsResource
6894
+ '/ui-api/apps',
6895
+ // getAppDetails — IAppResource
6896
+ '/ui-api/apps/{appId}',
6897
+ ];
6898
+ /**
6899
+ * Private UIAPI url paths gated by the private-endpoint gates per runtime.
6900
+ *
6901
+ * Inclusion criteria:
6902
+ * 1. The path's underlying Connect resource carries
6903
+ * `clientFilters=@ConnectClientFilters({@ConnectClientFilter(key = "UiTier")...})`,
6904
+ * which restricts callers to the UI tier (one.app / UISDK runtime) and
6905
+ * excludes the public REST API.
6906
+ * 2. LDS actually invokes this URL via a Luvio adapter wired into
6907
+ * `ldsEngineCreator.js`.
6908
+ */
6909
+ const UIAPI_PRIVATE_PATHS = [
6910
+ // ----- Record Avatars -----
6911
+ // getRecordAvatars (batch) — IRecordAvatarsBatchResource
6912
+ '/ui-api/record-avatars/batch/{recordIds}',
6913
+ // updateRecordAvatar (POST) — IRecordAvatarsAssociationResource
6914
+ '/ui-api/record-avatars/{recordId}/association',
6915
+ // ----- Layout -----
6916
+ // getLayoutUserState (GET) / updateLayoutUserState (PATCH) — ILayoutUserStateResource
6917
+ '/ui-api/layout/{objectApiName}/user-state',
6918
+ // ----- GraphQL -----
6919
+ // executeGraphQLBatch (POST) — IGraphQLBatchResource (no /ui-api prefix)
6920
+ '/graphql/batch',
6921
+ // ----- Aggregate UI -----
6922
+ // executeAggregateUi (POST) — IAggregateUiResource
6923
+ '/ui-api/aggregate-ui',
6766
6924
  ];
6767
6925
  /**
6768
6926
  * Single content documents version URL enabled/disabled by killswitch.
@@ -6784,15 +6942,25 @@ const CONTENT_DOCUMENTS_VERSIONS_PATH = '/ui-api/records/content-documents/conte
6784
6942
  * }
6785
6943
  */
6786
6944
  const PREDICATE_PATH_SETS = [
6787
- // One Runtime gate
6945
+ // One Runtime — public UIAPI endpoints
6946
+ {
6947
+ predicate: () => isOneRuntime() && useHttpUiapiOneRuntimePublic.isOpen({ fallback: false }),
6948
+ paths: UIAPI_PUBLIC_PATHS,
6949
+ },
6950
+ // One Runtime — private UIAPI endpoints
6951
+ {
6952
+ predicate: () => isOneRuntime() && useHttpUiapiOneRuntimePrivate.isOpen({ fallback: false }),
6953
+ paths: UIAPI_PRIVATE_PATHS,
6954
+ },
6955
+ // one.app — public UIAPI endpoints
6788
6956
  {
6789
- predicate: () => isOneRuntime() && useHttpUiapiOneRuntime.isOpen({ fallback: false }),
6790
- paths: UIAPI_PATHS,
6957
+ predicate: () => !isOneRuntime() && useHttpUiapiOneAppPublic.isOpen({ fallback: false }),
6958
+ paths: UIAPI_PUBLIC_PATHS,
6791
6959
  },
6792
- // one.app gate
6960
+ // one.app — private UIAPI endpoints
6793
6961
  {
6794
- predicate: () => !isOneRuntime() && useHttpUiapiOneApp.isOpen({ fallback: false }),
6795
- paths: UIAPI_PATHS,
6962
+ predicate: () => !isOneRuntime() && useHttpUiapiOneAppPrivate.isOpen({ fallback: false }),
6963
+ paths: UIAPI_PRIVATE_PATHS,
6796
6964
  },
6797
6965
  // disableCreateContentDocumentAndVersionHTTPLexRuntime killswitch
6798
6966
  {
@@ -10585,4 +10753,4 @@ function ldsEngineCreator() {
10585
10753
  }
10586
10754
 
10587
10755
  export { LexRequestStrategy, PdlPrefetcherEventType, PdlRequestPriority, buildPredictorForContext, configService, ldsEngineCreator as default, initializeLDS, initializeOneStore, notifyUpdateAvailableFactory, registerRequestStrategy, saveRequestAsPrediction, subscribeToPrefetcherEvents, unregisterRequestStrategy, whenPredictionsReady };
10588
- // version: 1.435.0-5818ce3c48
10756
+ // version: 1.436.0-581b8a5964
@@ -2,15 +2,33 @@ import { type ResourceRequest } from '@luvio/engine';
2
2
  import type { RequestLogger } from '@salesforce/lds-network-fetch';
3
3
  import type { RequestTracker } from './instrumentation-utils';
4
4
  /**
5
- * Base set of url paths that this adapter can serve via HTTP when enabled.
6
- * Extend this list to support additional endpoints (see predicate wiring below).
5
+ * Public UIAPI url paths verified for HTTP transport.
7
6
  *
8
- * Examples:
9
- * - Add another endpoint pattern:
10
- * "/ui-api/records/{recordId}"
11
- * - Keep placeholders for variable segments wrapped in "{}".
7
+ * Inclusion criteria:
8
+ * 1. The path's underlying Connect resource does NOT carry
9
+ * `clientFilters=@ConnectClientFilters({@ConnectClientFilter(key = "UiTier")...})`.
10
+ * 2. LDS actually invokes this URL via a Luvio adapter wired into
11
+ * `ldsEngineCreator.js` (i.e. there is a corresponding `*AdapterFactory`
12
+ * import). Connect resources with no LDS adapter are intentionally
13
+ * excluded — adding them produces no traffic and just bloats the matcher.
14
+ *
15
+ * Where a single Connect resource exposes multiple URL shapes (e.g. a 4-segment
16
+ * GET form alongside a 3-segment POST form), all forms LDS adapters can hit at
17
+ * runtime are registered.
18
+ */
19
+ export declare const UIAPI_PUBLIC_PATHS: string[];
20
+ /**
21
+ * Private UIAPI url paths gated by the private-endpoint gates per runtime.
22
+ *
23
+ * Inclusion criteria:
24
+ * 1. The path's underlying Connect resource carries
25
+ * `clientFilters=@ConnectClientFilters({@ConnectClientFilter(key = "UiTier")...})`,
26
+ * which restricts callers to the UI tier (one.app / UISDK runtime) and
27
+ * excludes the public REST API.
28
+ * 2. LDS actually invokes this URL via a Luvio adapter wired into
29
+ * `ldsEngineCreator.js`.
12
30
  */
13
- export declare const UIAPI_PATHS: string[];
31
+ export declare const UIAPI_PRIVATE_PATHS: string[];
14
32
  /**
15
33
  * Single content documents version URL enabled/disabled by killswitch.
16
34
  * Exported for reuse in tests.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@salesforce/lds-runtime-aura",
3
- "version": "1.435.0",
3
+ "version": "1.436.0",
4
4
  "license": "SEE LICENSE IN LICENSE.txt",
5
5
  "description": "LDS engine for Aura runtime",
6
6
  "main": "dist/ldsEngineCreator.js",
@@ -36,15 +36,15 @@
36
36
  "devDependencies": {
37
37
  "@conduit-client/service-provisioner": "3.19.5",
38
38
  "@conduit-client/tools-core": "3.19.5",
39
- "@salesforce/lds-adapters-apex": "^1.435.0",
40
- "@salesforce/lds-adapters-uiapi": "^1.435.0",
41
- "@salesforce/lds-ads-bridge": "^1.435.0",
42
- "@salesforce/lds-aura-storage": "^1.435.0",
43
- "@salesforce/lds-bindings": "^1.435.0",
44
- "@salesforce/lds-instrumentation": "^1.435.0",
45
- "@salesforce/lds-network-adapter": "^1.435.0",
46
- "@salesforce/lds-network-aura": "^1.435.0",
47
- "@salesforce/lds-network-fetch": "^1.435.0",
39
+ "@salesforce/lds-adapters-apex": "^1.436.0",
40
+ "@salesforce/lds-adapters-uiapi": "^1.436.0",
41
+ "@salesforce/lds-ads-bridge": "^1.436.0",
42
+ "@salesforce/lds-aura-storage": "^1.436.0",
43
+ "@salesforce/lds-bindings": "^1.436.0",
44
+ "@salesforce/lds-instrumentation": "^1.436.0",
45
+ "@salesforce/lds-network-adapter": "^1.436.0",
46
+ "@salesforce/lds-network-aura": "^1.436.0",
47
+ "@salesforce/lds-network-fetch": "^1.436.0",
48
48
  "jwt-encode": "1.0.1"
49
49
  },
50
50
  "dependencies": {
@@ -75,17 +75,17 @@
75
75
  "@luvio/network-adapter-composable": "0.160.4",
76
76
  "@luvio/network-adapter-fetch": "0.160.4",
77
77
  "@lwc/state": "^0.29.0",
78
- "@salesforce/lds-adapters-onestore-graphql": "^1.435.0",
78
+ "@salesforce/lds-adapters-onestore-graphql": "^1.436.0",
79
79
  "@salesforce/lds-adapters-uiapi-lex": "^1.415.0",
80
- "@salesforce/lds-durable-storage": "^1.435.0",
81
- "@salesforce/lds-luvio-service": "^1.435.0",
82
- "@salesforce/lds-luvio-uiapi-records-service": "^1.435.0"
80
+ "@salesforce/lds-durable-storage": "^1.436.0",
81
+ "@salesforce/lds-luvio-service": "^1.436.0",
82
+ "@salesforce/lds-luvio-uiapi-records-service": "^1.436.0"
83
83
  },
84
84
  "luvioBundlesize": [
85
85
  {
86
86
  "path": "./dist/ldsEngineCreator.js",
87
87
  "maxSize": {
88
- "none": "370 kB",
88
+ "none": "376 kB",
89
89
  "min": "190 kB",
90
90
  "compressed": "61.9 kB"
91
91
  }