Bereitstellungsprotokolle in Azure Active Directory
Azure Active Directory (Azure AD) lässt sich in verschiedene Drittanbieterdienste integrieren, um Benutzer*innen in Ihrem Mandanten bereitzustellen. Wenn Sie ein Problem mit bereitgestellten Benutzer*innen beheben müssen, können Sie die in den Azure AD-Bereitstellungsprotokollen erfassten Informationen verwenden, um eine Lösung zu finden.
Es gibt noch zwei weitere Aktivitätsprotokolle, mit denen Sie die Integrität Ihres Mandanten überwachen können:
- Anmeldungen : Informationen zu Anmeldungen und zur Verwendung Ihrer Ressourcen durch Ihre Benutzer.
- Überwachung : Informationen zu Änderungen, die auf Ihren Mandanten angewendet wurden, z. B. Benutzer- und Gruppenverwaltung oder Updates, die auf die Ressourcen Ihres Mandanten angewendet wurden.
In diesem Artikel erhalten Sie einen Überblick über die Bereitstellungsprotokolle.
Verwendungsmöglichkeiten
Mithilfe der Bereitstellungsprotokolle können Fragen wie die folgenden beantworten:
Welche Gruppen wurden erfolgreich in ServiceNow erstellt?
Welche Benutzer wurden erfolgreich aus Adobe entfernt?
Welche Benutzer aus Workday wurden in Active Directory erfolgreich erstellt?
Wie greifen Sie auf die Bereitstellungsprotokolle zu?
Um den Bereitstellungsaktivitätsbericht anzuzeigen, muss Ihrem Mandanten eine Azure AD Premium-Lizenz zugeordnet sein. Informationen zum Upgraden Ihrer Azure AD-Edition finden Sie unter Registrieren für Azure Active Directory Premium-Editionen.
Anwendungsbesitzer können Protokolle für ihre eigenen Anwendungen anzeigen. Zum Anzeigen von Bereitstellungsprotokollen werden die folgenden Rollen benötigt:
- Meldet Reader
- Sicherheitsleseberechtigter
- Sicherheitsoperator
- Sicherheitsadministrator
- Anwendungsadministrator
- Cloudanwendungsadministrator
- Globaler Administrator
- Benutzer in einer benutzerdefinierten Rolle mit der Berechtigung provisioningLogs
Für den Zugriff auf die Bereitstellungsprotokolldaten haben Sie die folgenden Möglichkeiten:
Wählen Sie in Azure AD im Abschnitt Überwachung die Option Bereitstellungsprotokolle aus.
Streamen Sie die Bereitstellungsprotokolle an Azure Monitor. Diese Methode ermöglicht eine längere Datenaufbewahrung sowie die Erstellung benutzerdefinierter Dashboards, Warnungen und Abfragen.
Fragen Sie die Microsoft Graph-API ab, um die Bereitstellungsprotokolle zu erhalten.
Laden Sie die Bereitstellungsprotokolle als CSV- oder JSON-Datei herunter.
Anzeigen der Bereitstellungsprotokolle
Um das Bereitstellungsprotokoll effektiver anzuzeigen, nehmen Sie sich einen Moment Zeit, um die Ansicht an Ihre Anforderungen anzupassen. Sie können angeben, welche Spalten eingeschlossen werden sollen, und die Daten filtern, um die Ansicht einzugrenzen.
Anpassen des Layouts
Das Bereitstellungsprotokoll verfügt über eine Standardansicht, aber Sie können die Spalten anpassen.
- Wählen Sie im Menü oben im Protokoll die Option Spalten aus.
- Wählen Sie die Spalten aus, die Sie anzeigen möchten, und wählen Sie dann unten im Fenster die Schaltfläche Speichern aus.
In diesem Bereich können Sie weitere Felder anzeigen oder bereits angezeigte Felder entfernen.
Filtern der Ergebnisse
Wenn Sie Ihre Bereitstellungsdaten filtern, werden einige Filterwerte basierend auf Ihrem Mandanten dynamisch aufgefüllt. Wenn zum Beispiel keine Erstellungsereignisse in Ihrem Mandanten vorhanden sind, gibt es auch keine Filteroption Erstellen.
Mit dem Filter Identität können Sie den Namen oder die Identität angeben, der bzw. die für Sie relevant ist. Diese Identität kann ein Benutzer, eine Gruppe, eine Rolle oder ein anderes Objekt sein.
Sie können nach dem Namen oder der ID des Objekts suchen. Die ID variiert je nach Szenario.
- Wenn Sie Objekte aus Azure AD in Salesforce bereitstellen, ist die Quell-ID die Objekt-ID der Benutzer*innen in Azure AD. Die Ziel-ID entspricht der ID der Benutzer*innen in Salesforce.
- Wenn Sie Objekte aus Workday in Azure AD bereitstellen, ist die Quell-ID die Mitarbeiter-ID der Workday-Mitarbeiter*innen. Die Ziel-ID ist die ID der Benutzer*innen in Azure AD.
- Wenn Sie Benutzer für die mandantenübergreifende Synchronisierung bereitstellen, entspricht die Quell-ID der ID des Benutzers im Quellmandanten. Die Ziel-ID ist die ID des Benutzers im Zielmandanten.
Hinweis
Der Name des Benutzers ist möglicherweise nicht immer in der Spalte Identität enthalten. Es gibt jedoch immer eine ID.
Mit dem Filter Datum können Sie einen Zeitrahmen für die zurückgegebenen Daten festlegen. Mögliche Werte:
- Einen Monat
- Sieben Tage
- 30 Tage
- 24 Stunden
- Benutzerdefiniertes Zeitintervall (Konfigurieren eines Start- und Enddatums)
Für den Filter Zustand können Sie eine der folgenden Optionen auswählen:
- All
- Erfolg
- Fehler
- Ausgelassen
Mit dem Filter Aktion können folgende Aktionen gefiltert werden:
- Erstellen
- Aktualisieren
- Löschen
- Disable
- Andere
Neben den Filtern in der Standardansicht können auch folgende Filter festgelegt werden:
Auftrags-ID: Jeder Anwendung, für die Sie die Bereitstellung aktiviert haben, ist eine eindeutige Auftrags-ID zugeordnet.
Zyklus-ID: Durch die Zyklus-ID wird der Bereitstellungszyklus eindeutig identifiziert. Anhand dieser ID kann der Produktsupport bei Bedarf nach dem Zyklus suchen, in dem das Ereignis aufgetreten ist.
Änderungs-ID: Die Änderungs-ID ist ein eindeutiger Bezeichner für das Bereitstellungsereignis. Anhand dieser ID kann der Produktsupport bei Bedarf nach dem Bereitstellungsereignis suchen.
Quellsystem: Sie können angeben, von wo aus die Identität bereitgestellt wird. Wenn Sie also beispielsweise ein Objekt aus Azure AD in ServiceNow bereitstellen, ist Azure AD das Quellsystem.
Zielsystem: Sie können angeben, wo die Identität bereitgestellt wird. Wenn Sie also beispielsweise ein Objekt aus Azure AD in ServiceNow bereitstellen, ist ServiceNow das Zielsystem.
Anwendung: Sie können die Anzeige auf Datensätze von Anwendungen mit einem Anzeigenamen oder einer Objekt-ID beschränken, der/die eine bestimmte Zeichenfolge enthält. Verwenden Sie für die mandantenübergreifende Synchronisierung die Objekt-ID der Konfiguration und nicht die Anwendungs-ID.
Analysieren der Bereitstellungsprotokolle
Wenn Sie ein Element in der Listenansicht der Bereitstellungen auswählen, werden weitere Details zu diesem Element angezeigt, z. B. die Schritte zur Bereitstellung der Benutzer*innen und Tipps zur Problembehandlung. Die Details werden auf vier Registerkarten gruppiert.
Schritte: Hier sind die ausgeführten Schritte für die Objektbereitstellung aufgeführt. Die Bereitstellung eines Objekts kann aus vier Schritten bestehen:
- Importieren des Objekts
- Ermitteln, ob sich das Objekt innerhalb des Gültigkeitsbereichs befindet
- Abgleichen des Objekts zwischen Quelle und Ziel
- Bereitstellen des Objekts (Erstellen, Aktualisieren, Löschen oder Deaktivieren)
Problembehandlung und Empfehlungen: Enthält den Fehlercode und den Grund für den Fehler. Die Fehlerinformationen sind nur verfügbar, wenn ein Fehler auftritt.
Geänderte Eigenschaften: Enthält den alten und den neuen Wert. Sollte kein alter Wert vorhanden sein, ist diese Spalte leer.
Zusammenfassung: Enthält eine Übersicht über die Vorgänge und die Bezeichner für das Objekt im Quell- und Zielsystem.
Herunterladen von Protokollen als CSV- oder JSON-Datei
Sie können die Bereitstellungsprotokolle zur späteren Verwendung herunterladen. Navigieren Sie hierzu im Azure-Portal zu den Protokollen, und wählen Sie Herunterladen aus. Die Datei wird basierend auf den ausgewählten Filterkriterien gefiltert. Verwenden Sie möglichst spezifische Filter, um Größe und Dauer des Downloads zu verringern.
Der CSV-Download umfasst drei Dateien:
- ProvisioningLogs: Lädt alle Protokolle mit Ausnahme der Bereitstellungsschritte und der geänderten Eigenschaften herunter
- ProvisioningLogs_ProvisioningSteps: Enthält die Bereitstellungsschritte und die Änderungs-ID. Über die Änderungs-ID kann das Ereignis mit den anderen beiden Dateien verknüpft werden.
- ProvisioningLogs_ModifiedProperties: Enthält die geänderten Attribute und die Änderungs-ID. Über die Änderungs-ID kann das Ereignis mit den anderen beiden Dateien verknüpft werden.
Öffnen der JSON-Datei
Verwenden Sie zum Öffnen der JSON-Datei einen Text-Editor wie Microsoft Visual Studio Code. Visual Studio Code vereinfacht das Lesen der Datei mittels Syntaxhervorhebung. Alternativ kann die JSON-Datei auch in einem Browser wie Microsoft Edge in einem nicht bearbeitbaren Format geöffnet werden.
Verbessern der Lesbarkeit der JSON-Datei
Die JSON-Datei wird in einem sehr minimalistischen Format heruntergeladen, um die Größe des Downloads zu verringern. In diesem Format sind die Nutzdaten unter Umständen nur schwer lesbar. Es gibt zwei Optionen zum Formatieren der Datei:
Formatieren des JSON-Codes mit PowerShell. Das folgende Skript gibt den JSON-Code in einem Format mit Tabulatoren und Leerzeichen aus:
$JSONContent = Get-Content -Path "<PATH TO THE PROVISIONING LOGS FILE>" | ConvertFrom-JSON
$JSONContent | ConvertTo-Json > <PATH TO OUTPUT THE JSON FILE>
Analysieren der JSON-Datei
Im Anschluss finden Sie einige Beispielbefehle für die Verwendung der JSON-Datei mit PowerShell. Sie können Ihre bevorzugte Programmiersprache verwenden.
Führen Sie zum Lesen der JSON-Datei zunächst den folgenden Befehl aus:
$JSONContent = Get-Content -Path "<PATH TO THE PROVISIONING LOGS FILE>" | ConvertFrom-JSON
Nun können Sie die Daten gemäß Ihrem Szenario analysieren. Hier sind einige Beispiele angegeben:
Ausgeben aller Auftrags-IDs in der JSON-Datei:
foreach ($provitem in $JSONContent) { $provitem.jobId }
Ausgeben aller Änderungs-IDs für Ereignisse mit der Aktion „Create“ (Erstellen):
foreach ($provitem in $JSONContent) {
if ($provItem.action -eq 'Create') {
$provitem.changeId
}
}
Wichtige Informationen
Hier finden Sie einige Tipps und Überlegungen zu Bereitstellungsberichten:
Gemeldete Bereitstellungsdaten werden bei Verwendung einer Premium-Edition 30 Tage und bei Verwendung einer kostenlosen Edition sieben Tage im Azure-Portal gespeichert. Wenn Sie die Bereitstellungsprotokolle länger als 30 Tage aufbewahren möchten, können Sie sie in Log Analytics veröffentlichen.
Sie können das Attribut „Änderungs-ID“ als eindeutigen Bezeichner verwenden. Dies kann beispielsweise nützlich sein, wenn Sie mit dem Produktsupport interagieren.
Möglicherweise werden übersprungene Ereignisse für Benutzer angezeigt, die außerhalb des Geltungsbereichs liegen. Dies ist das erwartete Verhalten, insbesondere wenn der Synchronisierungsbereich auf alle Benutzer und Gruppen festgelegt ist. Der Dienst wertet alle Objekte im Mandanten aus – auch solche, die außerhalb des Gültigkeitsbereichs liegen.
Die Bereitstellungsprotokolle enthalten keine Rollenimporte (gilt für AWS, Salesforce und Zendesk). Die Protokolle für Rollenimporte finden Sie in den Überwachungsprotokollen.
Fehlercodes
Die folgende Tabelle ist bei der Behebung von Fehlern hilfreich, die in den Bereitstellungsprotokollen enthalten sein können. Verwenden Sie die Links am Ende der Seite, um Feedback für fehlende Fehlercodes bereitzustellen.
Fehlercode | BESCHREIBUNG |
---|---|
Conflict, EntryConflict |
Korrigieren Sie die in Konflikt stehenden Attributwerte entweder in Azure AD oder in der Anwendung. Oder: Überprüfen Sie die Konfiguration der übereinstimmenden Attribute, wenn das in Konflikt stehende Benutzerkonto hätte abgeglichen und übernommen werden sollen. Weitere Informationen zum Konfigurieren von übereinstimmenden Attributen finden Sie in der Dokumentation. |
TooManyRequests | Die Ziel-App hat diesen Versuch zum Aktualisieren des Benutzers abgelehnt, da sie überlastet ist und zu viele Anforderungen empfängt. In diesem Fall ist keine Aktion erforderlich. Dieser Versuch wird automatisch wiederholt. Außerdem wurde Microsoft über dieses Problem informiert. |
InternalServerError | Die Ziel-App hat einen unerwarteten Fehler zurückgegeben. Möglicherweise liegt ein Dienstproblem mit der Zielanwendung vor, sodass diese nicht funktioniert. Dieser Versuch wird automatisch in 40 Minuten wiederholt. |
InsufficientRights, MethodNotAllowed, NotPermitted, Nicht autorisiert |
Azure AD hat sich bei der Zielanwendung authentifiziert, war aber nicht zum Ausführen des Updates autorisiert. Lesen Sie alle ggf. von der Zielanwendung bereitgestellten Anweisungen sowie das entsprechende Tutorial für die Anwendung. |
UnprocessableEntity | Die Zielanwendung hat eine unerwartete Antwort zurückgegeben. Die Konfiguration der Zielanwendung ist möglicherweise nicht korrekt, oder es liegt ein Dienstproblem mit der Zielanwendung vor. |
WebExceptionProtocolError | Bei der Verbindungsherstellung mit der Zielanwendung ist ein HTTP-Protokollfehler aufgetreten. In diesem Fall ist keine Aktion erforderlich. Dieser Versuch wird automatisch in 40 Minuten wiederholt. |
InvalidAnchor | Ein Benutzer, der zuvor vom Bereitstellungsdienst erstellt oder abgeglichen wurde, ist nicht mehr vorhanden. Stellen Sie sicher, dass der Benutzer vorhanden ist. Um einen erneuten Abgleich aller Benutzer zu erzwingen, können Sie mithilfe der Microsoft Graph-API den Auftrag neu starten. Durch den Neustart der Bereitstellung wird ein Startzyklus auslöst, der einige Zeit dauern kann. Außerdem wird der vom Bereitstellungsdienst verwendete Cache gelöscht. Das bedeutet, dass alle Benutzer und Gruppen im Mandanten erneut ausgewertet werden müssen, und bestimmte Bereitstellungsereignisse werden möglicherweise verworfen. |
NotImplemented | Die Ziel-App hat eine unerwartete Antwort zurückgegeben. Die Konfiguration der App ist möglicherweise nicht korrekt, oder es liegt ein Dienstproblem mit der Ziel-App vor. Lesen Sie alle ggf. von der Zielanwendung bereitgestellten Anweisungen sowie das entsprechende Tutorial für die Anwendung. |
MandatoryFieldsMissing, MissingValues |
Der Benutzer konnte nicht erstellt werden, da erforderliche Werte fehlten. Korrigieren Sie die fehlenden Attributwerte im Quelldatensatz, oder überprüfen Sie die Konfiguration der übereinstimmenden Attribute, um sicherzustellen, dass die erforderlichen Felder nicht ausgelassen wurden. Erfahren Sie mehr über das Konfigurieren von übereinstimmenden Attributen. |
SchemaAttributeNotFound | Der Vorgang konnte nicht ausgeführt werden, da ein Attribut angegeben wurde, das in der Zielanwendung nicht vorhanden ist. Informationen zum Anpassen von Attributen finden Sie in der Dokumentation. Stellen Sie außerdem sicher, dass Ihre Konfiguration korrekt ist. |
InternalError | Im Azure AD-Bereitstellungsdienst ist ein interner Dienstfehler aufgetreten. In diesem Fall ist keine Aktion erforderlich. Dieser Versuch wird automatisch in 40 Minuten wiederholt. |
InvalidDomain | Der Vorgang konnte aufgrund eines Attributwerts mit einem ungültigen Domänennamen nicht ausgeführt werden. Aktualisieren Sie den Domänennamen für den Benutzer, oder fügen Sie ihn der Liste zulässiger Domänen in der Zielanwendung hinzu. |
Timeout | Der Vorgang konnte nicht abgeschlossen werden, da die Antwort der Zielanwendung zu lange gedauert hat. In diesem Fall ist keine Aktion erforderlich. Dieser Versuch wird automatisch in 40 Minuten wiederholt. |
LicenseLimitExceeded | Der Benutzer konnte in der Zielanwendung nicht erstellt werden, da für diesen Benutzer keine Lizenzen verfügbar sind. Erwerben Sie weitere Lizenzen für die Zielanwendung. Oder: Überprüfen Sie die Konfiguration der Benutzerzuweisungen und Attributzuordnungen, um sicherzustellen, dass die richtigen Attribute den richtigen Benutzern zugewiesen sind. |
DuplicateTargetEntries | Der Vorgang konnte nicht abgeschlossen werden, da in der Zielanwendung mehrere Benutzer mit den konfigurierten übereinstimmenden Attributen gefunden wurden. Entfernen Sie den doppelten Benutzer aus der Zielanwendung, oder konfigurieren Sie die Attributzuordnungen neu. |
DuplicateSourceEntries | Der Vorgang konnte nicht abgeschlossen werden, da mehrere Benutzer mit den konfigurierten übereinstimmenden Attributen gefunden wurden. Entfernen Sie den doppelten Benutzer, oder konfigurieren Sie die Attributzuordnungen neu. |
ImportSkipped | Bei der Auswertung von Benutzern wird jeweils versucht, den Benutzer aus dem Quellsystem zu importieren. Dieser Fehler tritt in der Regel auf, wenn für den zu importierenden Benutzer die in den Attributzuordnungen definierte Übereinstimmungseigenschaft fehlt. Wenn im Benutzerobjekt kein Wert für das entsprechende Attribut vorhanden ist, können keine Bereichs-, Vergleichs- oder Exportänderungen ausgewertet werden. Dieser Fehler bedeutet nicht, dass sich der Benutzer innerhalb des Gültigkeitsbereichs befindet, da der Gültigkeitsbereich für den Benutzer noch nicht ausgewertet wurde. |
EntrySynchronizationSkipped | Der Bereitstellungsdienst hat das Quellsystem erfolgreich abgefragt und den Benutzer identifiziert. Es wurden keine weiteren Aktionen für den Benutzer durchgeführt, und er wurde übersprungen. Der Benutzer befand sich möglicherweise außerhalb des Gültigkeitsbereichs, oder er war im Zielsystem bereits vorhanden, und es waren keine weiteren Änderungen erforderlich. |
SystemForCrossDomainIdentity ManagementMultipleEntriesInResponse |
Bei einer GET-Anforderung zum Abrufen eines Benutzers oder einer Gruppe wurden in der Antwort mehrere Benutzer oder Gruppen empfangen. In der Antwort wird vom System nur ein einzelner Benutzer bzw. eine einzelne Gruppe erwartet. Dieser Fehler wird beispielsweise ausgelöst, wenn Sie eine GET-Anforderung zum Abrufen einer Gruppe mit einem Filter zum Ausschließen von Mitgliedern ausführen und Ihr SCIM-Endpunkt (System for Cross-Domain Identity Management) die Mitglieder zurückgibt. |
SystemForCrossDomainIdentity ManagementServiceIncompatible |
Der Azure AD-Bereitstellungsdienst kann die Antwort der Drittanbieteranwendung nicht analysieren. Arbeiten Sie mit dem Anwendungsentwickler zusammen, um sicherzustellen, dass der SCIM-Server mit dem Azure AD-SCIM-Client kompatibel ist. |
SchemaPropertyCanOnlyAcceptValue | Die Eigenschaft im Zielsystem kann nur einen Wert akzeptieren, aber die Eigenschaft im Quellsystem weist mehrere auf. Stellen Sie sicher, dass Sie der Eigenschaft, die einen Fehler auslöst, ein Attribut mit einem einzigen Wert zuordnen, den Wert in der Quelle so aktualisieren, dass er einwertig ist, oder das Attribut aus den Zuordnungen entfernen. |
Fehlercodes für die mandantenübergreifende Synchronisierung
Die folgende Tabelle ist bei der Behebung von Fehlern hilfreich, die in den Bereitstellungsprotokollen für die mandantenübergreifende Synchronisierung enthalten sein können. Verwenden Sie die Links am Ende der Seite, um Feedback für fehlende Fehlercodes bereitzustellen.
Fehlercode | Ursache | Lösung |
---|---|---|
AzureActiveDirectoryCannotUpdateObjectsOriginatedInExternalService | Das Synchronisierungsmodul konnte mindestens eine Benutzereigenschaft im Zielmandanten nicht aktualisieren. Der Vorgang ist in der Microsoft Graph-API aufgrund der Erzwingung der Autoritätsquelle (Source of Authority, SOA) fehlgeschlagen. Aktuell werden die folgenden Eigenschaften in der Liste angezeigt: Mail showInAddressList |
In einigen Fällen (z. B. wenn die showInAddressList -Eigenschaft Teil der Benutzeraktualisierung ist) versucht das Synchronisierungsmodul möglicherweise, die Aktualisierung (Benutzer) ohne die betreffende Eigenschaft automatisch zu wiederholen. Andernfalls müssen Sie die Eigenschaft direkt im Zielmandanten aktualisieren. |
AzureDirectoryB2BManagementPolicyCheckFailure | Fehler beim Überprüfen der Richtlinie für die mandantenübergreifende Synchronisierung, die eine automatische Einlösung ermöglicht. Das Synchronisierungsmodul überprüft, ob der Administrator des Zielmandanten eine Richtlinie für die mandantenübergreifende Synchronisierung für eingehenden Datenverkehr erstellt hat, die eine automatische Einlösung ermöglicht. Das Synchronisierungsmodul überprüft auch, ob der Administrator des Quellmandanten eine Richtlinie für ausgehenden Datenverkehr für die automatische Einlösung aktiviert hat. |
Stellen Sie sicher, dass die Einstellung für die automatische Einlösung sowohl für den Quellmandanten als auch für den Zielmandanten aktiviert wurde. Weitere Informationen finden Sie unter Einstellung für die automatische Einlösung. |
AzureActiveDirectoryQuotaLimitExceeded | Die Anzahl der Objekte im Mandanten überschreitet den Grenzwert für das Verzeichnis. In Azure AD gibt es Grenzwerte für die Anzahl von Objekten, die in einem Mandanten erstellt werden können. |
Überprüfen Sie, ob das Kontingent erhöht werden kann. Informationen zu den Verzeichnisgrenzwerten und den Schritten zum Erhöhen des Kontingents finden Sie unter Dienst- und andere Einschränkungen für Azure AD. |
InvitationCreationFailure | Der Azure AD-Bereitstellungsdienst hat versucht, den/die Benutzer*in in den Zielmandanten einzuladen. Bei dieser Benutzereinladung ist ein Fehler aufgetreten. | Navigieren Sie in Azure AD zur Seite „Benutzereinstellungen“ > „Externe Benutzer“ > „Einschränkungen für die Zusammenarbeit“, und stellen Sie sicher, dass die Zusammenarbeit mit diesem Mandanten aktiviert ist. |
AzureActiveDirectoryInsufficientRights | Wenn ein B2B-Benutzer im Zielmandanten über eine andere Rolle als „Benutzer“, „Helpdeskadministrator“ oder „Benutzerkontoadministrator“ verfügt, kann er nicht gelöscht werden. | Entfernen Sie die Rollen für den Benutzer im Zielmandanten, um ihn im Zielmandanten löschen zu können. |