teiv, pgsql-schema-generator: add indexing to tables

Add indexing to the tables

Issue-ID: SMO-?????
Change-Id: I403b577af68f6255cc7e53c5464248fb286d42f1
Signed-off-by: JvD_Ericsson <jeff.van.dam@est.tech>
diff --git a/docs/pgsql-schema-generator-guide.rst b/docs/pgsql-schema-generator-guide.rst
index 56b6697..d833874 100644
--- a/docs/pgsql-schema-generator-guide.rst
+++ b/docs/pgsql-schema-generator-guide.rst
@@ -58,8 +58,6 @@
 - domain: domain of the module. Identified with the help of the statement 'domain' from the module 'o-ran-smo-teiv-common-yang-extensions'
 - revision: module revision.
 - content: content of the module.
-- ownerAppId: set to 'BUILT_IN_MODULE' for all modules.
-- status: set to 'IN_USAGE' for all modules.
 - availableListElements: set to all the list elements defined in the module. Identified with the help of the statement with 'list' as the yang DOM element name.
 - availableEntities: Initially constructed as empty list. This will be populated later with all the entities defined in the module.
 - availableRelations: set to the list of all relationship names defined in the module. Identified with the help of the statement name 'or-teiv-yext:biDirectionalTopologyRelationship'
@@ -73,6 +71,8 @@
 An entity type is constructed with the following details:
 
 - entityName: name of the entity.
+- storedAt: where the entity information is stored i.e., table name. The table name is generated as
+  '<moduleName>_<entityName>'.
 - moduleReferenceName: module to which the entity belongs. Identified by checking which of the identified modules has:
 
    - the same namespace as the entity, and
@@ -143,6 +143,8 @@
    - B_SIDE
    - RELATION
 
+- storedAt: table name where the relationship instances is stored. The logic for determining the table name relies on the cardinality of the relationship.
+
   +--------------------------------------------------+----------------------------+
   | Case                                             | Relationship instance info |
   +==================================================+============================+
@@ -158,12 +160,12 @@
 
 - moduleReferenceName: module to which the relationship belongs. The relationship module is identified by identifying the module that contains the relationship name in the availableRelations list.
 - consumerData: sourceIds, classifiers, decorators.
+- aSideStoredAt: table name where aSide entity type instances are stored.
+- bSideStoredAt: table name where bSide entity type instances are stored.
 
 Indexing Support
 ----------------
 
-**Note:** This feature is currently **NOT** supported
-
 Indexing is supported for the identified column's based on the column's data type.
 
 Currently, we support indexing on JSONB columns.
@@ -171,6 +173,8 @@
 - GIN Index: used for columns storing object, eg, decorators.
 - GIN TRIGRAM Index: used for columns storing list of entries, eg, classifiers, sourceIds.
 
+Refer IndexType.java "src/main/java/org/oran/smo/teiv/pgsqlgenerator/schema/IndexType.java" for types of index supported.
+
 PG SQL Schema Generation
 ========================
 
@@ -308,40 +312,6 @@
 |                 |                       | | to avoid data loss / corruption.             |
 +-----------------+-----------------------+------------------------------------------------+
 
-**decorators:** There will be the ability for Administrators to decorate topology entities and relationships. We will be storing the schemas for the decorators in this table.
-
-+------------------------------------------+--------------------------+-----------------------------------+
-| Column name                              | Type                     | Description                       |
-+==========================================+==========================+===================================+
-| name                                     | VARCHAR(511) PRIMARY KEY | The key of the decorator.         |
-+------------------------------------------+--------------------------+-----------------------------------+
-| dataType                                 | VARCHAR(511)             | | The data type of the decorator, |
-|                                          |                          | | needed for parsing.             |
-+------------------------------------------+--------------------------+-----------------------------------+
-| moduleReferenceName                      | VARCHAR(511)             | | References the corresponding    |
-|                                          |                          | | module reference the decorator  |
-|                                          |                          | | belongs to.                     |
-+------------------------------------------+--------------------------+-----------------------------------+
-| | FOREIGN KEY ("moduleReferenceName")    | FOREIGN KEY              | Foreign key constraint            |
-| | REFERENCES ties_model.module_reference |                          |                                   |
-| | ("name") ON DELETE CASCADE             |                          |                                   |
-+------------------------------------------+--------------------------+-----------------------------------+
-
-**classifier:** There will be the ability for client applications to apply user-defined keywords/tags (classifiers) to topology entities and relationships. We will be storing the schemas for the classifiers in this table.
-
-+------------------------------------------+--------------------------+-----------------------------------------+
-| Column name                              | Type                     | Description                             |
-+==========================================+==========================+=========================================+
-| name                                     | VARCHAR(511) PRIMARY KEY | The actual classifier.                  |
-+------------------------------------------+--------------------------+-----------------------------------------+
-| moduleReferenceName                      | VARCHAR(511)             | | References the corresponding module   |
-|                                          |                          | |  reference the classifier belongs to. |
-+------------------------------------------+--------------------------+-----------------------------------------+
-| | FOREIGN KEY ("moduleReferenceName")    | FOREIGN KEY              | Foreign key constraint                  |
-| | REFERENCES ties_model.module_reference |                          |                                         |
-| | ("name") ON DELETE CASCADE             |                          |                                         |
-+------------------------------------------+--------------------------+-----------------------------------------+
-
 **entity_info:** For the entity info generation SQL entries are created and stored which will be used for execution to populate entity_info table.
 
 +------------------------------------------+------------------+-----------------------------------------+
@@ -409,6 +379,133 @@
 
 Finally, these generated entries and structure are then used to modify the model SQL file.
 
+Consumer Data Schema
+^^^^^^^^^^^^^^^^^^^^
+
+Before classifying entities or relationships, a schema must be created and validated.
+It can be created, by using its own endpoint, with a Yang Module.
+The user must provide a unique module name, to avoid collision of multiple users access that are defining classifiers and decorators.
+The schema cannot be modified later on but only deleted and recreated, if needed.
+When a schema is successfully created and validated, the user can add the classifiers to the entities or relationships.
+
+Classifiers
+"""""""""""
+
+Classifiers support the following two types of 'operation', which must be identified in the body of the request:
+- merge: defined classifiers can be applied to entities and relationships within a single request.
+- delete: existing tagged classifiers can be removed.
+
+**Example:**
+In this example, user is classifying two given entity IDs and a single relationship ID with a single request.
+
+.. code-block:: json
+
+    {
+      "operation": "merge",
+      "classifiers": [
+        "module-x:Outdoor",
+        "module-y:Rural",
+        "module-z:Weekend"
+      ],
+      "entityIds": [
+        "urn:3gpp:dn:ManagedElement=1,GNBDUFunction=1,NRCellDU=1",
+        "urn:3gpp:dn:ManagedElement=1,GNBDUFunction=1,NRCellDU=2"
+      ],
+      "relationshipIds": [
+        "urn:o-ran:smo:teiv:sha512:NRCELLDU_USES_NRSECTORCARRIER=CA576F4716C36A1BD1C506DCB58418FC731858D3D3F856F536813A8C4D3F1CC21292E506815410E04496D709D96066EBC0E4890DEFC3789EDC4BD9C28DA1D52B"
+      ]
+    }
+
+Decorators
+""""""""""
+
+Decorators support the following two types of 'operations', which must be identified in the body of the request:
+- merge: existing decorators can be updated or applied to entities and relationships within a single request.
+- delete: existing tagged decorators can be removed.
+
+**Example:**
+In this example, user is tagging decorators with two given entity IDs and a single relationship ID with a single request.
+
+.. code-block:: json
+
+    {
+      "operation": "merge",
+      "decorators": {
+        "module-x:location": "Stockholm",
+        "module-y:vendor": "Ericsson"
+      },
+      "entityIds": [
+        "urn:3gpp:dn:ManagedElement=1,GNBDUFunction=1,NRCellDU=1",
+        "urn:3gpp:dn:ManagedElement=1,GNBDUFunction=1,NRCellDU=2"
+      ],
+      "relationshipIds": [
+        "urn:o-ran:smo:teiv:sha512:NRCELLDU_USES_NRSECTORCARRIER=CA576F4716C36A1BD1C506DCB58418FC731858D3D3F856F536813A8C4D3F1CC21292E506815410E04496D709D96066EBC0E4890DEFC3789EDC4BD9C28DA1D52B"
+      ]
+    }
+
+The SQL entries for consumer data include
+- **module_reference:** For the consumer module reference related module names from provided classifiers or decorators retrieved from the model service are extracted and stored which will be used for execution to module_reference table.
+
++-------------+-----------------------+-----------------------------------------------------------------+
+| Column name | Type                  | Description                                                     |
++=============+=======================+=================================================================+
+| name        | TEXT PRIMARY KEY      | The module name                                                 |
++-------------+-----------------------+-----------------------------------------------------------------+
+| namespace   | TEXT                  | The namespace the module is located                             |
++-------------+-----------------------+-----------------------------------------------------------------+
+| revision    | TEXT NOT NULL         | The revision date of the file                                   |
++-------------+-----------------------+-----------------------------------------------------------------+
+| content     | TEXT NOT NULL         | The base64 encoded format of the corresponding schema.          |
++-------------+-----------------------+-----------------------------------------------------------------+
+| ownerAppId  | VARCHAR(511) NOT NULL | The identity of the owner App.                                  |
++-------------+-----------------------+-----------------------------------------------------------------+
+| status      | VARCHAR(127) NOT NULL | | Current status of the consumer module reference to track      |
+|             |                       | | during the pod's life cycle. Needed to avoid data             |
+|             |                       | | loss / corruption.                                            |
++-------------+-----------------------+-----------------------------------------------------------------+
+
+**decorators:** There will be the ability for Administrators to decorate topology entities and relationships. We will be storing the schemas for the decorators in this table.
+
++--------------------------------------------------+------------------+-----------------------------------+
+| Column name                                      | Type             | Description                       |
++==================================================+==================+===================================+
+| name                                             | TEXT PRIMARY KEY | The key of the decorator.         |
++--------------------------------------------------+------------------+-----------------------------------+
+| dataType                                         | VARCHAR(511)     | | The data type of the decorator, |
+|                                                  |                  | | needed for parsing.             |
++--------------------------------------------------+------------------+-----------------------------------+
+| moduleReferenceName                              | TEXT             | | References the corresponding    |
+|                                                  |                  | | module reference the decorator  |
+|                                                  |                  | | belongs to.                     |
++--------------------------------------------------+------------------+-----------------------------------+
+| | FOREIGN KEY ("moduleReferenceName") REFERENCES | FOREIGN KEY      | Foreign key constraint            |
+| | ties_consumer_data.module_reference ("name")   |                  |                                   |
+| | ON DELETE CASCADE                              |                  |                                   |
++--------------------------------------------------+------------------+-----------------------------------+
+
+**classifier:** There will be the ability for client applications to apply user-defined keywords/tags (classifiers) to topology entities and relationships. We will be storing the schemas for the classifiers in this table.
+
++--------------------------------------------------+------------------+-----------------------------------+
+| Column name                                      | Type             | Description                       |
++==================================================+==================+===================================+
+| name                                             | TEXT PRIMARY KEY | The key of the classifier.        |
++--------------------------------------------------+------------------+-----------------------------------+
+| moduleReferenceName                              | TEXT             | | References the corresponding    |
+|                                                  |                  | | module reference the classifier |
+|                                                  |                  | | belongs to.                     |
++--------------------------------------------------+------------------+-----------------------------------+
+| | FOREIGN KEY ("moduleReferenceName") REFERENCES | FOREIGN KEY      | Foreign key constraint            |
+| | ties_consumer_data.module_reference ("name")   |                  |                                   |
+| | ON DELETE CASCADE                              |                  |                                   |
++--------------------------------------------------+------------------+-----------------------------------+
+
+How to use classifiers and decorators
+"""""""""""""""""""""""""""""""""""""
+
+1. Create a schema with the /schemas endpoint using Yang Module. After a successful schema creation, the topology objects are ready to be classified.
+2. Assign classifiers and/or decorators to the entities and/or relationships.
+3. Search classifiers and/or decorators by using queries.
+
 Skeleton Data and Model SQL Files
 =================================
 
diff --git a/pgsql-schema-generator/README.md b/pgsql-schema-generator/README.md
index 90085f6..b9d211e 100644
--- a/pgsql-schema-generator/README.md
+++ b/pgsql-schema-generator/README.md
@@ -50,8 +50,6 @@
 'o-ran-smo-teiv-common-yang-extensions'
 - revision: module revision.
 - content: content of the module.
-- ownerAppId: set to 'BUILT_IN_MODULE' for all modules.
-- status: set to 'IN_USAGE' for all modules.
 - availableListElements: set to all the list elements defined in the module. Identified with the help of the statement 
 with 'list' as the yang DOM element name. 
 - availableEntities: Initially constructed as empty list. This will be populated later with all the entities defined in 
@@ -66,6 +64,8 @@
 
 An entity type is constructed with the following details: 
 - entityName: name of the entity.
+- storedAt: where the entity information is stored i.e., table name. The table name is generated as
+  '<moduleName>_<entityName>'.
 - moduleReferenceName: module to which the entity belongs. Identified by checking which of the identified modules has
   - the same namespace as the entity, and
   - the availableListElements contains the entity name
@@ -123,28 +123,32 @@
   - A_SIDE
   - B_SIDE
   - RELATION
+- storedAt: table name where the relationship instances is stored. The logic for determining the table name relies on
+the cardinality of the relationship.
 
-  | Case                                                               | Relationship instance info |
-  |--------------------------------------------------------------------|----------------------------|
-  | 1:1                                                                | aSide                      |
-  | 1:N / N:1                                                          | N-side                     |
-  | N:M                                                                | relation table             |
-  | Relations connecting same Entity Types 1 : 1 (or) 1 : n (or) m : n | relation table             |
+  | Case                                                               | Relationship instance info and reference stored at? |
+  |--------------------------------------------------------------------|-----------------------------------------------------|
+  | 1:1                                                                | aSide                                               |
+  | 1:N / N:1                                                          | N-side                                              |
+  | N:M                                                                | relation table (<moduleName>_<relationName>)        |
+  | Relations connecting same Entity Types 1 : 1 (or) 1 : n (or) m : n | relation table (<moduleName>_<relationName>)        |
 
 - moduleReferenceName: module to which the relationship belongs. The relationship module is identified by identifying
 the module that contains the relationship name in the availableRelations list.
 - consumerData: sourceIds, classifiers, decorators.
+- aSideStoredAt: table name where aSide entity type instances are stored.
+- bSideStoredAt: table name where bSide entity type instances are stored.
 
 #### Indexing Support
 
-**Note:** This feature is currently **NOT** supported
-
 Indexing is supported for the identified column's based on the column's data type.
 
 Currently, we support indexing on JSONB columns.
 - GIN Index: used for columns storing object, eg, decorators.
 - GIN TRIGRAM Index: used for columns storing list of entries, eg, classifiers, sourceIds.
 
+Refer [IndexType.java](src/main/java/org/oran/smo/teiv/pgsqlgenerator/IndexType.java) for types of index supported.
+
 ### PG SQL Schema Generation
 
 #### Data schema
@@ -264,34 +268,13 @@
   | includedModules | jsonb                 | aSideMO's and bSideMO's module reference name stored within the Module                                               |
   | revision        | TEXT NOT NULL         | The revision date of the file                                                                                        |
   | content         | TEXT NOT NULL         | The base64 encoded format of the corresponding schema.                                                               |
-  | ownerAppId      | VARCHAR(511) NOT NULL | The identity of the owner App.                                                                                       |
-  | status          | VARCHAR(127) NOT NULL | Current status of the module reference to track during the pod's life cycle. Needed to avoid data loss / corruption. |
-
-- **decorators:** There will be the ability for Administrators to decorate topology entities and relationships.
-  We will be storing the schemas for the decorators in this table.
-
-  | Column name                                                                                           | Type                     | Description                                                             |
-  |-------------------------------------------------------------------------------------------------------|--------------------------|-------------------------------------------------------------------------|
-  | name                                                                                                  | VARCHAR(511) PRIMARY KEY | The key of the decorator.                                               |
-  | dataType                                                                                              | VARCHAR(511)             | The data type of the decorator, needed for parsing.                     |
-  | moduleReferenceName                                                                                   | VARCHAR(511)             | References the corresponding module reference the decorator belongs to. |
-  | FOREIGN KEY ("moduleReferenceName") REFERENCES ties_model.module_reference ("name") ON DELETE CASCADE | FOREIGN KEY              | Foreign key constraint                                                  |
-
-- **classifier:** There will be the ability for client applications to apply user-defined keywords/tags (classifiers) to
-  topology entities and relationships.
-  We will be storing the schemas for the classifiers in this table.
-
-  | Column name                                                                                           | Type                     | Description                                                              |
-  |-------------------------------------------------------------------------------------------------------|--------------------------|--------------------------------------------------------------------------|
-  | name                                                                                                  | VARCHAR(511) PRIMARY KEY | The actual classifier.                                                   |
-  | moduleReferenceName                                                                                   | VARCHAR(511)             | References the corresponding module reference the classifier belongs to. |
-  | FOREIGN KEY ("moduleReferenceName") REFERENCES ties_model.module_reference ("name") ON DELETE CASCADE | FOREIGN KEY              | Foreign key constraint                                                   |
 
 - **entity_info:** For the entity info generation SQL entries are created and stored which will be used for execution to
 populate entity_info table.
 
   | Column name                                                                                           | Type             | Description                                                 |
   |-------------------------------------------------------------------------------------------------------|------------------|-------------------------------------------------------------|
+  | storedAt                                                                                              | TEXT PRIMARY KEY | Un-hashed table name where entity type instances are stored |
   | name                                                                                                  | TEXT NOT NULL    | The entity type name                                        |
   | moduleReferenceName                                                                                   | TEXT NOT NULL    | A reference to an associated module                         |
   | FOREIGN KEY ("moduleReferenceName") REFERENCES ties_model.module_reference ("name") ON DELETE CASCADE | FOREIGN KEY      | Foreign key constraint                                      |
@@ -315,6 +298,7 @@
   | bSideMaxCardinality                                                                                   | BIGINT NOT NULL  | The maximum cardinality of the B-side of the relationship              |
   | associationKind                                                                                       | TEXT NOT NULL    | The kind of association between entities                               |
   | relationshipDataLocation                                                                              | TEXT NOT NULL    | Indicates where associated relationship data is stored                 |
+  | storedAt                                                                                              | TEXT NOT NULL    | The un-hashed table name where relation instance information is stored |
   | connectSameEntity                                                                                     | BOOLEAN NOT NULL | Indicates whether the relationship connects the same entity            |
   | moduleReferenceName                                                                                   | TEXT PRIMARY KEY | The name of the module reference associated with the relationship      |
   | FOREIGN KEY ("aSideModule") REFERENCES ties_model.module_reference ("name") ON DELETE CASCADE         | FOREIGN KEY      | Foreign key constraint                                                 |
@@ -326,6 +310,93 @@
 
 Finally, These generated entries and structure are then used to modify the model SQL file.
 
+#### Consumer Data Schema
+Before classifying entities or relationships, a schema must be created and validated.
+It can be created, by using its own endpoint, with a Yang Module.
+The user must provide a unique module name, to avoid collision of multiple users access that are defining classifiers and decorators.
+The schema cannot be modified later on but only deleted and recreated, if needed.
+When a schema is successfully created and validated, the user can add the classifiers to the entities or relationships.
+
+##### Classifiers
+Classifiers support the following two types of 'operation', which must be identified in the body of the request:
+- merge: defined classifiers can be applied to entities and relationships within a single request.
+- delete: existing tagged classifiers can be removed.
+  **Example:**
+  In this example, user is classifying two given entity IDs and a single relationship ID with a single request.
+```
+{
+  "operation": "merge",
+  "classifiers": [
+    "module-x:Outdoor",
+    "module-y:Rural",
+    "module-z:Weekend"
+  ],
+  "entityIds": [
+    "urn:3gpp:dn:ManagedElement=1,GNBDUFunction=1,NRCellDU=1",
+    "urn:3gpp:dn:ManagedElement=1,GNBDUFunction=1,NRCellDU=2"
+  ],
+  "relationshipIds": [
+    "urn:o-ran:smo:teiv:sha512:NRCELLDU_USES_NRSECTORCARRIER=CA576F4716C36A1BD1C506DCB58418FC731858D3D3F856F536813A8C4D3F1CC21292E506815410E04496D709D96066EBC0E4890DEFC3789EDC4BD9C28DA1D52B"
+  ]
+}
+```
+##### Decorators
+Decorators support the following two types of 'operations', which must be identified in the body of the request:
+- merge: existing decorators can be updated or applied to entities and relationships within a single request.
+- delete: existing tagged decorators can be removed.
+  **Example:**
+  In this example, user is tagging decorators with two given entity IDs and a single relationship ID with a single request.
+```
+  "operation": "merge",
+  "decorators": {
+    "module-x:location": "Stockholm",
+    "module-y:vendor": "Ericsson"
+  },
+  "entityIds": [
+    "urn:3gpp:dn:ManagedElement=1,GNBDUFunction=1,NRCellDU=1",
+    "urn:3gpp:dn:ManagedElement=1,GNBDUFunction=1,NRCellDU=2"
+  ],
+  "relationshipIds": [
+    "urn:o-ran:smo:teiv:sha512:NRCELLDU_USES_NRSECTORCARRIER=CA576F4716C36A1BD1C506DCB58418FC731858D3D3F856F536813A8C4D3F1CC21292E506815410E04496D709D96066EBC0E4890DEFC3789EDC4BD9C28DA1D52B"
+  ]
+}
+```
+The SQL entries for consumer data include
+- **module_reference:** For the consumer module reference related module names from provided classifiers or decorators
+  retrieved from the model service are extracted and stored which will be used for
+  execution to module_reference table.
+  | Column name | Type                  | Description                                                                                                                   |
+  |-------------|-----------------------|-------------------------------------------------------------------------------------------------------------------------------|
+  | name        | TEXT PRIMARY KEY      | The module name                                                                                                               |
+  | namespace   | TEXT                  | The namespace the module is located                                                                                           |
+  | revision    | TEXT NOT NULL         | The revision date of the file                                                                                                 |
+  | content     | TEXT NOT NULL         | The base64 encoded format of the corresponding schema.                                                                        |
+  | ownerAppId  | VARCHAR(511) NOT NULL | The identity of the owner App.                                                                                                |
+  | status      | VARCHAR(127) NOT NULL | Current status of the consumer module reference to track during the pod's life cycle. Needed to avoid data loss / corruption. |
+
+- **decorators:** There will be the ability for Administrators to decorate topology entities and relationships.
+  We will be storing the schemas for the decorators in this table.
+  | Column name                                                                                                   | Type             | Description                                                                      |
+  |---------------------------------------------------------------------------------------------------------------|------------------|----------------------------------------------------------------------------------|
+  | name                                                                                                          | TEXT PRIMARY KEY | The key of the decorator.                                                        |
+  | dataType                                                                                                      | VARCHAR(511)     | The data type of the decorator, needed for parsing.                              |
+  | moduleReferenceName                                                                                           | TEXT             | References the corresponding consumer module reference the decorator belongs to. |
+  | FOREIGN KEY ("moduleReferenceName") REFERENCES ties_consumer_data.module_reference ("name") ON DELETE CASCADE | FOREIGN KEY      | Foreign key constraint                                                           |
+
+- **classifiers:** There will be the ability for client applications to apply user-defined keywords/tags (classifiers) to
+  topology entities and relationships.
+  We will be storing the schemas for the classifiers in this table.
+  | Column name                                                                                                   | Type             | Description                                                                       |
+  |---------------------------------------------------------------------------------------------------------------|------------------|-----------------------------------------------------------------------------------|
+  | name                                                                                                          | TEXT PRIMARY KEY | The actual classifier.                                                            |
+  | moduleReferenceName                                                                                           | TEXT             | References the corresponding consumer module reference the classifier belongs to. |
+  | FOREIGN KEY ("moduleReferenceName") REFERENCES ties_consumer_data.module_reference ("name") ON DELETE CASCADE | FOREIGN KEY      | Foreign key constraint                                                            |
+
+##### How to use classifiers and decorators
+1. Create a schema with the /schemas endpoint using Yang Module. After a successful schema creation, the topology objects are ready to be classified.
+2. Assign classifiers and/or decorators to the entities and/or relationships.
+3. Search classifiers and/or decorators by using queries.
+
 ### Skeleton Data and Model SQL Files
 
 - [00_init-oran-smo-teiv-data.sql](src/main/resources/scripts/00_init-oran-smo-teiv-data.sql)
diff --git a/pgsql-schema-generator/src/main/java/org/oran/smo/teiv/pgsqlgenerator/Attribute.java b/pgsql-schema-generator/src/main/java/org/oran/smo/teiv/pgsqlgenerator/Attribute.java
index 20280a5..72ce40b 100644
--- a/pgsql-schema-generator/src/main/java/org/oran/smo/teiv/pgsqlgenerator/Attribute.java
+++ b/pgsql-schema-generator/src/main/java/org/oran/smo/teiv/pgsqlgenerator/Attribute.java
@@ -25,6 +25,7 @@
 
 import lombok.Builder;
 import lombok.Getter;
+import lombok.Singular;
 
 @Getter
 @Builder
@@ -34,4 +35,6 @@
     @Builder.Default
     private Collection<Object> constraints = List.of();
     private String defaultValue;
+    @Singular
+    private List<IndexType> indexTypes;
 }
diff --git a/pgsql-schema-generator/src/main/java/org/oran/smo/teiv/pgsqlgenerator/Column.java b/pgsql-schema-generator/src/main/java/org/oran/smo/teiv/pgsqlgenerator/Column.java
index ff74f67..14c9c8a 100644
--- a/pgsql-schema-generator/src/main/java/org/oran/smo/teiv/pgsqlgenerator/Column.java
+++ b/pgsql-schema-generator/src/main/java/org/oran/smo/teiv/pgsqlgenerator/Column.java
@@ -34,4 +34,6 @@
     @Builder.Default
     private Collection<PostgresConstraint> postgresConstraints = List.of();
     private String defaultValue;
+    @Builder.Default
+    private List<PostgresIndex> postgresIndexList = List.of();
 }
diff --git a/pgsql-schema-generator/src/main/java/org/oran/smo/teiv/pgsqlgenerator/Constants.java b/pgsql-schema-generator/src/main/java/org/oran/smo/teiv/pgsqlgenerator/Constants.java
index ab0c590..b0678fd 100644
--- a/pgsql-schema-generator/src/main/java/org/oran/smo/teiv/pgsqlgenerator/Constants.java
+++ b/pgsql-schema-generator/src/main/java/org/oran/smo/teiv/pgsqlgenerator/Constants.java
@@ -24,7 +24,6 @@
 
 @UtilityClass
 public class Constants {
-
     public static final String NO_PREFIX = "";
     public static final String CONSUMER_DATA = "CD_";
     public static final String SOURCE_IDS = "sourceIds";
@@ -33,15 +32,14 @@
     public static final String REL_CD = "REL_CD_";
     public static final String FOREIGN_KEY = "FK_";
     public static final String PRIMARY_KEY = "PK_";
-    public static final String NOT_NULL = "NOT_NULL_";
     public static final String UNIQUE = "UNIQUE_";
+    public static final String INDEX_PREFIX = "IDX_";
     public static final String A_SIDE_PREFIX = "aSide_";
     public static final String B_SIDE_PREFIX = "bSide_";
     public static final String ID = "id";
     public static final String COLUMN = "COLUMN";
     public static final String TABLE = "TABLE";
     public static final String CONSTRAINT = "CONSTRAINT";
-    public static final String VARCHAR511 = "VARCHAR(511)";
     public static final String TEXT = "TEXT";
     public static final String DECIMAL = "DECIMAL";
     public static final String BIGINT = "BIGINT";
@@ -50,12 +48,11 @@
     public static final String CREATE = "CREATE";
     public static final String ALTER = "ALTER";
     public static final String DEFAULT = "DEFAULT";
+    public static final String INDEX = "INDEX";
     public static final String ALTER_TABLE_TIES_DATA_S = "ALTER TABLE ties_data.\"%s\" ";
     public static final String ALTER_TABLE_TIES_DATA_S_ADD_CONSTRAINT_S = ALTER_TABLE_TIES_DATA_S + "ADD CONSTRAINT \"%s\" ";
     public static final String CLASSIFIERS = "classifiers";
     public static final String DECORATORS = "decorators";
-    public static final String DEFAULT_MODULE_STATUS = "IN_USAGE";
-    public static final String BUILT_IN_MODULE_ID = "BUILT_IN_MODULE";
     public static final String A_SIDE = "A_SIDE";
     public static final String B_SIDE = "B_SIDE";
     public static final String RELATION = "RELATION";
diff --git a/pgsql-schema-generator/src/main/java/org/oran/smo/teiv/pgsqlgenerator/ConsumerData.java b/pgsql-schema-generator/src/main/java/org/oran/smo/teiv/pgsqlgenerator/ConsumerData.java
index fdfd5c8..e4e9fc5 100644
--- a/pgsql-schema-generator/src/main/java/org/oran/smo/teiv/pgsqlgenerator/ConsumerData.java
+++ b/pgsql-schema-generator/src/main/java/org/oran/smo/teiv/pgsqlgenerator/ConsumerData.java
@@ -22,6 +22,9 @@
 
 import lombok.Builder;
 import lombok.Getter;
+import lombok.Singular;
+
+import java.util.List;
 
 @Getter
 @Builder
@@ -29,4 +32,6 @@
     private String name;
     private String dataType;
     private String defaultValue;
+    @Singular
+    private List<IndexType> indexTypes;
 }
diff --git a/pgsql-schema-generator/src/main/java/org/oran/smo/teiv/pgsqlgenerator/Entity.java b/pgsql-schema-generator/src/main/java/org/oran/smo/teiv/pgsqlgenerator/Entity.java
index a3da50a..3208c2d 100644
--- a/pgsql-schema-generator/src/main/java/org/oran/smo/teiv/pgsqlgenerator/Entity.java
+++ b/pgsql-schema-generator/src/main/java/org/oran/smo/teiv/pgsqlgenerator/Entity.java
@@ -22,25 +22,28 @@
 
 import java.util.List;
 
+import lombok.Value;
 import org.oran.smo.teiv.pgsqlgenerator.schema.Table;
 import lombok.Builder;
-import lombok.Getter;
 
 import static org.oran.smo.teiv.pgsqlgenerator.Constants.CLASSIFIERS;
 import static org.oran.smo.teiv.pgsqlgenerator.Constants.DECORATORS;
 import static org.oran.smo.teiv.pgsqlgenerator.Constants.JSONB;
 import static org.oran.smo.teiv.pgsqlgenerator.Constants.SOURCE_IDS;
 
-@Getter
+@Value
 @Builder
 public class Entity implements Table {
-    private String entityName;
-    private String moduleReferenceName;
-    private List<Attribute> attributes;
+    String entityName;
+    String storedAt;
+    String moduleReferenceName;
+    List<Attribute> attributes;
     @Builder.Default
-    private List<ConsumerData> consumerData = List.of(ConsumerData.builder().name(SOURCE_IDS).dataType(JSONB).defaultValue(
-            "[]").build(), ConsumerData.builder().name(CLASSIFIERS).dataType(JSONB).defaultValue("[]").build(), ConsumerData
-                    .builder().name(DECORATORS).dataType(JSONB).defaultValue("{}").build());
+    List<ConsumerData> consumerData = List.of(ConsumerData.builder().name(SOURCE_IDS).dataType(JSONB).defaultValue("[]")
+            .indexType(IndexType.GIN_TRGM_OPS_ON_LIST_AS_JSONB).build(), ConsumerData.builder().name(CLASSIFIERS).dataType(
+                    JSONB).defaultValue("[]").indexType(IndexType.GIN_TRGM_OPS_ON_LIST_AS_JSONB).build(), ConsumerData
+                            .builder().name(DECORATORS).dataType(JSONB).defaultValue("{}").indexType(IndexType.GIN)
+                            .build());
 
     @Override
     public String getTableName() {
@@ -49,11 +52,11 @@
 
     @Override
     public String getColumnsForCopyStatement() {
-        return "(\"name\", \"moduleReferenceName\")";
+        return "(\"storedAt\", \"name\", \"moduleReferenceName\")";
     }
 
     @Override
     public String getRecordForCopyStatement() {
-        return this.getEntityName() + "\t" + this.getModuleReferenceName() + "\n";
+        return this.getStoredAt() + "\t" + this.getEntityName() + "\t" + this.getModuleReferenceName() + "\n";
     }
 }
diff --git a/pgsql-schema-generator/src/main/java/org/oran/smo/teiv/pgsqlgenerator/IndexType.java b/pgsql-schema-generator/src/main/java/org/oran/smo/teiv/pgsqlgenerator/IndexType.java
new file mode 100644
index 0000000..434d7cb
--- /dev/null
+++ b/pgsql-schema-generator/src/main/java/org/oran/smo/teiv/pgsqlgenerator/IndexType.java
@@ -0,0 +1,34 @@
+/*
+ *  ============LICENSE_START=======================================================
+ *  Copyright (C) 2024 Ericsson
+ *  Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ *  ================================================================================
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ *
+ *  SPDX-License-Identifier: Apache-2.0
+ *  ============LICENSE_END=========================================================
+ */
+package org.oran.smo.teiv.pgsqlgenerator;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+@Getter
+@AllArgsConstructor
+public enum IndexType {
+    GIN("CREATE INDEX IF NOT EXISTS \"%s\" ON ties_data.\"%s\" USING GIN (\"%s\");"),
+    GIN_TRGM_OPS_ON_LIST_AS_JSONB(
+            "CREATE INDEX IF NOT EXISTS \"%s\" ON ties_data.\"%s\" USING GIN ((\"%s\"::TEXT) gin_trgm_ops);");
+
+    private final String createIndexStmt;
+}
diff --git a/pgsql-schema-generator/src/main/java/org/oran/smo/teiv/pgsqlgenerator/Module.java b/pgsql-schema-generator/src/main/java/org/oran/smo/teiv/pgsqlgenerator/Module.java
index 1d6dc2a..6135d67 100644
--- a/pgsql-schema-generator/src/main/java/org/oran/smo/teiv/pgsqlgenerator/Module.java
+++ b/pgsql-schema-generator/src/main/java/org/oran/smo/teiv/pgsqlgenerator/Module.java
@@ -38,8 +38,11 @@
     private String domain;
     private String revision;
     private String content;
-    private String ownerAppId;
-    private String status;
+    private List<String> availableListElements;
+    @Setter
+    private List<String> availableEntities;
+    @Builder.Default
+    private List<String> availableRelations = List.of();
     @Setter
     @Builder.Default
     private Collection<String> includedModules = List.of();
@@ -51,7 +54,7 @@
 
     @Override
     public String getColumnsForCopyStatement() {
-        return "(\"name\", \"namespace\", \"domain\", \"includedModules\", \"revision\", \"content\", \"ownerAppId\", \"status\")";
+        return "(\"name\", \"namespace\", \"domain\", \"includedModules\", \"revision\", \"content\")";
     }
 
     @Override
@@ -60,7 +63,6 @@
                 this.getDomain() :
                 "\\N") + "\t" + this.getIncludedModules().stream().map(moduleRef -> "\"" + moduleRef + "\"")
                         .toList() + "\t" + this.getRevision() + "\t" + Base64.getEncoder().encodeToString(this.getContent()
-                                .replaceAll("\\r\\n?", "\n").getBytes(StandardCharsets.UTF_8)) + "\t" + this
-                                        .getOwnerAppId() + "\t" + this.getStatus() + "\n";
+                                .replaceAll("\\r\\n?", "\n").getBytes(StandardCharsets.UTF_8)) + "\n";
     }
 }
diff --git a/pgsql-schema-generator/src/main/java/org/oran/smo/teiv/pgsqlgenerator/PostgresIndex.java b/pgsql-schema-generator/src/main/java/org/oran/smo/teiv/pgsqlgenerator/PostgresIndex.java
new file mode 100644
index 0000000..2418e18
--- /dev/null
+++ b/pgsql-schema-generator/src/main/java/org/oran/smo/teiv/pgsqlgenerator/PostgresIndex.java
@@ -0,0 +1,33 @@
+/*
+ *  ============LICENSE_START=======================================================
+ *  Copyright (C) 2024 Ericsson
+ *  Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ *  ================================================================================
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ *
+ *  SPDX-License-Identifier: Apache-2.0
+ *  ============LICENSE_END=========================================================
+ */
+package org.oran.smo.teiv.pgsqlgenerator;
+
+import lombok.Builder;
+import lombok.Getter;
+
+@Getter
+@Builder
+public class PostgresIndex {
+    private String tableNameToAddIndexTo;
+    private String columnNameToAddIndexTo;
+    private String indexName;
+    private IndexType indexType;
+}
diff --git a/pgsql-schema-generator/src/main/java/org/oran/smo/teiv/pgsqlgenerator/Processor.java b/pgsql-schema-generator/src/main/java/org/oran/smo/teiv/pgsqlgenerator/Processor.java
index 943a15e..4d24eee 100644
--- a/pgsql-schema-generator/src/main/java/org/oran/smo/teiv/pgsqlgenerator/Processor.java
+++ b/pgsql-schema-generator/src/main/java/org/oran/smo/teiv/pgsqlgenerator/Processor.java
@@ -24,9 +24,11 @@
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Collections;
+import java.util.Comparator;
 import java.util.List;
 
 import org.oran.smo.teiv.pgsqlgenerator.grapghgenerator.EntityGraphGenerator;
+import org.oran.smo.teiv.pgsqlgenerator.schema.consumerdata.ConsumerDataSchemaGenerator;
 import org.oran.smo.teiv.pgsqlgenerator.schema.data.DataSchemaGenerator;
 import org.oran.smo.teiv.pgsqlgenerator.schema.model.ModelSchemaGenerator;
 import org.oran.smo.teiv.pgsqlgenerator.grapghgenerator.RelationshipGraphGenerator;
@@ -44,6 +46,7 @@
     private final YangModelProcessor yangModelProcessor;
     private final DataSchemaGenerator dataSchemaGenerator;
     private final ModelSchemaGenerator modelSchemaGenerator;
+    private final ConsumerDataSchemaGenerator consumerDataSchemaGenerator;
     private final RelationshipGraphGenerator relationshipGraphGenerator;
     private final EntityGraphGenerator entityGraphGenerator;
     @Value("${yang-model.source}")
@@ -69,6 +72,7 @@
         entityGraphGenerator.generate(entitiesFromModelService);
         dataSchemaGenerator.generate(moduleReferences, entitiesFromModelService, relationshipsFromModelService);
         modelSchemaGenerator.generate(moduleReferences, entitiesFromModelService, relationshipsFromModelService);
+        consumerDataSchemaGenerator.generate(moduleReferences, entitiesFromModelService, relationshipsFromModelService);
     }
 
     /**
@@ -90,7 +94,7 @@
             includedModules.removeIf(modelRef -> !moduleRefForAllEntities.contains(modelRef));
             module.setIncludedModules(includedModules);
         }
+        moduleRefFromYangParser.sort(Comparator.comparing(Module::getName));
         return moduleRefFromYangParser;
-
     }
 }
diff --git a/pgsql-schema-generator/src/main/java/org/oran/smo/teiv/pgsqlgenerator/Relationship.java b/pgsql-schema-generator/src/main/java/org/oran/smo/teiv/pgsqlgenerator/Relationship.java
index a4285cc..82b2f1b 100644
--- a/pgsql-schema-generator/src/main/java/org/oran/smo/teiv/pgsqlgenerator/Relationship.java
+++ b/pgsql-schema-generator/src/main/java/org/oran/smo/teiv/pgsqlgenerator/Relationship.java
@@ -22,39 +22,43 @@
 
 import java.util.List;
 
+import lombok.Value;
 import org.oran.smo.teiv.pgsqlgenerator.schema.Table;
 
 import lombok.Builder;
-import lombok.Getter;
-import lombok.Setter;
 
 import static org.oran.smo.teiv.pgsqlgenerator.Constants.CLASSIFIERS;
 import static org.oran.smo.teiv.pgsqlgenerator.Constants.DECORATORS;
 import static org.oran.smo.teiv.pgsqlgenerator.Constants.JSONB;
 import static org.oran.smo.teiv.pgsqlgenerator.Constants.SOURCE_IDS;
 
-@Getter
+@Value
 @Builder
 public class Relationship implements Table {
-    private String name;
-    private String aSideAssociationName;
-    private String aSideMOType;
-    private long aSideMinCardinality;
-    private long aSideMaxCardinality;
-    private String bSideAssociationName;
-    private String bSideMOType;
-    private long bSideMinCardinality;
-    private long bSideMaxCardinality;
-    private String associationKind;
-    @Setter
-    private String relationshipDataLocation;
-    private boolean connectSameEntity;
-    @Setter
-    private String moduleReferenceName;
+    String name;
+    String aSideAssociationName;
+    String aSideMOType;
+    String aSideModule;
+    long aSideMinCardinality;
+    long aSideMaxCardinality;
+    String bSideAssociationName;
+    String bSideMOType;
+    String bSideModule;
+    long bSideMinCardinality;
+    long bSideMaxCardinality;
+    String associationKind;
+    boolean connectSameEntity;
+    String relationshipDataLocation;
+    String storedAt;
+    String moduleReferenceName;
     @Builder.Default
-    private List<ConsumerData> consumerData = List.of(ConsumerData.builder().name(SOURCE_IDS).dataType(JSONB).defaultValue(
-            "[]").build(), ConsumerData.builder().name(CLASSIFIERS).dataType(JSONB).defaultValue("[]").build(), ConsumerData
-                    .builder().name(DECORATORS).dataType(JSONB).defaultValue("{}").build());
+    List<ConsumerData> consumerData = List.of(ConsumerData.builder().name(SOURCE_IDS).dataType(JSONB).defaultValue("[]")
+            .indexType(IndexType.GIN_TRGM_OPS_ON_LIST_AS_JSONB).build(), ConsumerData.builder().name(CLASSIFIERS).dataType(
+                    JSONB).defaultValue("[]").indexType(IndexType.GIN_TRGM_OPS_ON_LIST_AS_JSONB).build(), ConsumerData
+                            .builder().name(DECORATORS).dataType(JSONB).defaultValue("{}").indexType(IndexType.GIN)
+                            .build());
+    String aSideStoredAt;
+    String bSideStoredAt;
 
     @Override
     public String getTableName() {
@@ -63,16 +67,19 @@
 
     @Override
     public String getColumnsForCopyStatement() {
-        return "(\"name\", \"aSideAssociationName\", \"aSideMOType\", \"aSideMinCardinality\", \"aSideMaxCardinality\", \"bSideAssociationName\", \"bSideMOType\", \"bSideMinCardinality\", \"bSideMaxCardinality\", \"associationKind\", \"relationshipDataLocation\", \"connectSameEntity\", \"moduleReferenceName\")";
+        return "(\"name\", \"aSideAssociationName\", \"aSideMOType\", \"aSideModule\", \"aSideMinCardinality\", \"aSideMaxCardinality\", \"bSideAssociationName\", \"bSideMOType\", \"bSideModule\", \"bSideMinCardinality\", \"bSideMaxCardinality\", \"associationKind\", \"connectSameEntity\", \"relationshipDataLocation\", \"storedAt\", \"moduleReferenceName\")";
     }
 
     @Override
     public String getRecordForCopyStatement() {
         return this.getName() + "\t" + this.getASideAssociationName() + "\t" + this.getASideMOType() + "\t" + this
-                .getASideMinCardinality() + "\t" + this.getASideMaxCardinality() + "\t" + this
-                        .getBSideAssociationName() + "\t" + this.getBSideMOType() + "\t" + this
-                                .getBSideMinCardinality() + "\t" + this.getBSideMaxCardinality() + "\t" + this
-                                        .getAssociationKind() + "\t" + this.getRelationshipDataLocation() + "\t" + this
-                                                .isConnectSameEntity() + "\t" + this.getModuleReferenceName() + "\n";
+                .getASideModule() + "\t" + this.getASideMinCardinality() + "\t" + this
+                        .getASideMaxCardinality() + "\t" + this.getBSideAssociationName() + "\t" + this
+                                .getBSideMOType() + "\t" + this.getBSideModule() + "\t" + this
+                                        .getBSideMinCardinality() + "\t" + this.getBSideMaxCardinality() + "\t" + this
+                                                .getAssociationKind() + "\t" + this.isConnectSameEntity() + "\t" + this
+                                                        .getRelationshipDataLocation() + "\t" + this
+                                                                .getStoredAt() + "\t" + this
+                                                                        .getModuleReferenceName() + "\n";
     }
 }
diff --git a/pgsql-schema-generator/src/main/java/org/oran/smo/teiv/pgsqlgenerator/YangModelProcessor.java b/pgsql-schema-generator/src/main/java/org/oran/smo/teiv/pgsqlgenerator/YangModelProcessor.java
index 87caa91..ff4a9cf 100644
--- a/pgsql-schema-generator/src/main/java/org/oran/smo/teiv/pgsqlgenerator/YangModelProcessor.java
+++ b/pgsql-schema-generator/src/main/java/org/oran/smo/teiv/pgsqlgenerator/YangModelProcessor.java
@@ -24,18 +24,21 @@
 import static org.oran.smo.teiv.pgsqlgenerator.Constants.BIGINT;
 import static org.oran.smo.teiv.pgsqlgenerator.Constants.B_SIDE;
 import static org.oran.smo.teiv.pgsqlgenerator.Constants.DECIMAL;
+import static org.oran.smo.teiv.pgsqlgenerator.Constants.INT;
 import static org.oran.smo.teiv.pgsqlgenerator.Constants.JSONB;
 import static org.oran.smo.teiv.pgsqlgenerator.Constants.RELATION;
 import static org.oran.smo.teiv.pgsqlgenerator.Constants.TEXT;
-import static org.oran.smo.teiv.pgsqlgenerator.Constants.VARCHAR511;
 
 import java.io.File;
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Comparator;
 import java.util.HashMap;
 import java.util.List;
+import java.util.NoSuchElementException;
 import java.util.Optional;
 
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Component;
 
 import org.oran.smo.yangtools.parser.ParserExecutionContext;
@@ -62,6 +65,8 @@
 @Slf4j
 public class YangModelProcessor {
     private final HashMap<String, String> dataTypeMapping;
+    @Value("${exclusions.model-names}")
+    private List<String> excludedModelNames;
     private final YangDeviceModel yangDeviceModel;
     private final ModifyableFindingSeverityCalculator severityCalculator;
     private final FindingsManager findingsManager;
@@ -92,7 +97,7 @@
             {
                 put("string", TEXT);
                 put("uint32", BIGINT);
-                put("int32", BIGINT);
+                put("int32", INT);
                 put("or-teiv-types:_3GPP_FDN_Type", TEXT);
                 put("enumeration", TEXT);
                 put("types3gpp:PLMNId", JSONB);
@@ -124,12 +129,13 @@
             System.out.println("Module Name: " + yModule.getModuleName());
 
             yModule.getLists().stream().forEach(yList -> {
+                final String tableName = getTableName(yModule.getModuleName(), yList.getListName());
                 System.out.printf("\tEntity Name: %s \n", yList.getListName());
                 List<Attribute> attributes = new ArrayList<>();
                 List constraint = List.of(PrimaryKeyConstraint.builder().constraintName("PK_" + yList.getListName() + "_id")
                         .tableName(yList.getListName()).columnToAddConstraintTo("id").build());
 
-                attributes.add(Attribute.builder().name("id").dataType(VARCHAR511).constraints(constraint).build());
+                attributes.add(Attribute.builder().name("id").dataType(TEXT).constraints(constraint).build());
                 yList.getContainers().forEach(yContainer -> {
                     System.out.printf("\t\tContainer Name: %s \n", yContainer.getContainerName());
                     if (yContainer.getContainerName().equals("attributes")) {
@@ -158,8 +164,8 @@
                             System.out.printf("\t\t\t\tData Type: %s \n", dataTypeMapping.get(yLeafList.getType()
                                     .getDataType()));
 
-                            attributes.add(Attribute.builder().name(yLeafList.getLeafListName()).dataType(JSONB)
-                                    .constraints(new ArrayList()).build());
+                            attributes.add(Attribute.builder().name(yLeafList.getLeafListName()).dataType(JSONB).indexType(
+                                    IndexType.GIN_TRGM_OPS_ON_LIST_AS_JSONB).constraints(new ArrayList()).build());
                         });
                         yContainer.getContainers().forEach(container -> {
 
@@ -168,8 +174,16 @@
                             System.out.printf("\t\t\t\tData Type: %s \n", dataTypeMapping.get(container.getUses()
                                     .toString()));
 
-                            attributes.add(Attribute.builder().name(container.getContainerName()).dataType(dataTypeMapping
-                                    .get(container.getUses().toString())).constraints(new ArrayList()).build());
+                            String dataType = dataTypeMapping.get(container.getUses().toString());
+                            Attribute.AttributeBuilder attributeBuilder = Attribute.builder().name(container
+                                    .getContainerName()).dataType(dataType).constraints(new ArrayList());
+                            if (container.getContainerName().equals("geo-location")) {
+                                dataType = dataTypeMapping.get("geo:geo-location");
+                            }
+                            if (dataType.equals(JSONB)) {
+                                attributeBuilder.indexType(IndexType.GIN);
+                            }
+                            attributes.add(attributeBuilder.build());
                         });
                         yContainer.getUses().forEach(uses -> {
 
@@ -182,10 +196,12 @@
                         });
                     }
                 });
-                entities.add(Entity.builder().entityName(yList.getListName()).moduleReferenceName(yangModel
-                        .getYangModelRoot().getModule().getModuleName()).attributes(attributes).build());
+                attributes.sort(Comparator.comparing(Attribute::getName));
+                entities.add(Entity.builder().entityName(yList.getListName()).storedAt(tableName).moduleReferenceName(
+                        yangModel.getYangModelRoot().getModule().getModuleName()).attributes(attributes).build());
             });
         });
+        entities.sort(Comparator.comparing(Entity::getStoredAt));
         return entities;
     }
 
@@ -306,24 +322,50 @@
                                     connectSameEntity = false;
                                 }
 
+                                String aSideModuleName = getSideModuleName(yangModels, aSideMoType);
+                                String bSideModuleName = getSideModuleName(yangModels, bSideMoType);
+
+                                String storedAt = "";
+                                switch (relDataLocation) {
+                                    case A_SIDE -> storedAt = getTableName(aSideModuleName, aSideMoType);
+                                    case B_SIDE -> storedAt = getTableName(bSideModuleName, bSideMoType);
+                                    case RELATION -> storedAt = getTableName(yModule.getDomElement().getValue(),
+                                            yOranSmoTeivBiDirectionalTopologyRelationship.getRelationshipName());
+                                }
+
                                 Relationship relationship = Relationship.builder().name(
                                         yOranSmoTeivBiDirectionalTopologyRelationship.getRelationshipName())
                                         .aSideAssociationName(aSide.getParentStatement().getStatementIdentifier())
-                                        .aSideMOType(aSideMoType).aSideMinCardinality(aSideMinCardinality)
-                                        .aSideMaxCardinality(aSideMaxCardinality).bSideAssociationName(bSide
-                                                .getParentStatement().getStatementIdentifier()).bSideMOType(bSideMoType)
-                                        .bSideMinCardinality(bSideMinCardinality).bSideMaxCardinality(bSideMaxCardinality)
+                                        .aSideMOType(aSideMoType).aSideModule(aSideModuleName).aSideMinCardinality(
+                                                aSideMinCardinality).aSideMaxCardinality(aSideMaxCardinality)
+                                        .bSideAssociationName(bSide.getParentStatement().getStatementIdentifier())
+                                        .bSideMOType(bSideMoType).bSideModule(bSideModuleName).bSideMinCardinality(
+                                                bSideMinCardinality).bSideMaxCardinality(bSideMaxCardinality)
                                         .relationshipDataLocation(relDataLocation).moduleReferenceName(yModule
-                                                .getModuleName()).associationKind(("BI_DIRECTIONAL"))   // Hard coded for now
-                                        .connectSameEntity(connectSameEntity).build();     // Hard coded for now
+                                                .getModuleName()).associationKind(("BI_DIRECTIONAL")).connectSameEntity(
+                                                        connectSameEntity).storedAt(storedAt).aSideStoredAt(getTableName(
+                                                                aSideModuleName, aSideMoType)).bSideStoredAt(getTableName(
+                                                                        bSideModuleName, bSideMoType)).build();     // Hard coded for now
                                 relationships.add(relationship);
                             });
         });
+        relationships.sort(Comparator.comparing(Relationship::getName));
         return relationships;
     }
 
+    private String getSideModuleName(List<YangModel> yangModels, String aSideMoType) {
+        return yangModels.stream().flatMap(ym -> ym.getYangDomDocumentRoot().getChildren().stream()).flatMap(
+                children -> children.getChildren().stream()).filter(child -> child.getValue().equals(aSideMoType)).map(
+                        child -> child.getParentElement().getValue()).findFirst().orElseThrow(
+                                () -> new NoSuchElementException("No module name found for type: " + aSideMoType));
+    }
+
+    private String getTableName(String moduleName, String name) {
+        return moduleName + "_" + name;
+    }
+
     /**
-     * Identify where relationship data should be stored
+     * Identify the type of table in which relationship should be stored.
      */
     private String getRelationshipDataLocation(long aSideMaxCardinality, long bSideMaxCardinality, String aSideMO,
             String bSideMO, String relName) {
diff --git a/pgsql-schema-generator/src/main/java/org/oran/smo/teiv/pgsqlgenerator/YangParser.java b/pgsql-schema-generator/src/main/java/org/oran/smo/teiv/pgsqlgenerator/YangParser.java
index 1b773fc..fdc0d9d 100644
--- a/pgsql-schema-generator/src/main/java/org/oran/smo/teiv/pgsqlgenerator/YangParser.java
+++ b/pgsql-schema-generator/src/main/java/org/oran/smo/teiv/pgsqlgenerator/YangParser.java
@@ -20,9 +20,6 @@
  */
 package org.oran.smo.teiv.pgsqlgenerator;
 
-import static org.oran.smo.teiv.pgsqlgenerator.Constants.BUILT_IN_MODULE_ID;
-import static org.oran.smo.teiv.pgsqlgenerator.Constants.DEFAULT_MODULE_STATUS;
-
 import java.io.IOException;
 import java.nio.charset.StandardCharsets;
 import java.util.ArrayList;
@@ -46,6 +43,7 @@
 import org.oran.smo.yangtools.parser.model.YangModel;
 import org.oran.smo.yangtools.parser.model.statements.AbstractStatement;
 import org.oran.smo.yangtools.parser.model.statements.StatementModuleAndName;
+import org.oran.smo.yangtools.parser.model.yangdom.YangDomElement;
 
 @Slf4j
 @Component
@@ -68,14 +66,34 @@
             String domain = getDomain(moduleOrSubmodule);
             String namespace = getNamespace(moduleOrSubmodule);
             List<String> includedModules = getIncludedModules(moduleOrSubmodule);
+            List<String> availableRelations = getAvailableRelations(moduleOrSubmodule);
+            List<String> availableListElements = getAvailableListElements(moduleOrSubmodule);
             modules.add(Module.builder().name(moduleReferenceName).namespace(namespace).domain(domain).includedModules(
                     includedModules).revision(yangInput.getModuleIdentity().getRevision()).content(new String(yangInput
-                            .getYangInput().getInputStream().readAllBytes(), StandardCharsets.UTF_8)).ownerAppId(
-                                    BUILT_IN_MODULE_ID).status(DEFAULT_MODULE_STATUS).build());
+                            .getYangInput().getInputStream().readAllBytes(), StandardCharsets.UTF_8)).availableListElements(
+                                    availableListElements).availableRelations(availableRelations).availableEntities(
+                                            new ArrayList<>()).build());
         }
         return modules;
     }
 
+    private List<String> getAvailableRelations(AbstractStatement statement) {
+        List<String> includedModules = new ArrayList<>();
+        statement.getChildStatements().forEach(childStatement -> {
+            String domStatement = childStatement.getDomElement().toString();
+            if (domStatement.contains("or-teiv-yext:biDirectionalTopologyRelationship")) {
+                includedModules.add(childStatement.getDomElement().getValue());
+            }
+        });
+        return includedModules;
+    }
+
+    private List<String> getAvailableListElements(AbstractStatement statement) {
+        return statement.getDomElement().getChildren().stream().filter(yangDomElement -> yangDomElement.getName().equals(
+                "list")).map(YangDomElement::getValue).toList();
+
+    }
+
     private String getDomain(AbstractStatement moduleOrSubmodule) {
         AbstractStatement domainStatement = moduleOrSubmodule.getChild(new StatementModuleAndName(
                 "o-ran-smo-teiv-common-yang-extensions", "domain"));
@@ -112,7 +130,7 @@
         final List<YangModel> yangModelInputs = new ArrayList<>();
         try {
             ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver(this.getClass().getClassLoader());
-            Resource[] yangResources = resolver.getResources(yangModelDirectory + "/*.yang");
+            Resource[] yangResources = resolver.getResources(yangModelDirectory + "/**/*.yang");
             for (Resource yangResource : yangResources) {
                 yangModelInputs.add(new YangModel(new ByteArrayYangInput(yangResource.getContentAsByteArray(), Objects
                         .requireNonNull(yangResource.getFilename())), ConformanceType.IMPORT));
diff --git a/pgsql-schema-generator/src/main/java/org/oran/smo/teiv/pgsqlgenerator/grapghgenerator/RelationshipGraphGenerator.java b/pgsql-schema-generator/src/main/java/org/oran/smo/teiv/pgsqlgenerator/grapghgenerator/RelationshipGraphGenerator.java
index 6b76cc1..bec8e3b 100644
--- a/pgsql-schema-generator/src/main/java/org/oran/smo/teiv/pgsqlgenerator/grapghgenerator/RelationshipGraphGenerator.java
+++ b/pgsql-schema-generator/src/main/java/org/oran/smo/teiv/pgsqlgenerator/grapghgenerator/RelationshipGraphGenerator.java
@@ -64,7 +64,7 @@
 
     private void generateGraph(String name, List<Relationship> relationships, List<Entity> entities) throws IOException {
         MutableGraph g = prepareGraph(relationships, entities);
-        File outputFile = new File(graphOutput, name);
+        File outputFile = new File(graphOutput, name + "-rel");
         Graphviz.fromGraph(g).render(Format.SVG).toFile(outputFile);
         log.info("Graph rendered to: {}", outputFile.getAbsolutePath());
     }
diff --git a/pgsql-schema-generator/src/main/java/org/oran/smo/teiv/pgsqlgenerator/schema/BackwardCompatibilityChecker.java b/pgsql-schema-generator/src/main/java/org/oran/smo/teiv/pgsqlgenerator/schema/BackwardCompatibilityChecker.java
index 0b310bf..0fae2fc 100644
--- a/pgsql-schema-generator/src/main/java/org/oran/smo/teiv/pgsqlgenerator/schema/BackwardCompatibilityChecker.java
+++ b/pgsql-schema-generator/src/main/java/org/oran/smo/teiv/pgsqlgenerator/schema/BackwardCompatibilityChecker.java
@@ -24,6 +24,7 @@
 import org.oran.smo.teiv.pgsqlgenerator.ForeignKeyConstraint;
 import org.oran.smo.teiv.pgsqlgenerator.PgSchemaGeneratorException;
 import org.oran.smo.teiv.pgsqlgenerator.PostgresConstraint;
+import org.oran.smo.teiv.pgsqlgenerator.PostgresIndex;
 import org.oran.smo.teiv.pgsqlgenerator.Table;
 import org.oran.smo.teiv.pgsqlgenerator.Relationship;
 
@@ -85,12 +86,24 @@
         }
     }
 
+    public void checkForNBCChangesInConsumerDataSchema(String baselineConsumerDataSchema,
+            String skeletonConsumerDataSchema) {
+        if (!isGreenFieldInstallation) {
+            final List<Table> baselineTables = SchemaParser.extractDataFromBaseline(baselineConsumerDataSchema);
+            final List<Table> skeletonTables = SchemaParser.extractDataFromBaseline(skeletonConsumerDataSchema);
+            checkForNBCChangesInData(baselineTables, skeletonTables);
+        } else {
+            log.info("No NBC checks done as green field installation is enabled");
+        }
+    }
+
     private void verifyTableColumns(List<Column> columnsInBaseline, List<Column> columnsInModelSvc, String tableName) {
         columnsInBaseline.forEach(baselineColumn -> {
             Optional<Column> matchingColumn = columnsInModelSvc.stream().filter(modelColumn -> modelColumn.getName().equals(
                     baselineColumn.getName())).findFirst();
             matchingColumn.ifPresentOrElse(modelColumn -> {
                 validateColumnConstraints(baselineColumn, modelColumn, tableName);
+                validateColumnIndexes(baselineColumn, modelColumn, tableName);
                 validateColumnDataType(baselineColumn, modelColumn, tableName);
             }, () -> {
                 throw PgSchemaGeneratorException.nbcChangeIdentifiedException(String.format(
@@ -127,6 +140,32 @@
         }
     }
 
+    private void validateColumnIndexes(Column baselineColumn, Column modelColumn, String tableName) {
+        for (PostgresIndex indexInBaseline : baselineColumn.getPostgresIndexList()) {
+            Optional<PostgresIndex> matchingIndex = modelColumn.getPostgresIndexList().stream().filter(
+                    indexInGenerated -> indexInGenerated.getIndexName().equals(indexInBaseline.getIndexName())).findFirst();
+
+            matchingIndex.ifPresentOrElse(indexInGenerated -> {
+                String indexStatementInBaseline = String.format(indexInBaseline.getIndexType().getCreateIndexStmt(),
+                        indexInBaseline.getIndexName(), indexInBaseline.getTableNameToAddIndexTo(), indexInBaseline
+                                .getColumnNameToAddIndexTo());
+                String indexStatementInGenerated = String.format(indexInGenerated.getIndexType().getCreateIndexStmt(),
+                        indexInGenerated.getIndexName(), indexInGenerated.getTableNameToAddIndexTo(), indexInGenerated
+                                .getColumnNameToAddIndexTo());
+                if (!indexStatementInGenerated.equals(indexStatementInBaseline)) {
+                    throw PgSchemaGeneratorException.nbcChangeIdentifiedException(String.format(
+                            "modified/removed index %s for column(%s.%s) present in baseline", indexInBaseline
+                                    .getIndexName(), tableName, baselineColumn.getName()),
+                            new UnsupportedOperationException());
+                }
+            }, () -> {
+                throw PgSchemaGeneratorException.nbcChangeIdentifiedException(String.format(
+                        "modified/removed index %s for column(%s.%s) present in baseline", indexInBaseline.getIndexName(),
+                        tableName, baselineColumn.getName()), new UnsupportedOperationException());
+            });
+        }
+    }
+
     private void validateColumnDataType(Column baselineColumn, Column modelColumn, String tableName) {
         if (!baselineColumn.getDataType().equals(modelColumn.getDataType())) {
             throw PgSchemaGeneratorException.nbcChangeIdentifiedException(String.format(
diff --git a/pgsql-schema-generator/src/main/java/org/oran/smo/teiv/pgsqlgenerator/schema/SchemaParser.java b/pgsql-schema-generator/src/main/java/org/oran/smo/teiv/pgsqlgenerator/schema/SchemaParser.java
index a51fe1e..7dc1d4b 100644
--- a/pgsql-schema-generator/src/main/java/org/oran/smo/teiv/pgsqlgenerator/schema/SchemaParser.java
+++ b/pgsql-schema-generator/src/main/java/org/oran/smo/teiv/pgsqlgenerator/schema/SchemaParser.java
@@ -35,10 +35,12 @@
 import org.apache.commons.lang3.StringUtils;
 
 import org.oran.smo.teiv.pgsqlgenerator.Column;
+import org.oran.smo.teiv.pgsqlgenerator.IndexType;
 import org.oran.smo.teiv.pgsqlgenerator.PostgresConstraint;
 import org.oran.smo.teiv.pgsqlgenerator.ForeignKeyConstraint;
 import org.oran.smo.teiv.pgsqlgenerator.NotNullConstraint;
 import org.oran.smo.teiv.pgsqlgenerator.PgSchemaGeneratorException;
+import org.oran.smo.teiv.pgsqlgenerator.PostgresIndex;
 import org.oran.smo.teiv.pgsqlgenerator.PrimaryKeyConstraint;
 import org.oran.smo.teiv.pgsqlgenerator.Table;
 import org.oran.smo.teiv.pgsqlgenerator.UniqueConstraint;
@@ -74,12 +76,12 @@
                         line = br.readLine();
                         List<String> relData = Arrays.asList(line.replace("\"", "").split("\\s+"));
                         identifiedRelationships.add(Relationship.builder().name(relData.get(0)).aSideAssociationName(relData
-                                .get(1)).aSideMOType(relData.get(2)).aSideMinCardinality(Long.parseLong(relData.get(3)))
-                                .aSideMaxCardinality(Long.parseLong(relData.get(4))).bSideAssociationName(relData.get(5))
-                                .bSideMOType(relData.get(6)).bSideMinCardinality(Long.parseLong(relData.get(7)))
-                                .bSideMaxCardinality(Long.parseLong(relData.get(8))).associationKind(relData.get(9))
-                                .relationshipDataLocation(relData.get(10)).connectSameEntity(Boolean.parseBoolean(relData
-                                        .get(11))).moduleReferenceName(relData.get(12)).build());
+                                .get(1)).aSideMOType(relData.get(2)).aSideMinCardinality(Long.parseLong(relData.get(4)))
+                                .aSideMaxCardinality(Long.parseLong(relData.get(5))).bSideAssociationName(relData.get(6))
+                                .bSideMOType(relData.get(7)).bSideMinCardinality(Long.parseLong(relData.get(9)))
+                                .bSideMaxCardinality(Long.parseLong(relData.get(10))).associationKind(relData.get(11))
+                                .connectSameEntity(Boolean.parseBoolean(relData.get(12))).relationshipDataLocation(relData
+                                        .get(13)).moduleReferenceName(relData.get(15)).build());
                     }
                 }
             } catch (IOException exception) {
@@ -109,6 +111,8 @@
                         extractTableColumns(line, identifiedTables, br);
                     } else if (line.contains("SELECT") && line.contains("ties_data.create_constraint_if_not_exists")) {
                         extractConstraints(identifiedTables, br);
+                    } else if (line.startsWith("CREATE INDEX IF NOT EXISTS")) {
+                        extractIndex(line, identifiedTables);
                     }
                 }
             } catch (IOException exception) {
@@ -218,4 +222,32 @@
         identifiedTables.add(Table.builder().name(entityName).columns(identifiedColumns).build());
     }
 
+    private static void extractIndex(String line, List<org.oran.smo.teiv.pgsqlgenerator.Table> identifiedTables)
+            throws IOException {
+        String[] valuesInQuotes = StringUtils.substringsBetween(line, "\"", "\"");
+        String indexName = valuesInQuotes[0];
+        String tableToAddIndexTo = valuesInQuotes[1];
+        String columnToAddIndexTo = valuesInQuotes[2];
+
+        List<PostgresIndex> postgresIndexList = new ArrayList<>();
+
+        identifiedTables.stream().filter(table -> table.getName().equals(tableToAddIndexTo)).findFirst().flatMap(
+                table -> table.getColumns().stream().filter(column -> column.getName().equals(columnToAddIndexTo))
+                        .findFirst()).ifPresent(column -> {
+                            if (!column.getPostgresIndexList().isEmpty()) {
+                                postgresIndexList.addAll(column.getPostgresIndexList());
+                            }
+                            String createIndexStmt = line.replace(indexName, "%s").replace(tableToAddIndexTo, "%s").replace(
+                                    columnToAddIndexTo, "%s");
+                            for (IndexType indexType : IndexType.values()) {
+                                if (indexType.getCreateIndexStmt().equals(createIndexStmt)) {
+                                    postgresIndexList.add(PostgresIndex.builder().tableNameToAddIndexTo(tableToAddIndexTo)
+                                            .columnNameToAddIndexTo(columnToAddIndexTo).indexName(indexName).indexType(
+                                                    indexType).build());
+                                }
+                            }
+                            column.setPostgresIndexList(postgresIndexList);
+                        });
+    }
+
 }
diff --git a/pgsql-schema-generator/src/main/java/org/oran/smo/teiv/pgsqlgenerator/schema/consumerdata/ConsumerDataSchemaGenerator.java b/pgsql-schema-generator/src/main/java/org/oran/smo/teiv/pgsqlgenerator/schema/consumerdata/ConsumerDataSchemaGenerator.java
new file mode 100644
index 0000000..4f9e185
--- /dev/null
+++ b/pgsql-schema-generator/src/main/java/org/oran/smo/teiv/pgsqlgenerator/schema/consumerdata/ConsumerDataSchemaGenerator.java
@@ -0,0 +1,75 @@
+/*
+ *  ============LICENSE_START=======================================================
+ *  Copyright (C) 2024 Ericsson
+ *  Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ *  ================================================================================
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ *
+ *  SPDX-License-Identifier: Apache-2.0
+ *  ============LICENSE_END=========================================================
+ */
+package org.oran.smo.teiv.pgsqlgenerator.schema.consumerdata;
+
+import java.io.File;
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.nio.file.StandardCopyOption;
+import java.util.List;
+
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+import org.oran.smo.teiv.pgsqlgenerator.Entity;
+import org.oran.smo.teiv.pgsqlgenerator.Module;
+import org.oran.smo.teiv.pgsqlgenerator.PgSchemaGeneratorException;
+import org.oran.smo.teiv.pgsqlgenerator.Relationship;
+import org.oran.smo.teiv.pgsqlgenerator.schema.BackwardCompatibilityChecker;
+import org.oran.smo.teiv.pgsqlgenerator.schema.SchemaGenerator;
+import org.springframework.util.ResourceUtils;
+
+@Component
+@Slf4j
+@RequiredArgsConstructor
+public class ConsumerDataSchemaGenerator extends SchemaGenerator {
+    private final BackwardCompatibilityChecker backwardCompatibilityChecker;
+
+    @Value("${schema.consumer-data.baseline}")
+    private String baselineConsumerDataSchema;
+    @Value("${schema.consumer-data.output}")
+    private String outputConsumerDataSchema;
+    @Value("${schema.consumer-data.skeleton}")
+    private String skeletonConsumerDataSchema;
+
+    @Override
+    protected void prepareSchema() {
+        try {
+            final File skeletonFile = ResourceUtils.getFile("classpath:" + skeletonConsumerDataSchema);
+            backwardCompatibilityChecker.checkForNBCChangesInConsumerDataSchema(baselineConsumerDataSchema, skeletonFile
+                    .getAbsolutePath());
+
+            final Path destinationPath = Paths.get(outputConsumerDataSchema);
+            Files.copy(skeletonFile.toPath(), destinationPath, StandardCopyOption.REPLACE_EXISTING);
+            this.schema = destinationPath.toFile();
+        } catch (IOException exception) {
+            throw PgSchemaGeneratorException.prepareBaselineException("ties.consumer-data", exception);
+        }
+    }
+
+    @Override
+    protected void setSqlStatements(List<Module> modules, List<Entity> entities, List<Relationship> relationships) {
+        //DO-NOTHING
+    }
+}
diff --git a/pgsql-schema-generator/src/main/java/org/oran/smo/teiv/pgsqlgenerator/schema/data/DataSchemaGenerator.java b/pgsql-schema-generator/src/main/java/org/oran/smo/teiv/pgsqlgenerator/schema/data/DataSchemaGenerator.java
index 81845ca..1a39705 100644
--- a/pgsql-schema-generator/src/main/java/org/oran/smo/teiv/pgsqlgenerator/schema/data/DataSchemaGenerator.java
+++ b/pgsql-schema-generator/src/main/java/org/oran/smo/teiv/pgsqlgenerator/schema/data/DataSchemaGenerator.java
@@ -27,6 +27,7 @@
 import java.nio.file.Paths;
 import java.nio.file.StandardCopyOption;
 import java.nio.file.StandardOpenOption;
+import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 
@@ -76,9 +77,15 @@
                 log.info("Baseline EXISTS!!");
                 Path sourcePath = baselineDataSchemaFile.toPath();
                 List<String> stmts = Files.readAllLines(sourcePath);
-                List<String> commitExcludedStmts = stmts.stream().filter(line -> !line.equals("COMMIT;")).toList();
+                List<String> analyzeAndCommitExcludedStmts = new ArrayList<>();
+                for (String line : stmts) {
+                    if (line.startsWith("ANALYZE") || line.equals("COMMIT;")) {
+                        break;
+                    }
+                    analyzeAndCommitExcludedStmts.add(line);
+                }
 
-                Files.write(Paths.get(dataSchemaFileName), commitExcludedStmts, StandardOpenOption.CREATE,
+                Files.write(Paths.get(dataSchemaFileName), analyzeAndCommitExcludedStmts, StandardOpenOption.CREATE,
                         StandardOpenOption.TRUNCATE_EXISTING);
             }
             this.schema = newDataSchema;
@@ -102,8 +109,16 @@
                 tablesFromBaselineSql);
         // Generate schema from differences
         StringBuilder generatedSchema = dataSchemaHelper.generateSchemaFromDifferences(differences);
-        generatedSchema.append("\nCOMMIT;\n");
+        generatedSchema.append(generateAnalyzeTableStatement(tablesFromModelSvc));
+        generatedSchema.append("COMMIT;\n");
         this.sqlStatements = generatedSchema.toString();
     }
 
+    private StringBuilder generateAnalyzeTableStatement(List<Table> tablesFromModelSvc) {
+        StringBuilder analyzeTableStmt = new StringBuilder();
+        tablesFromModelSvc.forEach(table -> analyzeTableStmt.append(String.format("ANALYZE ties_data.\"%s\";%n%n", table
+                .getName())));
+        return analyzeTableStmt;
+    }
+
 }
diff --git a/pgsql-schema-generator/src/main/java/org/oran/smo/teiv/pgsqlgenerator/schema/data/DataSchemaHelper.java b/pgsql-schema-generator/src/main/java/org/oran/smo/teiv/pgsqlgenerator/schema/data/DataSchemaHelper.java
index ca29e4c..84d4a57 100644
--- a/pgsql-schema-generator/src/main/java/org/oran/smo/teiv/pgsqlgenerator/schema/data/DataSchemaHelper.java
+++ b/pgsql-schema-generator/src/main/java/org/oran/smo/teiv/pgsqlgenerator/schema/data/DataSchemaHelper.java
@@ -23,6 +23,7 @@
 import java.util.List;
 import java.util.Map;
 
+import org.oran.smo.teiv.pgsqlgenerator.PostgresIndex;
 import org.springframework.stereotype.Component;
 
 import lombok.extern.slf4j.Slf4j;
@@ -38,8 +39,12 @@
 import static org.oran.smo.teiv.pgsqlgenerator.Constants.CREATE;
 import static org.oran.smo.teiv.pgsqlgenerator.Constants.ALTER;
 import static org.oran.smo.teiv.pgsqlgenerator.Constants.ALTER_TABLE_TIES_DATA_S_ADD_CONSTRAINT_S;
+import static org.oran.smo.teiv.pgsqlgenerator.Constants.DEFAULT;
+import static org.oran.smo.teiv.pgsqlgenerator.Constants.GEOGRAPHY;
+import static org.oran.smo.teiv.pgsqlgenerator.Constants.GEO_LOCATION;
 import static org.oran.smo.teiv.pgsqlgenerator.Constants.ID;
 import static org.oran.smo.teiv.pgsqlgenerator.Constants.ALTER_TABLE_TIES_DATA_S;
+import static org.oran.smo.teiv.pgsqlgenerator.Constants.INDEX;
 
 @Slf4j
 @Component
@@ -59,9 +64,10 @@
         } else {
             for (Map.Entry<String, List<Table>> entry : differences.entrySet()) {
                 switch (entry.getKey()) {
-                    case CREATE -> generatedSchema.append(generateCreateStatementsFromDifferences(entry.getValue()));
+                    case DEFAULT -> generatedSchema.append(generateDefaultStatementsFromDifferences(entry.getValue()));
+                    case INDEX -> generatedSchema.append(generateIndexStatementsFromDifferences(entry.getValue()));
                     case ALTER -> generatedSchema.append(generateAlterStatementsFromDifferences(entry.getValue()));
-                    default -> generatedSchema.append(generateDefaultStatementsFromDifferences(entry.getValue()));
+                    case CREATE -> generatedSchema.append(generateCreateStatementsFromDifferences(entry.getValue()));
                 }
             }
         }
@@ -75,15 +81,17 @@
         StringBuilder storeSchemaForCreateStatements = new StringBuilder();
         StringBuilder storeAlterStatementsForPrimaryKeyConstraints = new StringBuilder();
         StringBuilder storeAlterStatementsForAllOtherConstraints = new StringBuilder();
+        StringBuilder storeIndexStatements = new StringBuilder();
         for (Table table : tables) {
             storeAlterStatementsForPrimaryKeyConstraints.append(generateAlterStatementsForPrimaryKeyConstraints(table
                     .getColumns()));
             storeAlterStatementsForAllOtherConstraints.append(generateAlterStatementsForAllOtherConstraints(table
                     .getColumns()));
+            storeIndexStatements.append(generateIndexStatementForColumns(table.getColumns()));
             storeSchemaForCreateStatements.append(generateCreateTableStatements(table.getColumns(), table.getName()));
         }
         storeSchemaForCreateStatements.append(storeAlterStatementsForPrimaryKeyConstraints).append(
-                storeAlterStatementsForAllOtherConstraints);
+                storeAlterStatementsForAllOtherConstraints).append(storeIndexStatements);
         return storeSchemaForCreateStatements;
     }
 
@@ -158,6 +166,16 @@
                 postgresConstraint.getTableToAddConstraintTo(), postgresConstraint.getConstraintName(), constraintSql);
     }
 
+    private StringBuilder generateIndexStatementForColumns(List<Column> columns) {
+        StringBuilder indexStmt = new StringBuilder();
+        columns.forEach(column -> {
+            column.getPostgresIndexList().forEach(postgresIndex -> {
+                indexStmt.append(generateIndexStatement(postgresIndex));
+            });
+        });
+        return indexStmt;
+    }
+
     private String generateConstraintSql(PostgresConstraint postgresConstraint) {
         if (postgresConstraint instanceof PrimaryKeyConstraint) {
             return String.format(ALTER_TABLE_TIES_DATA_S_ADD_CONSTRAINT_S + "PRIMARY KEY (\"%s\")", postgresConstraint
@@ -189,28 +207,32 @@
         StringBuilder storeSchemaForAlterStatements = new StringBuilder();
         StringBuilder storeAlterStatementsForPrimaryKeyConstraints = new StringBuilder();
         StringBuilder storeAlterStatementsForAllOtherConstraints = new StringBuilder();
+        StringBuilder storeIndexStatements = new StringBuilder();
         for (Table table : tables) {
             storeSchemaForAlterStatements.append(generateAlterStatements(table.getColumns(), table.getName()));
             storeAlterStatementsForPrimaryKeyConstraints.append(generateAlterStatementsForPrimaryKeyConstraints(table
                     .getColumns()));
             storeAlterStatementsForAllOtherConstraints.append(generateAlterStatementsForAllOtherConstraints(table
                     .getColumns()));
+            storeIndexStatements.append(generateIndexStatementForColumns(table.getColumns()));
         }
         return storeSchemaForAlterStatements.append(storeAlterStatementsForPrimaryKeyConstraints).append(
-                storeAlterStatementsForAllOtherConstraints);
+                storeAlterStatementsForAllOtherConstraints).append(storeIndexStatements);
     }
 
     /**
      * Generates SQL statements for altering tables based on mapped entity attributes.
      */
     private StringBuilder generateAlterStatements(List<Column> columns, String tableName) {
-
         StringBuilder storeSchema = new StringBuilder();
         for (Column newColumn : columns) {
-            if (newColumn.getName().equals("geo-location")) {
-                newColumn.setDataType("\"geography\"");
+            if (newColumn.getName().equals(GEO_LOCATION)) {
+                newColumn.setDataType(GEOGRAPHY);
             }
             storeSchema.append(generateAlterTableStatements(newColumn, tableName));
+            if (newColumn.getDefaultValue() != null) {
+                storeSchema.append(generateDefaultValueStatements(newColumn, tableName));
+            }
         }
         return storeSchema;
     }
@@ -239,4 +261,25 @@
         return new StringBuilder(String.format(ALTER_TABLE_TIES_DATA_S + "ADD COLUMN IF NOT EXISTS \"%s\" %s;%n%n",
                 tableName, newColumn.getName(), newColumn.getDataType()));
     }
+
+    private StringBuilder generateIndexStatementsFromDifferences(List<Table> tables) {
+        StringBuilder storeSchemaForIndexStatements = new StringBuilder();
+        for (Table table : tables) {
+            StringBuilder storeSchema = new StringBuilder();
+            for (Column column : table.getColumns()) {
+                if (!column.getPostgresIndexList().isEmpty()) {
+                    column.getPostgresIndexList().forEach(index -> {
+                        storeSchema.append(generateIndexStatement(index));
+                    });
+                }
+            }
+            storeSchemaForIndexStatements.append(storeSchema);
+        }
+        return storeSchemaForIndexStatements;
+    }
+
+    private String generateIndexStatement(PostgresIndex postgresIndex) {
+        return String.format(postgresIndex.getIndexType().getCreateIndexStmt(), postgresIndex.getIndexName(), postgresIndex
+                .getTableNameToAddIndexTo(), postgresIndex.getColumnNameToAddIndexTo()) + "\n\n";
+    }
 }
diff --git a/pgsql-schema-generator/src/main/java/org/oran/smo/teiv/pgsqlgenerator/schema/data/ModelComparator.java b/pgsql-schema-generator/src/main/java/org/oran/smo/teiv/pgsqlgenerator/schema/data/ModelComparator.java
index fa0423d..2eb3281 100644
--- a/pgsql-schema-generator/src/main/java/org/oran/smo/teiv/pgsqlgenerator/schema/data/ModelComparator.java
+++ b/pgsql-schema-generator/src/main/java/org/oran/smo/teiv/pgsqlgenerator/schema/data/ModelComparator.java
@@ -23,15 +23,18 @@
 import static org.oran.smo.teiv.pgsqlgenerator.Constants.ALTER;
 import static org.oran.smo.teiv.pgsqlgenerator.Constants.CREATE;
 import static org.oran.smo.teiv.pgsqlgenerator.Constants.DEFAULT;
+import static org.oran.smo.teiv.pgsqlgenerator.Constants.INDEX;
 
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.Comparator;
-import java.util.HashMap;
+import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Objects;
 
+import org.oran.smo.teiv.pgsqlgenerator.IndexType;
+import org.oran.smo.teiv.pgsqlgenerator.PostgresIndex;
 import org.springframework.stereotype.Component;
 
 import org.oran.smo.teiv.pgsqlgenerator.Column;
@@ -68,10 +71,11 @@
     }
 
     private Map<String, List<Table>> identifiedModelChangeMapping() {
-        Map<String, List<Table>> storeIdentifiedChangesToModels = new HashMap<>();
-        storeIdentifiedChangesToModels.put(CREATE, new ArrayList<>());
-        storeIdentifiedChangesToModels.put(ALTER, new ArrayList<>());
+        Map<String, List<Table>> storeIdentifiedChangesToModels = new LinkedHashMap<>();
         storeIdentifiedChangesToModels.put(DEFAULT, new ArrayList<>());
+        storeIdentifiedChangesToModels.put(INDEX, new ArrayList<>());
+        storeIdentifiedChangesToModels.put(ALTER, new ArrayList<>());
+        storeIdentifiedChangesToModels.put(CREATE, new ArrayList<>());
         return storeIdentifiedChangesToModels;
     }
 
@@ -108,6 +112,8 @@
                         }
                         detectAndStoreDefaultValueChanges(tableFromModelService.getName(), columnsInBaseline,
                                 columnsFromModuleSvc);
+                        detectAndStoreNewlyAddedIndex(tableFromModelService.getName(), columnsInBaseline,
+                                columnsFromModuleSvc);
                     });
         });
     }
@@ -124,13 +130,8 @@
                 columnsInBaseline).contains(columnInGenerated.getName())).toList();
         identifiedChangesToModels.get(ALTER).add(Table.builder().name(tableName).columns(newColumns.stream().map(
                 column -> Column.builder().name(column.getName()).dataType(column.getDataType()).postgresConstraints(column
-                        .getPostgresConstraints()).build()).toList()).build());
-        List<Column> columnsWithDefaultValues = newColumns.stream().filter(columnIdentified -> columnIdentified
-                .getDefaultValue() != null).toList();
-        if (!columnsWithDefaultValues.isEmpty()) {
-            identifiedChangesToModels.get(DEFAULT).add(Table.builder().name(tableName).columns(columnsWithDefaultValues)
-                    .build());
-        }
+                        .getPostgresConstraints()).defaultValue(column.getDefaultValue()).postgresIndexList(column
+                                .getPostgresIndexList()).build()).toList()).build());
     }
 
     /**
@@ -153,6 +154,30 @@
         }
     }
 
+    private void detectAndStoreNewlyAddedIndex(String tableName, List<Column> columnsInBaseline,
+            List<Column> columnsFromModuleSvc) {
+        List<Column> columnList = new ArrayList<>();
+        columnsInBaseline.forEach(columnInBaseline -> columnsFromModuleSvc.forEach(columnInGenerated -> {
+            if (columnInGenerated.getName().equals(columnInBaseline.getName())) {
+                List<IndexType> indexInBaselineSchema = columnInBaseline.getPostgresIndexList().stream().map(
+                        PostgresIndex::getIndexType).toList();
+                List<PostgresIndex> postgresIndexList = new ArrayList<>();
+                columnInGenerated.getPostgresIndexList().forEach(postgresIndex -> {
+                    if (!indexInBaselineSchema.contains(postgresIndex.getIndexType())) {
+                        postgresIndexList.add(postgresIndex);
+                    }
+                });
+                if (!postgresIndexList.isEmpty()) {
+                    columnInGenerated.setPostgresIndexList(postgresIndexList);
+                    columnList.add(columnInGenerated);
+                }
+            }
+        }));
+        if (!columnList.isEmpty()) {
+            identifiedChangesToModels.get(INDEX).add(Table.builder().name(tableName).columns(columnList).build());
+        }
+    }
+
     private List<String> getListOfAllColumns(List<Column> columns) {
         List<String> allColumns = new ArrayList<>();
         for (Column col : columns) {
diff --git a/pgsql-schema-generator/src/main/java/org/oran/smo/teiv/pgsqlgenerator/schema/data/TableBuilder.java b/pgsql-schema-generator/src/main/java/org/oran/smo/teiv/pgsqlgenerator/schema/data/TableBuilder.java
index ce3f579..d085339 100644
--- a/pgsql-schema-generator/src/main/java/org/oran/smo/teiv/pgsqlgenerator/schema/data/TableBuilder.java
+++ b/pgsql-schema-generator/src/main/java/org/oran/smo/teiv/pgsqlgenerator/schema/data/TableBuilder.java
@@ -27,16 +27,16 @@
 import static org.oran.smo.teiv.pgsqlgenerator.Constants.CONSUMER_DATA;
 import static org.oran.smo.teiv.pgsqlgenerator.Constants.FOREIGN_KEY;
 import static org.oran.smo.teiv.pgsqlgenerator.Constants.ID;
+import static org.oran.smo.teiv.pgsqlgenerator.Constants.INDEX;
+import static org.oran.smo.teiv.pgsqlgenerator.Constants.INDEX_PREFIX;
 import static org.oran.smo.teiv.pgsqlgenerator.Constants.NO_PREFIX;
 import static org.oran.smo.teiv.pgsqlgenerator.Constants.PRIMARY_KEY;
 import static org.oran.smo.teiv.pgsqlgenerator.Constants.REL_CD;
 import static org.oran.smo.teiv.pgsqlgenerator.Constants.REL_FK;
 import static org.oran.smo.teiv.pgsqlgenerator.Constants.REL_ID;
 import static org.oran.smo.teiv.pgsqlgenerator.Constants.TABLE;
+import static org.oran.smo.teiv.pgsqlgenerator.Constants.TEXT;
 import static org.oran.smo.teiv.pgsqlgenerator.Constants.UNIQUE;
-import static org.oran.smo.teiv.pgsqlgenerator.Constants.VARCHAR511;
-import static org.oran.smo.teiv.pgsqlgenerator.Constants.A_SIDE;
-import static org.oran.smo.teiv.pgsqlgenerator.Constants.B_SIDE;
 import static org.oran.smo.teiv.pgsqlgenerator.Constants.RELATION;
 
 import java.util.ArrayList;
@@ -48,6 +48,8 @@
 import java.util.stream.Collectors;
 
 import org.oran.smo.teiv.pgsqlgenerator.ForeignKeyConstraint;
+import org.oran.smo.teiv.pgsqlgenerator.IndexType;
+import org.oran.smo.teiv.pgsqlgenerator.PostgresIndex;
 import org.oran.smo.teiv.pgsqlgenerator.PrimaryKeyConstraint;
 import org.springframework.stereotype.Component;
 
@@ -80,30 +82,23 @@
      */
     public List<Table> getTables(List<Entity> entities, List<Relationship> relationships) {
         // Create table from entities and relationships
-        Map<String, List<Column>> tableFromMSvc = new HashMap<>();
+        Map<String, List<Column>> tablesFromModelSvc = new HashMap<>();
 
         entities.forEach(entity -> {
-            String tableName = entity.getEntityName();
+            String tableName = entity.getStoredAt();
             String hashedTableName = hashInfoDataGenerator.generateHashAndRegisterTableRow(NO_PREFIX, tableName, TABLE);
-            tableFromMSvc.put(hashedTableName, getColumnsByEntity(entity, hashedTableName));
+            tablesFromModelSvc.put(hashedTableName, getColumnsByEntity(entity, hashedTableName));
         });
 
         relationships.forEach(relationship -> {
-            String tableName = "";
-            switch (relationship.getRelationshipDataLocation()) {
-                case A_SIDE -> tableName = relationship.getASideMOType();
-                case B_SIDE -> tableName = relationship.getBSideMOType();
-                case RELATION -> tableName = relationship.getName();
-                default -> log.error(String.format("Relationship with name %s cannot be mapped", relationship.getName()));
-            }
+            String tableName = relationship.getStoredAt();
             String hashedTableName = hashInfoDataGenerator.generateHashAndRegisterTableRow(NO_PREFIX, tableName, TABLE);
-
-            tableFromMSvc.computeIfAbsent(hashedTableName, k -> new ArrayList<>()).addAll(getColumnsByRelationship(
+            tablesFromModelSvc.computeIfAbsent(hashedTableName, k -> new ArrayList<>()).addAll(getColumnsByRelationship(
                     relationship, tableName, hashedTableName));
         });
 
-        return tableFromMSvc.entrySet().stream().map(entry -> Table.builder().name(entry.getKey()).columns(entry.getValue())
-                .build()).collect(Collectors.toList());
+        return tablesFromModelSvc.entrySet().stream().map(entry -> Table.builder().name(entry.getKey()).columns(entry
+                .getValue()).build()).collect(Collectors.toList());
     }
 
     private List<Column> getColumnsByEntity(Entity entity, String hashedTableName) {
@@ -113,14 +108,18 @@
             String hashedAttributeName = hashInfoDataGenerator.generateHashAndRegisterTableRow(NO_PREFIX, attributeName,
                     COLUMN);
             return Column.builder().name(hashedAttributeName).dataType(attribute.getDataType()).postgresConstraints(
-                    getConstraintsForColumn(entity.getEntityName(), hashedTableName, attribute.getConstraints(),
-                            attributeName, hashedAttributeName)).defaultValue(attribute.getDefaultValue()).build();
+                    getConstraintsForColumn(entity.getStoredAt(), hashedTableName, attribute.getConstraints(),
+                            attributeName, hashedAttributeName)).defaultValue(attribute.getDefaultValue())
+                    .postgresIndexList(getIndexesForColumn(entity.getStoredAt(), hashedTableName, attributeName,
+                            hashedAttributeName, attribute.getIndexTypes())).build();
         }).toList());
         entityCols.addAll(entity.getConsumerData().stream().map(cd -> {
+            String attributeName = CONSUMER_DATA + cd.getName();
             String hashedAttributeName = hashInfoDataGenerator.generateHashAndRegisterTableRow(CONSUMER_DATA, cd.getName(),
                     COLUMN);
             return Column.builder().name(hashedAttributeName).dataType(cd.getDataType()).defaultValue(cd.getDefaultValue())
-                    .build();
+                    .postgresIndexList(getIndexesForColumn(entity.getStoredAt(), hashedTableName, attributeName,
+                            hashedAttributeName, cd.getIndexTypes())).build();
         }).toList());
         return entityCols;
     }
@@ -137,44 +136,46 @@
             String hashedTableName) {
         List<Column> relColumns = new ArrayList<>();
 
-        final String associationEndpointName = tableName.equals(rel.getASideMOType()) ?
+        final String associationEndpointName = tableName.equals(rel.getASideStoredAt()) ?
                 rel.getASideAssociationName() :
                 rel.getBSideAssociationName();
         final String relFk = REL_FK + associationEndpointName;
         final String relId = REL_ID + rel.getName();
 
-        String hashedTableNameASide = hashInfoDataGenerator.generateHashAndRegisterTableRow(NO_PREFIX, rel.getASideMOType(),
-                TABLE);
-        String hashedTableNameBSide = hashInfoDataGenerator.generateHashAndRegisterTableRow(NO_PREFIX, rel.getBSideMOType(),
-                TABLE);
-        final String hashedReferenceTable = tableName.equals(hashedTableNameASide) ?
+        String hashedTableNameASide = hashInfoDataGenerator.generateHashAndRegisterTableRow(NO_PREFIX, rel
+                .getASideStoredAt(), TABLE);
+        String hashedTableNameBSide = hashInfoDataGenerator.generateHashAndRegisterTableRow(NO_PREFIX, rel
+                .getBSideStoredAt(), TABLE);
+        final String hashedReferenceTable = hashedTableName.equals(hashedTableNameASide) ?
                 hashedTableNameBSide :
                 hashedTableNameASide;
         final String hashedRelId = hashInfoDataGenerator.generateHashAndRegisterTableRow(REL_ID, rel.getName(), COLUMN);
         final String hashedRelFk = hashInfoDataGenerator.generateHashAndRegisterTableRow(REL_FK, associationEndpointName,
                 COLUMN);
 
-        relColumns.add(Column.builder().name(hashedRelFk).dataType(VARCHAR511).postgresConstraints(new ArrayList<>(List.of(
+        relColumns.add(Column.builder().name(hashedRelFk).dataType(TEXT).postgresConstraints(new ArrayList<>(List.of(
                 createForeignKeyConstraints(tableName, hashedTableName, hashedReferenceTable, relFk, hashedRelFk))))
                 .build());
 
-        relColumns.add(Column.builder().name(hashedRelId).dataType(VARCHAR511).postgresConstraints(new ArrayList<>(List.of(
+        relColumns.add(Column.builder().name(hashedRelId).dataType(TEXT).postgresConstraints(new ArrayList<>(List.of(
                 createUniqueConstraints(tableName, hashedTableName, relId, hashedRelId)))).build());
         rel.getConsumerData().forEach(cd -> {
-            final String cdColumnName = hashInfoDataGenerator.generateHashAndRegisterTableRow(REL_CD, cd
-                    .getName() + "_" + rel.getName(), COLUMN);
-            relColumns.add(Column.builder().name(cdColumnName).dataType(cd.getDataType()).defaultValue(cd.getDefaultValue())
-                    .build());
+            final String columnNameWithoutPrefix = cd.getName() + "_" + rel.getName();
+            final String columnName = REL_CD + columnNameWithoutPrefix;
+            final String hashedColumnName = hashInfoDataGenerator.generateHashAndRegisterTableRow(REL_CD,
+                    columnNameWithoutPrefix, COLUMN);
+            relColumns.add(Column.builder().name(hashedColumnName).dataType(cd.getDataType()).defaultValue(cd
+                    .getDefaultValue()).postgresIndexList(getIndexesForColumn(tableName, hashedTableName, columnName,
+                            hashedColumnName, cd.getIndexTypes())).build());
         });
         return relColumns;
     }
 
     private List<Column> createRelationshipColumnsForRelationTables(Relationship rel, String tableName,
             String hashedTableName) {
-
-        String hashedASideMOType = hashInfoDataGenerator.generateHashAndRegisterTableRow(NO_PREFIX, rel.getASideMOType(),
+        String hashedASideMOType = hashInfoDataGenerator.generateHashAndRegisterTableRow(NO_PREFIX, rel.getASideStoredAt(),
                 TABLE);
-        String hashedBSideMOType = hashInfoDataGenerator.generateHashAndRegisterTableRow(NO_PREFIX, rel.getBSideMOType(),
+        String hashedBSideMOType = hashInfoDataGenerator.generateHashAndRegisterTableRow(NO_PREFIX, rel.getBSideStoredAt(),
                 TABLE);
 
         final String relASide = A_SIDE_PREFIX + rel.getASideMOType();
@@ -183,40 +184,55 @@
         final String relBSide = B_SIDE_PREFIX + rel.getBSideMOType();
         final String hashedRelBSide = hashInfoDataGenerator.generateHashAndRegisterTableRow(B_SIDE_PREFIX, rel
                 .getBSideMOType(), COLUMN);
-        List<Column> relColumns = new ArrayList<>(Arrays.asList(Column.builder().name(ID).dataType(VARCHAR511)
+        List<Column> relColumns = new ArrayList<>(Arrays.asList(Column.builder().name(ID).dataType(TEXT)
                 .postgresConstraints(new ArrayList<>(List.of(createPrimaryKeyConstraints(tableName, hashedTableName, ID))))
-                .build(), Column.builder().name(hashedRelASide).dataType(VARCHAR511).postgresConstraints(new ArrayList<>(
-                        List.of(createForeignKeyConstraints(tableName, hashedTableName, hashedASideMOType, relASide,
-                                hashedRelASide)))).build(), Column.builder().name(hashedRelBSide).dataType(VARCHAR511)
+                .build(), Column.builder().name(hashedRelASide).dataType(TEXT).postgresConstraints(new ArrayList<>(List.of(
+                        createForeignKeyConstraints(tableName, hashedTableName, hashedASideMOType, relASide,
+                                hashedRelASide)))).build(), Column.builder().name(hashedRelBSide).dataType(TEXT)
                                         .postgresConstraints(new ArrayList<>(List.of(createForeignKeyConstraints(tableName,
                                                 hashedTableName, hashedBSideMOType, relBSide, hashedRelBSide)))).build()));
         rel.getConsumerData().forEach(cd -> {
-            final String columnName = hashInfoDataGenerator.generateHashAndRegisterTableRow(CONSUMER_DATA, cd.getName(),
-                    COLUMN);
-            relColumns.add(Column.builder().name(columnName).dataType(cd.getDataType()).defaultValue(cd.getDefaultValue())
-                    .build());
+            final String columnName = CONSUMER_DATA + cd.getName();
+            final String hashedColumnName = hashInfoDataGenerator.generateHashAndRegisterTableRow(CONSUMER_DATA, cd
+                    .getName(), COLUMN);
+            relColumns.add(Column.builder().name(hashedColumnName).dataType(cd.getDataType()).defaultValue(cd
+                    .getDefaultValue()).postgresIndexList(getIndexesForColumn(tableName, hashedTableName, columnName,
+                            hashedColumnName, cd.getIndexTypes())).build());
         });
         return relColumns;
     }
 
     private Collection<PostgresConstraint> getConstraintsForColumn(String tableName, String hashedTableName,
-            Collection<Object> constraintsFromEModel, String attributeName, String hashedAttributeName) {
+            Collection<Object> constraintsFromModel, String attributeName, String hashedAttributeName) {
         Collection<PostgresConstraint> postgresConstraintCollection = new ArrayList<>();
-        if (constraintsFromEModel != null) {
-            if (constraintsFromEModel.stream().anyMatch(PrimaryKeyConstraint.class::isInstance)) {
+        if (constraintsFromModel != null && !constraintsFromModel.isEmpty()) {
+            if (constraintsFromModel.stream().anyMatch(PrimaryKeyConstraint.class::isInstance)) {
                 if (attributeName.equals(ID)) {
                     postgresConstraintCollection.add(createPrimaryKeyConstraints(tableName, hashedTableName,
                             attributeName));
                 }
             }
-            //            if (constraintsFromEModel.stream().anyMatch(<any-other-constraint>.class::isInstance)) {
+            //            if (constraintsFromModel.stream().anyMatch(<any-other-constraint>.class::isInstance)) {
             //                postgresConstraintCollection.add(createUniqueConstraints(tableName, hashedTableName, attributeName,
-            //                        hashedAttributeName));
+            //                    hashedAttributeName));
             //            }
         }
         return postgresConstraintCollection;
     }
 
+    private List<PostgresIndex> getIndexesForColumn(String tableName, String hashedTableName, String attributeName,
+            String hashedAttributeName, List<IndexType> indexTypes) {
+        List<PostgresIndex> postgresIndexList = new ArrayList<>();
+        indexTypes.forEach(indexType -> {
+            //IndexName - IDX_<indexType>_<tableName>_<columnName>
+            final String hashedIndexName = hashInfoDataGenerator.generateHashAndRegisterTableRow(INDEX_PREFIX, String
+                    .format("%s_%s_%s", indexType.name(), tableName, attributeName), INDEX);
+            postgresIndexList.add(PostgresIndex.builder().tableNameToAddIndexTo(hashedTableName).columnNameToAddIndexTo(
+                    hashedAttributeName).indexName(hashedIndexName).indexType(indexType).build());
+        });
+        return postgresIndexList;
+    }
+
     private PostgresConstraint createForeignKeyConstraints(String tableToAddForeignKeyTo,
             String hashedTableToAddForeignKeyTo, String hashedReferenceTable, String columnName, String hashedColumnName) {
         String constraintName = hashInfoDataGenerator.generateHashAndRegisterTableRow(FOREIGN_KEY,
diff --git a/pgsql-schema-generator/src/main/java/org/oran/smo/teiv/pgsqlgenerator/schema/model/HashInfoDataGenerator.java b/pgsql-schema-generator/src/main/java/org/oran/smo/teiv/pgsqlgenerator/schema/model/HashInfoDataGenerator.java
index 771baee..aaa5988 100644
--- a/pgsql-schema-generator/src/main/java/org/oran/smo/teiv/pgsqlgenerator/schema/model/HashInfoDataGenerator.java
+++ b/pgsql-schema-generator/src/main/java/org/oran/smo/teiv/pgsqlgenerator/schema/model/HashInfoDataGenerator.java
@@ -40,7 +40,7 @@
 @Getter
 @Slf4j
 public class HashInfoDataGenerator {
-
+    private static final int POSTGRES_MAX_IDENTIFIER_LENGTH = 63;
     private final Set<HashInfoEntity> hashInfoRowsList = new HashSet<>();
 
     /**
@@ -56,7 +56,7 @@
      */
     public String generateHashAndRegisterTableRow(String prefix, String name, String type) {
         String hashedValue;
-        if (prefix.length() + name.length() < 64) {
+        if (prefix.length() + name.length() <= POSTGRES_MAX_IDENTIFIER_LENGTH) {
             hashInfoRowsList.add(HashInfoEntity.builder().name(prefix + name).hashedValue(prefix + name).type(type)
                     .build());
             return prefix + name;
diff --git a/pgsql-schema-generator/src/main/java/org/oran/smo/teiv/pgsqlgenerator/schema/model/ModelSchemaGenerator.java b/pgsql-schema-generator/src/main/java/org/oran/smo/teiv/pgsqlgenerator/schema/model/ModelSchemaGenerator.java
index 10eb426..34ad33e 100644
--- a/pgsql-schema-generator/src/main/java/org/oran/smo/teiv/pgsqlgenerator/schema/model/ModelSchemaGenerator.java
+++ b/pgsql-schema-generator/src/main/java/org/oran/smo/teiv/pgsqlgenerator/schema/model/ModelSchemaGenerator.java
@@ -24,8 +24,11 @@
 import java.io.IOException;
 import java.nio.file.Files;
 import java.nio.file.StandardCopyOption;
+import java.util.ArrayList;
+import java.util.Comparator;
 import java.util.List;
 
+import org.oran.smo.teiv.pgsqlgenerator.HashInfoEntity;
 import org.oran.smo.teiv.pgsqlgenerator.schema.BackwardCompatibilityChecker;
 import org.oran.smo.teiv.pgsqlgenerator.schema.SchemaParser;
 import org.springframework.beans.factory.annotation.Value;
@@ -86,7 +89,11 @@
             backwardCompatibilityChecker.checkForNBCChangesInModel(relFromBaselineSql, relationships);
         }
         StringBuilder tiesModelSql = new StringBuilder();
-        tiesModelSql.append(prepareCopyStatement(hashInfoDataGenerator.getHashInfoRowsList().stream().toList()));
+
+        List<HashInfoEntity> hashInfoList = new ArrayList<>(hashInfoDataGenerator.getHashInfoRowsList().stream().toList());
+        hashInfoList.sort(Comparator.comparing(HashInfoEntity::getName));
+
+        tiesModelSql.append(prepareCopyStatement(hashInfoList));
         tiesModelSql.append(prepareCopyStatement(modules));
         tiesModelSql.append(prepareCopyStatement(entities));
         tiesModelSql.append(prepareCopyStatement(relationships));
diff --git a/pgsql-schema-generator/src/main/resources/application.yaml b/pgsql-schema-generator/src/main/resources/application.yaml
index 1e3f11f..5d47560 100644
--- a/pgsql-schema-generator/src/main/resources/application.yaml
+++ b/pgsql-schema-generator/src/main/resources/application.yaml
@@ -32,6 +32,10 @@
     baseline:
     temp-baseline: target/01_init-oran-smo-teiv-model_baseline.sql
     output: target/01_init-oran-smo-teiv-model.sql
+  consumer-data:
+    skeleton: scripts/02_init-oran-smo-teiv-consumer-data.sql
+    baseline:
+    output: target/02_init-oran-smo-teiv-consumer-data.sql
 exclusions:
   model-names: metadata, decorators
 graphs:
diff --git a/pgsql-schema-generator/src/main/resources/scripts/00_init-oran-smo-teiv-data.sql b/pgsql-schema-generator/src/main/resources/scripts/00_init-oran-smo-teiv-data.sql
index 9be0569..ab5963a 100644
--- a/pgsql-schema-generator/src/main/resources/scripts/00_init-oran-smo-teiv-data.sql
+++ b/pgsql-schema-generator/src/main/resources/scripts/00_init-oran-smo-teiv-data.sql
@@ -23,6 +23,7 @@
 
 CREATE EXTENSION IF NOT EXISTS postgis;
 CREATE EXTENSION IF NOT EXISTS postgis_topology;
+CREATE EXTENSION IF NOT EXISTS pg_trgm;
 
 GRANT USAGE ON SCHEMA topology to :pguser;
 GRANT SELECT ON ALL SEQUENCES IN SCHEMA topology TO :pguser;
diff --git a/pgsql-schema-generator/src/main/resources/scripts/01_init-oran-smo-teiv-model.sql b/pgsql-schema-generator/src/main/resources/scripts/01_init-oran-smo-teiv-model.sql
index 9ea8054..6222f76 100644
--- a/pgsql-schema-generator/src/main/resources/scripts/01_init-oran-smo-teiv-model.sql
+++ b/pgsql-schema-generator/src/main/resources/scripts/01_init-oran-smo-teiv-model.sql
@@ -35,55 +35,47 @@
 );
 
 CREATE TABLE IF NOT EXISTS ties_model.hash_info (
-    "name"        VARCHAR(511) PRIMARY KEY,
-    "hashedValue" VARCHAR(511) NOT NULL,
+    "name"        TEXT PRIMARY KEY,
+    "hashedValue" VARCHAR(63) NOT NULL,
     "type"        VARCHAR(511)
 );
 
 CREATE TABLE IF NOT EXISTS ties_model.module_reference (
-    "name"            VARCHAR(511) PRIMARY KEY,
-    "namespace"       VARCHAR(511),
-    "domain"          VARCHAR(511),
+    "name"            TEXT PRIMARY KEY,
+    "namespace"       TEXT,
+    "domain"          TEXT,
     "includedModules" jsonb DEFAULT '[]'::jsonb,
-    "revision"        VARCHAR(511) NOT NULL,
-    "content"         TEXT NOT NULL,
-    "ownerAppId"      VARCHAR(511) NOT NULL,
-    "status"          VARCHAR(127) NOT NULL
+    "revision"        TEXT NOT NULL,
+    "content"         TEXT NOT NULL
 );
 
 CREATE TABLE IF NOT EXISTS ties_model.entity_info (
-    "name"                VARCHAR(511) PRIMARY KEY,
-    "moduleReferenceName" VARCHAR(511) NOT NULL,
+    "storedAt"            TEXT PRIMARY KEY,
+    "name"                TEXT NOT NULL,
+    "moduleReferenceName" TEXT NOT NULL,
     FOREIGN KEY ("moduleReferenceName") REFERENCES ties_model.module_reference ("name") ON DELETE CASCADE
 );
 
 CREATE TABLE IF NOT EXISTS ties_model.relationship_info (
-    "name"                     VARCHAR(511) PRIMARY KEY,
+    "name"                     TEXT NOT NULL,
     "aSideAssociationName"     TEXT NOT NULL,
     "aSideMOType"              TEXT NOT NULL,
+    "aSideModule"              TEXT NOT NULL,
     "aSideMinCardinality"      BIGINT NOT NULL,
     "aSideMaxCardinality"      BIGINT NOT NULL,
     "bSideAssociationName"     TEXT NOT NULL,
     "bSideMOType"              TEXT NOT NULL,
+    "bSideModule"              TEXT NOT NULL,
     "bSideMinCardinality"      BIGINT NOT NULL,
     "bSideMaxCardinality"      BIGINT NOT NULL,
     "associationKind"          TEXT NOT NULL,
     "relationshipDataLocation" TEXT NOT NULL,
+    "storedAt"                 TEXT NOT NULL,
     "connectSameEntity"        BOOLEAN NOT NULL,
     "moduleReferenceName"      TEXT NOT NULL,
-    FOREIGN KEY ("moduleReferenceName") REFERENCES ties_model.module_reference ("name") ON DELETE CASCADE
-);
-
-CREATE TABLE IF NOT EXISTS ties_model.decorators (
-    "name"                VARCHAR(511) PRIMARY KEY,
-    "dataType"            VARCHAR(511) NOT NULL,
-    "moduleReferenceName" VARCHAR(511) NOT NULL,
-    FOREIGN KEY ("moduleReferenceName") REFERENCES ties_model.module_reference ("name") ON DELETE CASCADE
-);
-
-CREATE TABLE IF NOT EXISTS ties_model.classifiers (
-    "name"                VARCHAR(511) PRIMARY KEY,
-    "moduleReferenceName" VARCHAR(511) NOT NULL,
+    PRIMARY KEY ("name", "moduleReferenceName"),
+    FOREIGN KEY ("aSideModule") REFERENCES ties_model.module_reference ("name") ON DELETE CASCADE,
+    FOREIGN KEY ("bSideModule") REFERENCES ties_model.module_reference ("name") ON DELETE CASCADE,
     FOREIGN KEY ("moduleReferenceName") REFERENCES ties_model.module_reference ("name") ON DELETE CASCADE
 );
 
diff --git a/pgsql-schema-generator/src/main/resources/scripts/02_init-oran-smo-teiv-consumer-data.sql b/pgsql-schema-generator/src/main/resources/scripts/02_init-oran-smo-teiv-consumer-data.sql
new file mode 100644
index 0000000..e393eb0
--- /dev/null
+++ b/pgsql-schema-generator/src/main/resources/scripts/02_init-oran-smo-teiv-consumer-data.sql
@@ -0,0 +1,53 @@
+--
+-- ============LICENSE_START=======================================================
+-- Copyright (C) 2024 Ericsson
+-- Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+-- ================================================================================
+-- Licensed under the Apache License, Version 2.0 (the "License");
+-- you may not use this file except in compliance with the License.
+-- You may obtain a copy of the License at
+--
+--       http://www.apache.org/licenses/LICENSE-2.0
+--
+-- Unless required by applicable law or agreed to in writing, software
+-- distributed under the License is distributed on an "AS IS" BASIS,
+-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+-- See the License for the specific language governing permissions and
+-- limitations under the License.
+--
+-- SPDX-License-Identifier: Apache-2.0
+-- ============LICENSE_END=========================================================
+--
+
+BEGIN;
+
+CREATE SCHEMA IF NOT EXISTS ties_consumer_data;
+ALTER SCHEMA ties_consumer_data OWNER TO :pguser;
+SET default_tablespace = '';
+SET default_table_access_method = heap;
+
+SET ROLE :'pguser';
+
+CREATE TABLE IF NOT EXISTS ties_consumer_data."module_reference" (
+    "name"            TEXT PRIMARY KEY,
+    "namespace"       TEXT,
+    "revision"        TEXT NOT NULL,
+    "content"         TEXT NOT NULL,
+    "ownerAppId"      VARCHAR(511) NOT NULL,
+    "status"          VARCHAR(127) NOT NULL
+);
+
+CREATE TABLE IF NOT EXISTS ties_consumer_data."decorators" (
+    "name"                TEXT PRIMARY KEY,
+    "dataType"            VARCHAR(511) NOT NULL,
+    "moduleReferenceName" TEXT NOT NULL,
+    FOREIGN KEY ("moduleReferenceName") REFERENCES ties_consumer_data."module_reference" ("name") ON DELETE CASCADE
+);
+
+CREATE TABLE IF NOT EXISTS ties_consumer_data."classifiers" (
+    "name"                TEXT PRIMARY KEY,
+    "moduleReferenceName" TEXT NOT NULL,
+    FOREIGN KEY ("moduleReferenceName") REFERENCES ties_consumer_data."module_reference" ("name") ON DELETE CASCADE
+);
+
+COMMIT;
diff --git a/pgsql-schema-generator/src/test/java/org/oran/smo/teiv/pgsqlgenerator/EndToEndTest.java b/pgsql-schema-generator/src/test/java/org/oran/smo/teiv/pgsqlgenerator/EndToEndTest.java
index fcd4dae..5895496 100644
--- a/pgsql-schema-generator/src/test/java/org/oran/smo/teiv/pgsqlgenerator/EndToEndTest.java
+++ b/pgsql-schema-generator/src/test/java/org/oran/smo/teiv/pgsqlgenerator/EndToEndTest.java
@@ -39,6 +39,9 @@
 import org.oran.smo.teiv.pgsqlgenerator.schema.SchemaParser;
 import lombok.extern.slf4j.Slf4j;
 
+import static org.oran.smo.teiv.pgsqlgenerator.Processor.storeRelatedModuleRefsFromIncludedModules;
+import static org.oran.smo.teiv.pgsqlgenerator.TestHelper.extractIndexName;
+
 @Slf4j
 @SpringBootTest
 @TestMethodOrder(MethodOrderer.OrderAnnotation.class)
@@ -54,6 +57,10 @@
     private String expectedModelSql;
     @Value("${schema.model.output}")
     private String actualModelSql;
+    @Value("${test-result.consumer-data}")
+    private String expectedConsumerDataSql;
+    @Value("${schema.consumer-data.output}")
+    private String actualConsumerDataSql;
 
     @Value("${graphs.output}")
     private String graphOutput;
@@ -66,11 +73,13 @@
         processor.process();
         File generatedDataSql = new File(actualDataSql);
         File generatedModelSql = new File(actualModelSql);
+        File generatedConsumerDataSql = new File(actualConsumerDataSql);
         File generatedGraphs = new File(graphOutput);
 
         //then
         Assertions.assertTrue(generatedDataSql.exists());
         Assertions.assertTrue(generatedModelSql.exists());
+        Assertions.assertTrue(generatedConsumerDataSql.exists());
         Assertions.assertTrue(generatedGraphs.exists() && generatedGraphs.isDirectory() && generatedGraphs
                 .listFiles().length > 0);
     }
@@ -99,10 +108,10 @@
                 List<Column> columnsInExpected = expectedTable.getColumns();
                 List<Column> columnsInGenerated = generatedTable.getColumns();
 
-                // Check if all columns for each table were added correctly
-                Assertions.assertEquals(columnsInExpected.size(), columnsInGenerated.size());
-                List<String> allColumnNamesForATableInGeneratedResult = TestHelper.extractColumnNamesForATable(columnsInGenerated);
-                List<String> allColumnNamesForATableInExpectedResult = TestHelper.extractColumnNamesForATable(columnsInExpected);
+                    // Check if all columns for each table were added correctly
+                    Assertions.assertEquals(columnsInExpected.size(), columnsInGenerated.size());
+                    List<String> allColumnNamesForATableInGeneratedResult = TestHelper.extractColumnNames(columnsInGenerated);
+                    List<String> allColumnNamesForATableInExpectedResult = TestHelper.extractColumnNames(columnsInExpected);
 
                 // Check if generatedResult contains all columns for a table
                 Assertions.assertEquals(allColumnNamesForATableInExpectedResult, allColumnNamesForATableInGeneratedResult);
@@ -112,7 +121,7 @@
                         .findFirst().ifPresent(columnInGenerated -> {
 
                         if (columnInExpected.getName().equals("id")) {
-                            Assertions.assertEquals("VARCHAR(511)", columnInGenerated.getDataType());
+                            Assertions.assertEquals("TEXT", columnInGenerated.getDataType());
                             Assertions.assertTrue(TestHelper.checkIfColumnIsPrimaryKey(columnInGenerated.getPostgresConstraints()));
                         }
 
@@ -151,6 +160,19 @@
                                 });
                             });
                         }
+                        // Check if generated index matches expected index.
+                        if (!columnInExpected.getPostgresIndexList().isEmpty()) {
+                            Assertions.assertEquals(columnInExpected.getPostgresIndexList().size(), columnInGenerated.getPostgresIndexList().size());
+                            Assertions.assertEquals(extractIndexName(columnInExpected), extractIndexName(columnInGenerated));
+                            columnInExpected.getPostgresIndexList().forEach(postgresIndexInExpected -> {
+                                columnInGenerated.getPostgresIndexList().stream().filter(postgresIndexInGenerated ->
+                                    postgresIndexInGenerated.getIndexName().equals(postgresIndexInExpected.getIndexName())).findFirst().ifPresent(postgresIndexInGenerated -> {
+                                        Assertions.assertEquals(postgresIndexInExpected.getTableNameToAddIndexTo(), postgresIndexInGenerated.getTableNameToAddIndexTo());
+                                        Assertions.assertEquals(postgresIndexInExpected.getColumnNameToAddIndexTo(), postgresIndexInGenerated.getColumnNameToAddIndexTo());
+                                        Assertions.assertEquals(postgresIndexInExpected.getIndexType(), postgresIndexInGenerated.getIndexType());
+                                    });
+                            });
+                        }
                     });
                 });
             });
@@ -202,18 +224,21 @@
     @Test
     void storeRelatedModuleRefsFromIncludedModulesTest() {
         //spotless:off
-        List<Module> mockModuleRefFromYangParser = List.of(
+        List<Module> mockModuleRefFromYangParser = new ArrayList<>();
+        mockModuleRefFromYangParser.add(
             Module.builder().name("o-ran-smo-teiv-ran-equipment")
                     .namespace("urn:rdns:o-ran:smo:teiv:o-ran-smo-teiv-ran-equipment")
                     .domain("RAN_EQUIPMENT")
                     .includedModules(new ArrayList<>(List.of( "o-ran-smo-teiv-common-yang-types",
-                            "o-ran-smo-teiv-common-yang-extensions", "ietf-geo-location"))).build(),
+                            "o-ran-smo-teiv-common-yang-extensions", "ietf-geo-location"))).build());
+        mockModuleRefFromYangParser.add(
             Module.builder().name("o-ran-smo-teiv-ran-equipment-to-logical")
                     .namespace("urn:rdns:o-ran:smo:teiv:ericsson-topologyandinventory-ran-logical-to-equipment")
                     .domain("EQUIPMENT_TO_RAN_LOGICAL")
                     .includedModules(new ArrayList<>(List.of( "o-ran-smo-teiv-common-yang-types",
                     "o-ran-smo-teiv-common-yang-extensions", "o-ran-smo-teiv-ran-logical",
-                    "o-ran-smo-teiv-ran-equipment"))).build(),
+                    "o-ran-smo-teiv-ran-equipment"))).build());
+        mockModuleRefFromYangParser.add(
             Module.builder().name("o-ran-smo-teiv-ran-oam-to-cloud")
                     .namespace("urn:rdns:o-ran:smo:teiv:o-ran-smo-teiv-ran-oam-to-cloud")
                     .domain("RAN_OAM_TO_CLOUD")
@@ -254,7 +279,7 @@
         );
         //spotless:on
 
-        List<Module> actualResult = Processor.storeRelatedModuleRefsFromIncludedModules(mockEntitiesFromModelSvc,
+        List<Module> actualResult = storeRelatedModuleRefsFromIncludedModules(mockEntitiesFromModelSvc,
                 mockModuleRefFromYangParser);
 
         actualResult.forEach(actual -> {
diff --git a/pgsql-schema-generator/src/test/java/org/oran/smo/teiv/pgsqlgenerator/TestHelper.java b/pgsql-schema-generator/src/test/java/org/oran/smo/teiv/pgsqlgenerator/TestHelper.java
index f85353e..113ea24 100644
--- a/pgsql-schema-generator/src/test/java/org/oran/smo/teiv/pgsqlgenerator/TestHelper.java
+++ b/pgsql-schema-generator/src/test/java/org/oran/smo/teiv/pgsqlgenerator/TestHelper.java
@@ -31,8 +31,8 @@
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
-import java.util.HashMap;
 import java.util.HashSet;
+import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
@@ -47,10 +47,18 @@
         return tables.stream().map(Table::getName).sorted().toList();
     }
 
+    public static List<String> extractColumnNames(List<Column> columns) {
+        return columns.stream().map(Column::getName).sorted().toList();
+    }
+
     public static List<String> extractColumnNamesForATable(List<Column> columns) {
         return columns.stream().map(Column::getName).sorted().toList();
     }
 
+    public static List<String> extractIndexName(Column column) {
+        return column.getPostgresIndexList().stream().map(PostgresIndex::getIndexName).sorted().toList();
+    }
+
     public static List<String> extractConstraintName(Collection<PostgresConstraint> postgresConstraints) {
         return postgresConstraints.stream().map(PostgresConstraint::getConstraintName).map(String::toUpperCase).sorted()
                 .toList();
@@ -61,10 +69,10 @@
     }
 
     public static Map<String, List<Table>> identifiedModelChangeMapping() {
-        Map<String, List<Table>> storeIdentifiedChangesToModels = new HashMap<>();
-        storeIdentifiedChangesToModels.put("CREATE", new ArrayList<>());
-        storeIdentifiedChangesToModels.put("ALTER", new ArrayList<>());
+        Map<String, List<Table>> storeIdentifiedChangesToModels = new LinkedHashMap<>();
         storeIdentifiedChangesToModels.put("DEFAULT", new ArrayList<>());
+        storeIdentifiedChangesToModels.put("ALTER", new ArrayList<>());
+        storeIdentifiedChangesToModels.put("CREATE", new ArrayList<>());
         return storeIdentifiedChangesToModels;
     }
 
diff --git a/pgsql-schema-generator/src/test/java/org/oran/smo/teiv/pgsqlgenerator/YangParserTest.java b/pgsql-schema-generator/src/test/java/org/oran/smo/teiv/pgsqlgenerator/YangParserTest.java
index 138bf52..a053fae 100644
--- a/pgsql-schema-generator/src/test/java/org/oran/smo/teiv/pgsqlgenerator/YangParserTest.java
+++ b/pgsql-schema-generator/src/test/java/org/oran/smo/teiv/pgsqlgenerator/YangParserTest.java
@@ -40,13 +40,13 @@
 
         List<Module> moduleList = yangParser.returnAllModuleReferences();
 
-        Assertions.assertEquals(5, moduleList.size());
+        Assertions.assertEquals(8, moduleList.size());
 
         List<String> allModuleReferenceNames = moduleList.stream().map(Module::getName).sorted().toList();
 
-        Assertions.assertEquals(allModuleReferenceNames, Stream.of("o-ran-smo-teiv-common-yang-extensions",
-                "o-ran-smo-teiv-common-yang-types", "o-ran-smo-teiv-equipment", "o-ran-smo-teiv-rel-equipment-ran",
-                "o-ran-smo-teiv-ran").sorted().toList());
+        Assertions.assertEquals(allModuleReferenceNames, Stream.of("_3gpp-common-yang-types", "ietf-geo-location",
+                "o-ran-smo-teiv-common-yang-extensions", "o-ran-smo-teiv-common-yang-types", "o-ran-smo-teiv-equipment",
+                "o-ran-smo-teiv-rel-equipment-ran", "o-ran-smo-teiv-ran", "test-built-in-module").sorted().toList());
 
     }
 }
diff --git a/pgsql-schema-generator/src/test/java/org/oran/smo/teiv/pgsqlgenerator/schema/BackwardCompatibilityCheckerTest.java b/pgsql-schema-generator/src/test/java/org/oran/smo/teiv/pgsqlgenerator/schema/BackwardCompatibilityCheckerTest.java
index ce97ec6..f3867c0 100644
--- a/pgsql-schema-generator/src/test/java/org/oran/smo/teiv/pgsqlgenerator/schema/BackwardCompatibilityCheckerTest.java
+++ b/pgsql-schema-generator/src/test/java/org/oran/smo/teiv/pgsqlgenerator/schema/BackwardCompatibilityCheckerTest.java
@@ -20,6 +20,8 @@
  */
 package org.oran.smo.teiv.pgsqlgenerator.schema;
 
+import org.oran.smo.teiv.pgsqlgenerator.IndexType;
+import org.oran.smo.teiv.pgsqlgenerator.PostgresIndex;
 import org.oran.smo.teiv.pgsqlgenerator.Table;
 import org.oran.smo.teiv.pgsqlgenerator.Column;
 import org.oran.smo.teiv.pgsqlgenerator.PrimaryKeyConstraint;
@@ -46,14 +48,14 @@
             Table.builder().name("Sector").columns(
                 List.of(
                         Column.builder().name("azimuth").dataType("DECIMAL").build(),
-                        Column.builder().name("id").dataType("VARCHAR(511)").postgresConstraints(List.of(
+                        Column.builder().name("id").dataType("TEXT").postgresConstraints(List.of(
                                 PrimaryKeyConstraint.builder().tableName("Sector").constraintName("PK_Source_id")
                                         .columnToAddConstraintTo("id").build())).build(),
                         Column.builder().name("sectorId").dataType("jsonb").defaultValue("101").build(),
                         Column.builder().name("geo-location").dataType("geography").build())).build(),
             Table.builder().name("Namespace").columns(
                 List.of(
-                        Column.builder().name("id").dataType("VARCHAR(511)").postgresConstraints(List.of(
+                        Column.builder().name("id").dataType("TEXT").postgresConstraints(List.of(
                                 PrimaryKeyConstraint.builder().tableName("Namespace").constraintName("PK_Namespace_id")
                                         .columnToAddConstraintTo("id").build())).build(),
                         Column.builder().name("name").dataType("TEXT").build())).build());
@@ -67,20 +69,20 @@
                 Table.builder().name("Sector").columns(
                     List.of(
                             Column.builder().name("azimuth").dataType("DECIMAL").build(),
-                            Column.builder().name("id").dataType("VARCHAR(511)").postgresConstraints(List.of(
+                            Column.builder().name("id").dataType("TEXT").postgresConstraints(List.of(
                                     PrimaryKeyConstraint.builder().tableName("Sector").constraintName("PK_Source_id")
                                             .columnToAddConstraintTo("id").build())).build(),
                             Column.builder().name("sectorId").dataType("jsonb").defaultValue("101").build(),
                             Column.builder().name("geo-location").dataType("geography").build())).build(),
                 Table.builder().name("Namespace").columns(
                     List.of(
-                            Column.builder().name("id").dataType("VARCHAR(511)").postgresConstraints(List.of(
+                            Column.builder().name("id").dataType("TEXT").postgresConstraints(List.of(
                                     PrimaryKeyConstraint.builder().tableName("Namespace").constraintName("PK_Namespace_id")
                                             .columnToAddConstraintTo("id").build())).build(),
                             Column.builder().name("name").dataType("TEXT").build())).build(),
                 Table.builder().name("NRCellDU").columns(
                     List.of(
-                            Column.builder().name("id").dataType("VARCHAR(511)").postgresConstraints(List.of(
+                            Column.builder().name("id").dataType("TEXT").postgresConstraints(List.of(
                                     PrimaryKeyConstraint.builder().tableName("NRCellDU").constraintName("PK_NRCellDU_id")
                                             .columnToAddConstraintTo("id").build())).build(),
                             Column.builder().name("name").dataType("TEXT").build())).build());
@@ -101,20 +103,20 @@
                 Table.builder().name("Sector").columns(
                     List.of(
                             Column.builder().name("azimuth").dataType("DECIMAL").build(),
-                            Column.builder().name("id").dataType("VARCHAR(511)").postgresConstraints(List.of(
+                            Column.builder().name("id").dataType("TEXT").postgresConstraints(List.of(
                                     PrimaryKeyConstraint.builder().tableName("Sector").constraintName("PK_Source_id")
                                             .columnToAddConstraintTo("id").build())).build(),
                             Column.builder().name("sectorId").dataType("jsonb").defaultValue("101").build(),
                             Column.builder().name("geo-location").dataType("geography").build())).build(),
                 Table.builder().name("Namespace").columns(
                     List.of(
-                            Column.builder().name("id").dataType("VARCHAR(511)").postgresConstraints(List.of(
+                            Column.builder().name("id").dataType("TEXT").postgresConstraints(List.of(
                                     PrimaryKeyConstraint.builder().tableName("Namespace").constraintName("PK_Namespace_id")
                                             .columnToAddConstraintTo("id").build())).build(),
                             Column.builder().name("name").dataType("TEXT").build())).build(),
                 Table.builder().name("NRCellDU").columns(
                     List.of(
-                            Column.builder().name("id").dataType("VARCHAR(511)").postgresConstraints(List.of(
+                            Column.builder().name("id").dataType("TEXT").postgresConstraints(List.of(
                                     PrimaryKeyConstraint.builder().tableName("NRCellDU").constraintName("PK_NRCellDU_id")
                                             .columnToAddConstraintTo("id").build())).build(),
                             Column.builder().name("name").dataType("TEXT").build())).build());
@@ -124,19 +126,19 @@
                 Table.builder().name("Sector").columns(
                     List.of(
                             Column.builder().name("azimuth").dataType("DECIMAL").build(),
-                            Column.builder().name("id").dataType("VARCHAR(511)").postgresConstraints(List.of(
+                            Column.builder().name("id").dataType("TEXT").postgresConstraints(List.of(
                                     PrimaryKeyConstraint.builder().tableName("Sector").constraintName("PK_Source_id")
                                             .columnToAddConstraintTo("id").build())).build(),
                             Column.builder().name("geo-location").dataType("geography").build())).build(),
                 Table.builder().name("Namespace").columns(
                     List.of(
-                            Column.builder().name("id").dataType("VARCHAR(511)").postgresConstraints(List.of(
+                            Column.builder().name("id").dataType("TEXT").postgresConstraints(List.of(
                                     PrimaryKeyConstraint.builder().tableName("Namespace").constraintName("PK_Namespace_id")
                                             .columnToAddConstraintTo("id").build())).build(),
                             Column.builder().name("name").dataType("TEXT").build())).build(),
                 Table.builder().name("NRCellDU").columns(
                     List.of(
-                            Column.builder().name("id").dataType("VARCHAR(511)").postgresConstraints(List.of(
+                            Column.builder().name("id").dataType("TEXT").postgresConstraints(List.of(
                                     PrimaryKeyConstraint.builder().tableName("NRCellDU").constraintName("PK_NRCellDU_id")
                                             .columnToAddConstraintTo("id").build())).build(),
                             Column.builder().name("name").dataType("TEXT").build())).build());
@@ -157,20 +159,20 @@
                 Table.builder().name("Sector").columns(
                     List.of(
                             Column.builder().name("azimuth").dataType("DECIMAL").build(),
-                            Column.builder().name("id").dataType("VARCHAR(511)").postgresConstraints(List.of(
+                            Column.builder().name("id").dataType("TEXT").postgresConstraints(List.of(
                                     PrimaryKeyConstraint.builder().tableName("Sector").constraintName("PK_Source_id")
                                             .columnToAddConstraintTo("id").build())).build(),
                             Column.builder().name("sectorId").dataType("jsonb").defaultValue("101").build(),
                             Column.builder().name("geo-location").dataType("geography").build())).build(),
                 Table.builder().name("Namespace").columns(
                     List.of(
-                            Column.builder().name("id").dataType("VARCHAR(511)").postgresConstraints(List.of(
+                            Column.builder().name("id").dataType("TEXT").postgresConstraints(List.of(
                                     PrimaryKeyConstraint.builder().tableName("Namespace").constraintName("PK_Namespace_id")
                                             .columnToAddConstraintTo("id").build())).build(),
                             Column.builder().name("name").dataType("TEXT").build())).build(),
                 Table.builder().name("NRCellDU").columns(
                     List.of(
-                            Column.builder().name("id").dataType("VARCHAR(511)").postgresConstraints(List.of(
+                            Column.builder().name("id").dataType("TEXT").postgresConstraints(List.of(
                                     PrimaryKeyConstraint.builder().tableName("NRCellDU").constraintName("PK_NRCellDU_id")
                                             .columnToAddConstraintTo("id").build())).build(),
                             Column.builder().name("name").dataType("TEXT").build())).build());
@@ -180,20 +182,20 @@
                 Table.builder().name("Sector").columns(
                     List.of(
                             Column.builder().name("azimuth").dataType("DECIMAL").build(),
-                            Column.builder().name("id").dataType("VARCHAR(511)").postgresConstraints(List.of(
+                            Column.builder().name("id").dataType("TEXT").postgresConstraints(List.of(
                                     PrimaryKeyConstraint.builder().tableName("Sector").constraintName("PK_Source_id")
                                             .columnToAddConstraintTo("id").build())).build(),
                             Column.builder().name("sectorId123").dataType("jsonb").defaultValue("101").build(),
                             Column.builder().name("geo-location").dataType("geography").build())).build(),
                 Table.builder().name("Namespace").columns(
                     List.of(
-                            Column.builder().name("id").dataType("VARCHAR(511)").postgresConstraints(List.of(
+                            Column.builder().name("id").dataType("TEXT").postgresConstraints(List.of(
                                     PrimaryKeyConstraint.builder().tableName("Namespace").constraintName("PK_Namespace_id")
                                             .columnToAddConstraintTo("id").build())).build(),
                             Column.builder().name("name").dataType("TEXT").build())).build(),
                 Table.builder().name("NRCellDU").columns(
                     List.of(
-                            Column.builder().name("id").dataType("VARCHAR(511)").postgresConstraints(List.of(
+                            Column.builder().name("id").dataType("TEXT").postgresConstraints(List.of(
                                     PrimaryKeyConstraint.builder().tableName("NRCellDU").constraintName("PK_NRCellDU_id")
                                             .columnToAddConstraintTo("id").build())).build(),
                             Column.builder().name("name").dataType("TEXT").build())).build());
@@ -212,20 +214,20 @@
                 Table.builder().name("Sector").columns(
                     List.of(
                             Column.builder().name("azimuth").dataType("DECIMAL").build(),
-                            Column.builder().name("id").dataType("VARCHAR(511)").postgresConstraints(List.of(
+                            Column.builder().name("id").dataType("TEXT").postgresConstraints(List.of(
                                     PrimaryKeyConstraint.builder().tableName("Sector").constraintName("PK_Source_id")
                                             .columnToAddConstraintTo("id").build())).build(),
                             Column.builder().name("sectorId").dataType("jsonb").defaultValue("101").build(),
                             Column.builder().name("geo-location").dataType("geography").build())).build(),
                 Table.builder().name("Namespace").columns(
                     List.of(
-                            Column.builder().name("id").dataType("VARCHAR(511)").postgresConstraints(List.of(
+                            Column.builder().name("id").dataType("TEXT").postgresConstraints(List.of(
                                     PrimaryKeyConstraint.builder().tableName("Namespace").constraintName("PK_Namespace_id")
                                             .columnToAddConstraintTo("id").build())).build(),
                             Column.builder().name("name").dataType("TEXT").build())).build(),
                 Table.builder().name("NRCellDU").columns(
                     List.of(
-                            Column.builder().name("id").dataType("VARCHAR(511)").postgresConstraints(List.of(
+                            Column.builder().name("id").dataType("TEXT").postgresConstraints(List.of(
                                     PrimaryKeyConstraint.builder().tableName("NRCellDU").constraintName("PK_NRCellDU_id")
                                             .columnToAddConstraintTo("id").build())).build(),
                             Column.builder().name("name").dataType("TEXT").build())).build());
@@ -235,7 +237,7 @@
                 Table.builder().name("Sector").columns(
                     List.of(
                             Column.builder().name("azimuth").dataType("DECIMAL").build(),
-                            Column.builder().name("id").dataType("VARCHAR(511)").postgresConstraints(List.of(
+                            Column.builder().name("id").dataType("TEXT").postgresConstraints(List.of(
                                     PrimaryKeyConstraint.builder().tableName("Sector").constraintName("PK_Source_id")
                                             .columnToAddConstraintTo("id").build())).build(),
                             Column.builder().name("sectorId").dataType("jsonb").defaultValue("101").build(),
@@ -248,7 +250,7 @@
                             Column.builder().name("name").dataType("TEXT").build())).build(),
                 Table.builder().name("NRCellDU").columns(
                     List.of(
-                            Column.builder().name("id").dataType("VARCHAR(511)").postgresConstraints(List.of(
+                            Column.builder().name("id").dataType("TEXT").postgresConstraints(List.of(
                                     PrimaryKeyConstraint.builder().tableName("NRCellDU").constraintName("PK_NRCellDU_id")
                                             .columnToAddConstraintTo("id").build())).build(),
                             Column.builder().name("name").dataType("TEXT").build())).build());
@@ -268,20 +270,20 @@
                 Table.builder().name("Sector").columns(
                     List.of(
                             Column.builder().name("azimuth").dataType("DECIMAL").build(),
-                            Column.builder().name("id").dataType("VARCHAR(511)").postgresConstraints(List.of(
+                            Column.builder().name("id").dataType("TEXT").postgresConstraints(List.of(
                                     PrimaryKeyConstraint.builder().tableName("Sector").constraintName("PK_Source_id")
                                             .columnToAddConstraintTo("id").build())).build(),
                             Column.builder().name("sectorId").dataType("jsonb").defaultValue("101").build(),
                             Column.builder().name("geo-location").dataType("geography").build())).build(),
                 Table.builder().name("Namespace").columns(
                     List.of(
-                            Column.builder().name("id").dataType("VARCHAR(511)").postgresConstraints(List.of(
+                            Column.builder().name("id").dataType("TEXT").postgresConstraints(List.of(
                                     PrimaryKeyConstraint.builder().tableName("Namespace").constraintName("PK_Namespace_id")
                                             .columnToAddConstraintTo("id").build())).build(),
                             Column.builder().name("name").dataType("TEXT").build())).build(),
                 Table.builder().name("NRCellDU").columns(
                     List.of(
-                            Column.builder().name("id").dataType("VARCHAR(511)").postgresConstraints(List.of(
+                            Column.builder().name("id").dataType("TEXT").postgresConstraints(List.of(
                                     PrimaryKeyConstraint.builder().tableName("NRCellDU").constraintName("PK_NRCellDU_id")
                                             .columnToAddConstraintTo("id").build())).build(),
                             Column.builder().name("name").dataType("TEXT").build())).build());
@@ -291,18 +293,18 @@
                 Table.builder().name("Sector").columns(
                     List.of(
                             Column.builder().name("azimuth").dataType("DECIMAL").build(),
-                            Column.builder().name("id").dataType("VARCHAR(511)").build(),
+                            Column.builder().name("id").dataType("TEXT").build(),
                             Column.builder().name("sectorId").dataType("jsonb").defaultValue("101").build(),
                             Column.builder().name("geo-location").dataType("geography").build())).build(),
                 Table.builder().name("Namespace").columns(
                     List.of(
-                            Column.builder().name("id").dataType("VARCHAR(511)").postgresConstraints(List.of(
+                            Column.builder().name("id").dataType("TEXT").postgresConstraints(List.of(
                                     PrimaryKeyConstraint.builder().tableName("Namespace").constraintName("PK_Namespace_id")
                                             .columnToAddConstraintTo("id").build())).build(),
                             Column.builder().name("name").dataType("TEXT").build())).build(),
                 Table.builder().name("NRCellDU").columns(
                     List.of(
-                            Column.builder().name("id").dataType("VARCHAR(511)").postgresConstraints(List.of(
+                            Column.builder().name("id").dataType("TEXT").postgresConstraints(List.of(
                                     PrimaryKeyConstraint.builder().tableName("NRCellDU").constraintName("PK_NRCellDU_id")
                                             .columnToAddConstraintTo("id").build())).build(),
                             Column.builder().name("name").dataType("TEXT").build())).build());
@@ -318,20 +320,20 @@
                 Table.builder().name("Sector").columns(
                         List.of(
                                 Column.builder().name("azimuth").dataType("DECIMAL").build(),
-                                Column.builder().name("id").dataType("VARCHAR(511)").postgresConstraints(List.of(
+                                Column.builder().name("id").dataType("TEXT").postgresConstraints(List.of(
                                         PrimaryKeyConstraint.builder().tableName("Sector").constraintName("PK_Source_id_123")
                                                 .columnToAddConstraintTo("id").build())).build(),
                                 Column.builder().name("sectorId").dataType("jsonb").defaultValue("101").build(),
                                 Column.builder().name("geo-location").dataType("geography").build())).build(),
                 Table.builder().name("Namespace").columns(
                         List.of(
-                                Column.builder().name("id").dataType("VARCHAR(511)").postgresConstraints(List.of(
+                                Column.builder().name("id").dataType("TEXT").postgresConstraints(List.of(
                                         PrimaryKeyConstraint.builder().tableName("Namespace").constraintName("PK_Namespace_id")
                                                 .columnToAddConstraintTo("id").build())).build(),
                                 Column.builder().name("name").dataType("TEXT").build())).build(),
                 Table.builder().name("NRCellDU").columns(
                         List.of(
-                                Column.builder().name("id").dataType("VARCHAR(511)").postgresConstraints(List.of(
+                                Column.builder().name("id").dataType("TEXT").postgresConstraints(List.of(
                                         PrimaryKeyConstraint.builder().tableName("NRCellDU").constraintName("PK_NRCellDU_id")
                                                 .columnToAddConstraintTo("id").build())).build(),
                                 Column.builder().name("name").dataType("TEXT").build())).build());
@@ -344,6 +346,84 @@
 
     }
 
+    @Test
+    void verifyExceptionThrownOnColumnIndexModifiedWhenGreenfieldDisabledTest()  {
+        // Given baseline
+        List<Table> mockBaselineEntities = List.of(
+            Table.builder().name("Sector").columns(
+                List.of(
+                    Column.builder().name("azimuth").dataType("DECIMAL").build(),
+                    Column.builder().name("id").dataType("TEXT").build(),
+                    Column.builder().name("sectorId").dataType("jsonb").defaultValue("101").build(),
+                    Column.builder().name("geo-location").dataType("geography").build())).build(),
+            Table.builder().name("Namespace").columns(
+                List.of(
+                    Column.builder().name("id").dataType("TEXT").postgresConstraints(List.of(
+                        PrimaryKeyConstraint.builder().tableName("Namespace").constraintName("PK_Namespace_id")
+                            .columnToAddConstraintTo("id").build())).build(),
+                    Column.builder().name("name").dataType("TEXT").build())).build(),
+            Table.builder().name("NRCellDU").columns(
+                List.of(
+                    Column.builder().name("id").dataType("TEXT").postgresConstraints(List.of(
+                        PrimaryKeyConstraint.builder().tableName("NRCellDU").constraintName("PK_NRCellDU_id")
+                            .columnToAddConstraintTo("id").build())).build(),
+                    Column.builder().name("name").dataType("TEXT").postgresIndexList(List.of(
+                        PostgresIndex.builder().tableNameToAddIndexTo("NRCellDU").columnNameToAddIndexTo("name")
+                            .indexName("IDX_GIN_NRCellDU_name").indexType(IndexType.GIN).build())).build())).build());
+        // When - entities from Model svc with remove column index
+        mockModelServiceEntities = List.of(
+            Table.builder().name("Sector").columns(
+                List.of(
+                    Column.builder().name("azimuth").dataType("DECIMAL").build(),
+                    Column.builder().name("id").dataType("TEXT").build(),
+                    Column.builder().name("sectorId").dataType("jsonb").defaultValue("101").build(),
+                    Column.builder().name("geo-location").dataType("geography").build())).build(),
+            Table.builder().name("Namespace").columns(
+                List.of(
+                    Column.builder().name("id").dataType("TEXT").postgresConstraints(List.of(
+                        PrimaryKeyConstraint.builder().tableName("Namespace").constraintName("PK_Namespace_id")
+                            .columnToAddConstraintTo("id").build())).build(),
+                    Column.builder().name("name").dataType("TEXT").build())).build(),
+            Table.builder().name("NRCellDU").columns(
+                List.of(
+                    Column.builder().name("id").dataType("TEXT").postgresConstraints(List.of(
+                        PrimaryKeyConstraint.builder().tableName("NRCellDU").constraintName("PK_NRCellDU_id")
+                            .columnToAddConstraintTo("id").build())).build(),
+                    Column.builder().name("name").dataType("TEXT").build())).build());
+        // Then
+        Assertions.assertEquals(
+            String.format("NBC change has been introduced: modified/removed index IDX_GIN_NRCellDU_name for column(NRCellDU.name) present in baseline, please make sure you've enabled green-field installation!!%nFor more info please refer to README"),
+            Assertions.assertThrowsExactly(PgSchemaGeneratorException.class, () -> nbcChecker.checkForNBCChangesInData(
+                mockBaselineEntities, mockModelServiceEntities)).getMessage());
+        // When - entities from Model svc with modified column index
+        mockModelServiceEntities = List.of(
+            Table.builder().name("Sector").columns(
+                List.of(
+                    Column.builder().name("azimuth").dataType("DECIMAL").build(),
+                    Column.builder().name("id").dataType("TEXT").build(),
+                    Column.builder().name("sectorId").dataType("jsonb").defaultValue("101").build(),
+                    Column.builder().name("geo-location").dataType("geography").build())).build(),
+            Table.builder().name("Namespace").columns(
+                List.of(
+                    Column.builder().name("id").dataType("TEXT").postgresConstraints(List.of(
+                        PrimaryKeyConstraint.builder().tableName("Namespace").constraintName("PK_Namespace_id")
+                            .columnToAddConstraintTo("id").build())).build(),
+                    Column.builder().name("name").dataType("TEXT").build())).build(),
+            Table.builder().name("NRCellDU").columns(
+                List.of(
+                    Column.builder().name("id").dataType("TEXT").postgresConstraints(List.of(
+                        PrimaryKeyConstraint.builder().tableName("NRCellDU").constraintName("PK_NRCellDU_id")
+                            .columnToAddConstraintTo("id").build())).build(),
+                    Column.builder().name("name").dataType("TEXT").postgresIndexList(List.of(
+                        PostgresIndex.builder().tableNameToAddIndexTo("NRCellDU").columnNameToAddIndexTo("name")
+                            .indexName("IDX_GIN_NRCellDU_name").indexType(IndexType.GIN_TRGM_OPS_ON_LIST_AS_JSONB).build())).build())).build());
+        // Then
+        Assertions.assertEquals(
+            String.format("NBC change has been introduced: modified/removed index IDX_GIN_NRCellDU_name for column(NRCellDU.name) present in baseline, please make sure you've enabled green-field installation!!%nFor more info please refer to README"),
+            Assertions.assertThrowsExactly(PgSchemaGeneratorException.class, () -> nbcChecker.checkForNBCChangesInData(
+                mockBaselineEntities, mockModelServiceEntities)).getMessage());
+    }
+
     //Data:Relationships
     @Test
     void verifyExceptionThrownOnModifiedRelationshipCardinalityWhenGreenfieldDisabledTest() {
@@ -353,18 +433,18 @@
                 Table.builder().name("Sector").columns(
                     List.of(
                             Column.builder().name("azimuth").dataType("DECIMAL").build(),
-                            Column.builder().name("id").dataType("VARCHAR(511)").postgresConstraints(List.of(
+                            Column.builder().name("id").dataType("TEXT").postgresConstraints(List.of(
                                     PrimaryKeyConstraint.builder().tableName("Sector").constraintName("PK_Source_id")
                                             .columnToAddConstraintTo("id").build())).build(),
                             Column.builder().name("sectorId").dataType("jsonb").defaultValue("101").build(),
                             Column.builder().name("geo-location").dataType("geography").build(),
-                            Column.builder().name("REL_FK_managed-Namespace").dataType("VARCHAR(511)").postgresConstraints(List.of()).build(),
-                            Column.builder().name("REL_ID_SECTOR_MANAGES_NAMESPACE").dataType("VARCHAR(511)").postgresConstraints(List.of(
+                            Column.builder().name("REL_FK_managed-Namespace").dataType("TEXT").postgresConstraints(List.of()).build(),
+                            Column.builder().name("REL_ID_SECTOR_MANAGES_NAMESPACE").dataType("TEXT").postgresConstraints(List.of(
                                     UniqueConstraint.builder().constraintName("UNIQUE_Sector_REL_ID_SECTOR_MANAGES_NAMESPACE").tableName("Sector")
                                             .columnToAddConstraintTo("REL_ID_SECTOR_MANAGES_NAMESPACE").build())).build())).build(),
                 Table.builder().name("Namespace").columns(
                     List.of(
-                            Column.builder().name("id").dataType("VARCHAR(511)").postgresConstraints(List.of(
+                            Column.builder().name("id").dataType("TEXT").postgresConstraints(List.of(
                                     PrimaryKeyConstraint.builder().tableName("Namespace").constraintName("PK_Namespace_id")
                                             .columnToAddConstraintTo("id").build())).build(),
                             Column.builder().name("name").dataType("TEXT").build())).build());
@@ -375,19 +455,19 @@
                 Table.builder().name("Sector").columns(
                     List.of(
                             Column.builder().name("azimuth").dataType("DECIMAL").build(),
-                            Column.builder().name("id").dataType("VARCHAR(511)").postgresConstraints(List.of(
+                            Column.builder().name("id").dataType("TEXT").postgresConstraints(List.of(
                                     PrimaryKeyConstraint.builder().tableName("Sector").constraintName("PK_Source_id")
                                             .columnToAddConstraintTo("id").build())).build(),
                             Column.builder().name("sectorId").dataType("jsonb").defaultValue("101").build(),
                             Column.builder().name("geo-location").dataType("geography").build())).build(),
                 Table.builder().name("Namespace").columns(
                     List.of(
-                            Column.builder().name("id").dataType("VARCHAR(511)").postgresConstraints(List.of(
+                            Column.builder().name("id").dataType("TEXT").postgresConstraints(List.of(
                                     PrimaryKeyConstraint.builder().tableName("Namespace").constraintName("PK_Namespace_id")
                                             .columnToAddConstraintTo("id").build())).build(),
                             Column.builder().name("name").dataType("TEXT").build(),
-                            Column.builder().name("REL_FK_managed-by-Sector").dataType("VARCHAR(511)").postgresConstraints(List.of()).build(),
-                            Column.builder().name("REL_ID_SECTOR_MANAGES_NAMESPACE").dataType("VARCHAR(511)").postgresConstraints(List.of(
+                            Column.builder().name("REL_FK_managed-by-Sector").dataType("TEXT").postgresConstraints(List.of()).build(),
+                            Column.builder().name("REL_ID_SECTOR_MANAGES_NAMESPACE").dataType("TEXT").postgresConstraints(List.of(
                                     UniqueConstraint.builder().constraintName("UNIQUE_Namespace_REL_ID_SECTOR_MANAGES_NAMESPACE").tableName("Namespace")
                                             .columnToAddConstraintTo("REL_ID_SECTOR_MANAGES_NAMESPACE").build())).build())).build());
 
@@ -403,26 +483,26 @@
                 Table.builder().name("Sector").columns(
                     List.of(
                             Column.builder().name("azimuth").dataType("DECIMAL").build(),
-                            Column.builder().name("id").dataType("VARCHAR(511)").postgresConstraints(List.of(
+                            Column.builder().name("id").dataType("TEXT").postgresConstraints(List.of(
                                     PrimaryKeyConstraint.builder().tableName("Sector").constraintName("PK_Source_id")
                                             .columnToAddConstraintTo("id").build())).build(),
                             Column.builder().name("sectorId").dataType("jsonb").defaultValue("101").build(),
                             Column.builder().name("geo-location").dataType("geography").build())).build(),
                 Table.builder().name("Namespace").columns(
                     List.of(
-                            Column.builder().name("id").dataType("VARCHAR(511)").postgresConstraints(List.of(
+                            Column.builder().name("id").dataType("TEXT").postgresConstraints(List.of(
                                     PrimaryKeyConstraint.builder().tableName("Namespace").constraintName("PK_Namespace_id")
                                             .columnToAddConstraintTo("id").build())).build(),
                             Column.builder().name("name").dataType("TEXT").build())).build(),
                 Table.builder().name("SECTOR_MANAGES_NAMESPACE").columns(
                         List.of(
-                            Column.builder().name("id").dataType("VARCHAR(511)").postgresConstraints(List.of(
+                            Column.builder().name("id").dataType("TEXT").postgresConstraints(List.of(
                                     PrimaryKeyConstraint.builder().tableName("SECTOR_MANAGES_NAMESPACE").constraintName("PK_SECTOR_MANAGES_NAMESPACE_id")
                                             .columnToAddConstraintTo("id").build())).build(),
-                            Column.builder().name("aSide_Sector").dataType("VARCHAR(511)").postgresConstraints(List.of(
+                            Column.builder().name("aSide_Sector").dataType("TEXT").postgresConstraints(List.of(
                                     UniqueConstraint.builder().constraintName("FK_SECTOR_MANAGES_NAMESPACE_aSide_Sector")
                                             .tableName("SECTOR_MANAGES_NAMESPACE").columnToAddConstraintTo("aSide_Sector").build())).build(),
-                            Column.builder().name("bSide_Namespace").dataType("VARCHAR(511)").postgresConstraints(List.of(
+                            Column.builder().name("bSide_Namespace").dataType("TEXT").postgresConstraints(List.of(
                                     UniqueConstraint.builder().constraintName("FK_SECTOR_MANAGES_NAMESPACE_bSide_Namespace")
                                             .tableName("SECTOR_MANAGES_NAMESPACE").columnToAddConstraintTo("bSide_Namespace").build())).build())).build());
 
@@ -439,19 +519,19 @@
                 Table.builder().name("Sector").columns(
                         List.of(
                             Column.builder().name("azimuth").dataType("DECIMAL").build(),
-                            Column.builder().name("id").dataType("VARCHAR(511)").postgresConstraints(List.of(
+                            Column.builder().name("id").dataType("TEXT").postgresConstraints(List.of(
                                     PrimaryKeyConstraint.builder().tableName("Sector").constraintName("PK_Source_id")
                                             .columnToAddConstraintTo("id").build())).build(),
                             Column.builder().name("sectorId").dataType("jsonb").defaultValue("101").build(),
                             Column.builder().name("geo-location").dataType("geography").build())).build(),
                 Table.builder().name("Namespace").columns(
                         List.of(
-                            Column.builder().name("id").dataType("VARCHAR(511)").postgresConstraints(List.of(
+                            Column.builder().name("id").dataType("TEXT").postgresConstraints(List.of(
                                     PrimaryKeyConstraint.builder().tableName("Namespace").constraintName("PK_Namespace_id")
                                             .columnToAddConstraintTo("id").build())).build(),
                             Column.builder().name("name").dataType("TEXT").build(),
-                            Column.builder().name("REL_FK_managed-by-Sector").dataType("VARCHAR(511)").postgresConstraints(List.of()).build(),
-                            Column.builder().name("REL_ID_SECTOR_MANAGES_NAMESPACE").dataType("VARCHAR(511)").postgresConstraints(List.of(
+                            Column.builder().name("REL_FK_managed-by-Sector").dataType("TEXT").postgresConstraints(List.of()).build(),
+                            Column.builder().name("REL_ID_SECTOR_MANAGES_NAMESPACE").dataType("TEXT").postgresConstraints(List.of(
                                     UniqueConstraint.builder().constraintName("UNIQUE_Namespace_REL_ID_SECTOR_MANAGES_NAMESPACE").tableName("Namespace")
                                             .columnToAddConstraintTo("REL_ID_SECTOR_MANAGES_NAMESPACE").build())).build())).build());
 
@@ -460,18 +540,18 @@
                 Table.builder().name("Sector").columns(
                         List.of(
                             Column.builder().name("azimuth").dataType("DECIMAL").build(),
-                            Column.builder().name("id").dataType("VARCHAR(511)").postgresConstraints(List.of(
+                            Column.builder().name("id").dataType("TEXT").postgresConstraints(List.of(
                                     PrimaryKeyConstraint.builder().tableName("Sector").constraintName("PK_Source_id")
                                             .columnToAddConstraintTo("id").build())).build(),
                             Column.builder().name("sectorId").dataType("jsonb").defaultValue("101").build(),
                             Column.builder().name("geo-location").dataType("geography").build(),
-                            Column.builder().name("REL_FK_managed-Namespace").dataType("VARCHAR(511)").postgresConstraints(List.of()).build(),
-                            Column.builder().name("REL_ID_SECTOR_MANAGES_NAMESPACE").dataType("VARCHAR(511)").postgresConstraints(List.of(
+                            Column.builder().name("REL_FK_managed-Namespace").dataType("TEXT").postgresConstraints(List.of()).build(),
+                            Column.builder().name("REL_ID_SECTOR_MANAGES_NAMESPACE").dataType("TEXT").postgresConstraints(List.of(
                                     UniqueConstraint.builder().constraintName("UNIQUE_Sector_REL_ID_SECTOR_MANAGES_NAMESPACE").tableName("Sector")
                                             .columnToAddConstraintTo("REL_ID_SECTOR_MANAGES_NAMESPACE").build())).build())).build(),
                 Table.builder().name("Namespace").columns(
                         List.of(
-                            Column.builder().name("id").dataType("VARCHAR(511)").postgresConstraints(List.of(
+                            Column.builder().name("id").dataType("TEXT").postgresConstraints(List.of(
                                     PrimaryKeyConstraint.builder().tableName("Namespace").constraintName("PK_Namespace_id")
                                             .columnToAddConstraintTo("id").build())).build(),
                             Column.builder().name("name").dataType("TEXT").build())).build());
diff --git a/pgsql-schema-generator/src/test/java/org/oran/smo/teiv/pgsqlgenerator/schema/SchemaParserTest.java b/pgsql-schema-generator/src/test/java/org/oran/smo/teiv/pgsqlgenerator/schema/SchemaParserTest.java
index 9fa8da9..5404182 100644
--- a/pgsql-schema-generator/src/test/java/org/oran/smo/teiv/pgsqlgenerator/schema/SchemaParserTest.java
+++ b/pgsql-schema-generator/src/test/java/org/oran/smo/teiv/pgsqlgenerator/schema/SchemaParserTest.java
@@ -124,14 +124,14 @@
         List<Table> expectedResult = List.of(Table.builder().name("Sector").columns(
             List.of(
                 Column.builder().name("azimuth").dataType("DECIMAL").build(),
-                Column.builder().name("id").dataType("VARCHAR(511)").postgresConstraints(List.of(PrimaryKeyConstraint.builder().constraintName("PK_Sector_id")
+                Column.builder().name("id").dataType("TEXT").postgresConstraints(List.of(PrimaryKeyConstraint.builder().constraintName("PK_Sector_id")
                         .tableName("Sector").columnToAddConstraintTo("id").build())).build(),
                 Column.builder().name("sectorId").dataType("jsonb").build(),
                 Column.builder().name("geo-location").dataType("geography").build())).build(),
 
         Table.builder().name("Namespace").columns(
             List.of(
-                Column.builder().name("id").dataType("VARCHAR(511)").postgresConstraints(List.of(PrimaryKeyConstraint.builder().constraintName("PK_Namespace_id")
+                Column.builder().name("id").dataType("TEXT").postgresConstraints(List.of(PrimaryKeyConstraint.builder().constraintName("PK_Namespace_id")
                         .tableName("Namespace").columnToAddConstraintTo("id").build())).build(),
                 Column.builder().name("name").dataType("TEXT").build())).build());
         // spotless:on
@@ -157,13 +157,13 @@
         List<Table> expectedResult = List.of(Table.builder().name("Sector").columns(
             List.of(
                 Column.builder().name("azimuth").dataType("DECIMAL").build(),
-                Column.builder().name("id").dataType("VARCHAR(511)").postgresConstraints(List.of(PrimaryKeyConstraint.builder().constraintName("PK_Sector_id")
+                Column.builder().name("id").dataType("TEXT").postgresConstraints(List.of(PrimaryKeyConstraint.builder().constraintName("PK_Sector_id")
                         .tableName("Sector").columnToAddConstraintTo("id").build())).build(),
                 Column.builder().name("sectorId").dataType("jsonb").build(),
                 Column.builder().name("geo-location").dataType("geography").build())).build(),
         Table.builder().name("Namespace").columns(
             List.of(
-                Column.builder().name("id").dataType("VARCHAR(511)").postgresConstraints(List.of(PrimaryKeyConstraint.builder().constraintName("PK_Namespace_id")
+                Column.builder().name("id").dataType("TEXT").postgresConstraints(List.of(PrimaryKeyConstraint.builder().constraintName("PK_Namespace_id")
                         .tableName("Namespace").columnToAddConstraintTo("id").build())).build(),
                 Column.builder().name("name").dataType("TEXT").defaultValue("hello-to-the-world").build())).build());
         // spotless:on
@@ -204,13 +204,13 @@
         List<Table> expectedResult = List.of(Table.builder().name("Sector").columns(
             List.of(
                 Column.builder().name("azimuth").dataType("DECIMAL").build(),
-                Column.builder().name("id").dataType("VARCHAR(511)").postgresConstraints(List.of(PrimaryKeyConstraint.builder().constraintName("PK_Sector_id")
+                Column.builder().name("id").dataType("TEXT").postgresConstraints(List.of(PrimaryKeyConstraint.builder().constraintName("PK_Sector_id")
                         .tableName("Sector").columnToAddConstraintTo("id").build())).build(),
                 Column.builder().name("sectorId").dataType("jsonb").build(),
                 Column.builder().name("geo-location").dataType("geography").build())).build(),
         Table.builder().name("Namespace").columns(
             List.of(
-                Column.builder().name("id").dataType("VARCHAR(511)").postgresConstraints(List.of(PrimaryKeyConstraint.builder().constraintName("PK_Namespace_id")
+                Column.builder().name("id").dataType("TEXT").postgresConstraints(List.of(PrimaryKeyConstraint.builder().constraintName("PK_Namespace_id")
                         .tableName("Namespace").columnToAddConstraintTo("id").build())).build(),
                 Column.builder().name("name").dataType("TEXT").build(),
                 Column.builder().name("namespaceId").dataType("DECIMAL").build())).build());
@@ -250,22 +250,22 @@
         List<Table> expectedResult = List.of(Table.builder().name("Sector").columns(
             List.of(
                 Column.builder().name("azimuth").dataType("DECIMAL").build(),
-                Column.builder().name("id").dataType("VARCHAR(511)").postgresConstraints(List.of(PrimaryKeyConstraint.builder().constraintName("PK_Sector_id")
+                Column.builder().name("id").dataType("TEXT").postgresConstraints(List.of(PrimaryKeyConstraint.builder().constraintName("PK_Sector_id")
                                 .tableName("Sector").columnToAddConstraintTo("id").build())).build(),
                 Column.builder().name("sectorId").dataType("jsonb").build(),
                 Column.builder().name("geo-location").dataType("geography").build(),
-                Column.builder().name("REL_FK_serviced-sector").dataType("VARCHAR(511)")
+                Column.builder().name("REL_FK_serviced-sector").dataType("TEXT")
                         .postgresConstraints(List.of(ForeignKeyConstraint.builder().constraintName("FK_Sector_REL_FK_serviced-sector").tableName("Sector")
                                 .referencedTable("Namespace").columnToAddConstraintTo("REL_FK_serviced-sector").build())).build(),
-                Column.builder().name("REL_ID_serviced-sector_serving-namespace").dataType("VARCHAR(511)")
+                Column.builder().name("REL_ID_serviced-sector_serving-namespace").dataType("TEXT")
                         .postgresConstraints(List.of(UniqueConstraint.builder().constraintName("UNIQUE_Sector_REL_ID_serviced-sector_serving-namespace")
                                 .tableName("Sector").columnToAddConstraintTo("REL_ID_serviced-sector_serving-namespace").build())).build())).build(),
         Table.builder().name("Namespace").columns(
             List.of(
-                Column.builder().name("id").dataType("VARCHAR(511)").postgresConstraints(List.of(PrimaryKeyConstraint.builder().constraintName("PK_Namespace_id")
+                Column.builder().name("id").dataType("TEXT").postgresConstraints(List.of(PrimaryKeyConstraint.builder().constraintName("PK_Namespace_id")
                         .tableName("Namespace").columnToAddConstraintTo("id").build())).build(),
                 Column.builder().name("name").dataType("TEXT").build(),
-                Column.builder().name("REL_FK_serving-namespace").dataType("VARCHAR(511)")
+                Column.builder().name("REL_FK_serving-namespace").dataType("TEXT")
                         .postgresConstraints(List.of(ForeignKeyConstraint.builder().constraintName("FK_Namespace_REL_FK_serving-namespace").tableName("Namespace")
                                 .referencedTable("Sector").columnToAddConstraintTo("REL_FK_serving-namespace").build())).build())).build());
 
@@ -292,19 +292,19 @@
         List<Table> expectedResult = List.of(Table.builder().name("Sector").columns(
             List.of(
                 Column.builder().name("azimuth").dataType("DECIMAL").build(),
-                Column.builder().name("id").dataType("VARCHAR(511)").postgresConstraints(List.of(PrimaryKeyConstraint.builder().constraintName("PK_Sector_id")
+                Column.builder().name("id").dataType("TEXT").postgresConstraints(List.of(PrimaryKeyConstraint.builder().constraintName("PK_Sector_id")
                         .tableName("Sector").columnToAddConstraintTo("id").build())).build(),
                 Column.builder().name("sectorId").dataType("jsonb").build(),
                 Column.builder().name("geo-location").dataType("geography").build())).build(),
         Table.builder().name("Namespace").columns(
             List.of(
-                Column.builder().name("id").dataType("VARCHAR(511)").postgresConstraints(List.of(PrimaryKeyConstraint.builder().constraintName("PK_Namespace_id")
+                Column.builder().name("id").dataType("TEXT").postgresConstraints(List.of(PrimaryKeyConstraint.builder().constraintName("PK_Namespace_id")
                         .tableName("Namespace").columnToAddConstraintTo("id").build())).build(),
                 Column.builder().name("name").dataType("TEXT").build(),
-                Column.builder().name("REL_FK_serving-namespace").dataType("VARCHAR(511)")
+                Column.builder().name("REL_FK_serving-namespace").dataType("TEXT")
                         .postgresConstraints(List.of(ForeignKeyConstraint.builder().constraintName("FK_Namespace_REL_FK_serving-namespace")
                                 .tableName("Namespace").referencedTable("Sector").columnToAddConstraintTo("REL_FK_serving-namespace").build())).build(),
-                Column.builder().name("REL_ID_serviced-sector_serving-namespace").dataType("VARCHAR(511)")
+                Column.builder().name("REL_ID_serviced-sector_serving-namespace").dataType("TEXT")
                         .postgresConstraints(List.of(UniqueConstraint.builder().constraintName("UNIQUE_Namespace_REL_ID_serviced-sector_serving-namespace")
                                 .tableName("Namespace").columnToAddConstraintTo("REL_ID_serviced-sector_serving-namespace").build())).build())).build());
 
@@ -331,19 +331,19 @@
         List<Table> expectedResult = List.of(Table.builder().name("Sector").columns(
             List.of(
                 Column.builder().name("azimuth").dataType("DECIMAL").build(),
-                Column.builder().name("id").dataType("VARCHAR(511)").postgresConstraints(List.of(PrimaryKeyConstraint.builder().constraintName("PK_Sector_id")
+                Column.builder().name("id").dataType("TEXT").postgresConstraints(List.of(PrimaryKeyConstraint.builder().constraintName("PK_Sector_id")
                     .tableName("Sector").columnToAddConstraintTo("id").build())).build(),
                 Column.builder().name("sectorId").dataType("jsonb").build(),
                 Column.builder().name("geo-location").dataType("geography").build(),
-                Column.builder().name("REL_FK_serviced-sector").dataType("VARCHAR(511)")
+                Column.builder().name("REL_FK_serviced-sector").dataType("TEXT")
                         .postgresConstraints(List.of(ForeignKeyConstraint.builder().constraintName("FK_Sector_REL_FK_serviced-sector").tableName("Sector").referencedTable("Namespace")
                                 .columnToAddConstraintTo("REL_FK_serviced-sector").build())).build(),
-                Column.builder().name("REL_ID_serviced-sector_serving-namespace").dataType("VARCHAR(511)")
+                Column.builder().name("REL_ID_serviced-sector_serving-namespace").dataType("TEXT")
                         .postgresConstraints(List.of(UniqueConstraint.builder().constraintName("UNIQUE_Sector_REL_ID_serviced-sector_serving-namespace").tableName("Sector")
                                 .columnToAddConstraintTo("REL_ID_serviced-sector_serving-namespace").build())).build())).build(),
         Table.builder().name("Namespace").columns(
             List.of(
-                Column.builder().name("id").dataType("VARCHAR(511)").postgresConstraints(List.of(PrimaryKeyConstraint.builder().constraintName("PK_Namespace_id")
+                Column.builder().name("id").dataType("TEXT").postgresConstraints(List.of(PrimaryKeyConstraint.builder().constraintName("PK_Namespace_id")
                         .tableName("Namespace").columnToAddConstraintTo("id").build())).build(),
                 Column.builder().name("name").dataType("TEXT").build())).build());
         // spotless:on
@@ -369,23 +369,23 @@
         List<Table> expectedResult = List.of(Table.builder().name("Sector").columns(
             List.of(
                 Column.builder().name("azimuth").dataType("DECIMAL").build(),
-                Column.builder().name("id").dataType("VARCHAR(511)").postgresConstraints(List.of(PrimaryKeyConstraint.builder().constraintName("PK_Sector_id")
+                Column.builder().name("id").dataType("TEXT").postgresConstraints(List.of(PrimaryKeyConstraint.builder().constraintName("PK_Sector_id")
                         .tableName("Sector").columnToAddConstraintTo("id").build())).build(),
                 Column.builder().name("sectorId").dataType("jsonb").build(),
                 Column.builder().name("geo-location").dataType("geography").build())).build(),
         Table.builder().name("Namespace").columns(
             List.of(
-                Column.builder().name("id").dataType("VARCHAR(511)").postgresConstraints(List.of(PrimaryKeyConstraint.builder().constraintName("PK_Namespace_id")
+                Column.builder().name("id").dataType("TEXT").postgresConstraints(List.of(PrimaryKeyConstraint.builder().constraintName("PK_Namespace_id")
                         .tableName("Namespace").columnToAddConstraintTo("id").build())).build(),
                 Column.builder().name("name").dataType("TEXT").build())).build(),
         Table.builder().name("REL_serviced-sector_serving-namespace").columns(
             List.of(
-                Column.builder().name("id").dataType("VARCHAR(511)").postgresConstraints(List.of(PrimaryKeyConstraint.builder().constraintName("PK_REL_serviced-sector_serving-namespace_id")
+                Column.builder().name("id").dataType("TEXT").postgresConstraints(List.of(PrimaryKeyConstraint.builder().constraintName("PK_REL_serviced-sector_serving-namespace_id")
                         .tableName("REL_serviced-sector_serving-namespace").columnToAddConstraintTo("id").build())).build(),
-                Column.builder().name("aSide_Sector").dataType("VARCHAR(511)")
+                Column.builder().name("aSide_Sector").dataType("TEXT")
                         .postgresConstraints(List.of(ForeignKeyConstraint.builder().constraintName("FK_REL_serviced-sector_serving-namespace_aSide_Sector")
                                 .tableName("REL_serviced-sector_serving-namespace").referencedTable("Sector").columnToAddConstraintTo("aSide_Sector").build())).build(),
-                Column.builder().name("bSide_Namespace").dataType("VARCHAR(511)")
+                Column.builder().name("bSide_Namespace").dataType("TEXT")
                         .postgresConstraints(List.of(ForeignKeyConstraint.builder().constraintName("FK_REL_serviced-sector_serving-namespace_bSide_Namespace")
                                 .tableName("REL_serviced-sector_serving-namespace").referencedTable("Namespace").columnToAddConstraintTo("bSide_Namespace").build())).build())).build());
         // spotless:on
@@ -411,18 +411,18 @@
         List<Table> expectedResult = List.of(Table.builder().name("Sector").columns(
             List.of(
                 Column.builder().name("azimuth").dataType("DECIMAL").build(),
-                Column.builder().name("id").dataType("VARCHAR(511)").postgresConstraints(List.of(PrimaryKeyConstraint.builder().constraintName("PK_Sector_id")
+                Column.builder().name("id").dataType("TEXT").postgresConstraints(List.of(PrimaryKeyConstraint.builder().constraintName("PK_Sector_id")
                         .tableName("Sector").columnToAddConstraintTo("id").build())).build(),
                 Column.builder().name("sectorId").dataType("jsonb").build(),
                 Column.builder().name("geo-location").dataType("geography").build())).build(),
         Table.builder().name("REL_serviced-sector_serving-sector").columns(
             List.of(
-                Column.builder().name("id").dataType("VARCHAR(511)").postgresConstraints(List.of(PrimaryKeyConstraint.builder().constraintName("PK_REL_serviced-sector_serving-sector_id")
+                Column.builder().name("id").dataType("TEXT").postgresConstraints(List.of(PrimaryKeyConstraint.builder().constraintName("PK_REL_serviced-sector_serving-sector_id")
                         .tableName("REL_serviced-sector_serving-sector").columnToAddConstraintTo("id").build())).build(),
-                Column.builder().name("aSide_Sector").dataType("VARCHAR(511)")
+                Column.builder().name("aSide_Sector").dataType("TEXT")
                         .postgresConstraints(List.of(ForeignKeyConstraint.builder().constraintName("FK_REL_serviced-sector_serving-sector_aSide_Sector")
                                 .tableName("REL_serviced-sector_serving-sector").referencedTable("Sector").columnToAddConstraintTo("aSide_Sector").build())).build(),
-                Column.builder().name("bSide_Sector").dataType("VARCHAR(511)")
+                Column.builder().name("bSide_Sector").dataType("TEXT")
                         .postgresConstraints(List.of(ForeignKeyConstraint.builder().constraintName("FK_REL_serviced-sector_serving-sector_bSide_Sector")
                                 .tableName("REL_serviced-sector_serving-sector").referencedTable("Sector").columnToAddConstraintTo("bSide_Sector").build())).build())).build());
         // spotless:on
@@ -454,8 +454,8 @@
                 // Check if all columns for each table were added correctly
                 Assertions.assertEquals(columnsInExpected.size(), columnsInGenerated.size());
 
-                List<String> allColumnNamesForATableInGeneratedResult = TestHelper.extractColumnNamesForATable(columnsInGenerated);
-                List<String> allColumnNamesForATableInExpectedResult = TestHelper.extractColumnNamesForATable(columnsInExpected);
+                List<String> allColumnNamesForATableInGeneratedResult = TestHelper.extractColumnNames(columnsInGenerated);
+                List<String> allColumnNamesForATableInExpectedResult = TestHelper.extractColumnNames(columnsInExpected);
 
                 // Check if generatedResult contains all columns for a table
                 Assertions.assertEquals(allColumnNamesForATableInExpectedResult, allColumnNamesForATableInGeneratedResult);
@@ -465,7 +465,7 @@
                     .findFirst().ifPresent(columnInGenerated -> {
 
                         if (columnInExpected.getName().equals("id")) {
-                            Assertions.assertEquals("VARCHAR(511)", columnInGenerated.getDataType());
+                            Assertions.assertEquals("TEXT", columnInGenerated.getDataType());
                             Assertions.assertTrue(TestHelper.checkIfColumnIsPrimaryKey(columnInGenerated.getPostgresConstraints()));
                         }
 
diff --git a/pgsql-schema-generator/src/test/java/org/oran/smo/teiv/pgsqlgenerator/schema/data/GreenFieldInstallationTest.java b/pgsql-schema-generator/src/test/java/org/oran/smo/teiv/pgsqlgenerator/schema/data/GreenFieldInstallationTest.java
index 20c81bb..78b4add 100644
--- a/pgsql-schema-generator/src/test/java/org/oran/smo/teiv/pgsqlgenerator/schema/data/GreenFieldInstallationTest.java
+++ b/pgsql-schema-generator/src/test/java/org/oran/smo/teiv/pgsqlgenerator/schema/data/GreenFieldInstallationTest.java
@@ -84,10 +84,10 @@
     void verifyNoExceptionsThrownForNBCWhenGreenfieldEnabled() {
         //Given
         List<Table> mockModelServiceEntities = List.of(Table.builder().name("Sector").columns(List.of(Column.builder().name(
-                "azimuth").dataType("DECIMAL").build(), Column.builder().name("id").dataType("VARCHAR(511)")
-                        .postgresConstraints(List.of(PrimaryKeyConstraint.builder().tableName("Sector").constraintName(
-                                "PK_Source_id").columnToAddConstraintTo("id").build())).build(), Column.builder().name(
-                                        "sectorId").dataType("jsonb").defaultValue("101").build(), Column.builder().name(
+                "azimuth").dataType("DECIMAL").build(), Column.builder().name("id").dataType("TEXT").postgresConstraints(
+                        List.of(PrimaryKeyConstraint.builder().tableName("Sector").constraintName("PK_Source_id")
+                                .columnToAddConstraintTo("id").build())).build(), Column.builder().name("sectorId")
+                                        .dataType("jsonb").defaultValue("101").build(), Column.builder().name(
                                                 "geo-location").dataType("geography").build())).build());
 
         // When
@@ -99,7 +99,7 @@
 
         // When
         List<Table> mockBaselineEntitiesColumnRenamed = List.of(Table.builder().name("Sector").columns(List.of(Column
-                .builder().name("azimuth").dataType("DECIMAL").build(), Column.builder().name("id").dataType("VARCHAR(511)")
+                .builder().name("azimuth").dataType("DECIMAL").build(), Column.builder().name("id").dataType("TEXT")
                         .postgresConstraints(List.of(PrimaryKeyConstraint.builder().tableName("Sector").constraintName(
                                 "PK_Source_id").columnToAddConstraintTo("id").build())).build(), Column.builder().name(
                                         "sectorId123").dataType("jsonb").defaultValue("101").build(), Column.builder().name(
@@ -111,7 +111,7 @@
 
         // When
         List<Table> mockBaselineEntitiesColumnDeleted = List.of(Table.builder().name("Sector").columns(List.of(Column
-                .builder().name("azimuth").dataType("DECIMAL").build(), Column.builder().name("id").dataType("VARCHAR(511)")
+                .builder().name("azimuth").dataType("DECIMAL").build(), Column.builder().name("id").dataType("TEXT")
                         .postgresConstraints(List.of(PrimaryKeyConstraint.builder().tableName("Sector").constraintName(
                                 "PK_Source_id").columnToAddConstraintTo("id").build())).build(), Column.builder().name(
                                         "geo-location").dataType("geography").build())).build());
diff --git a/pgsql-schema-generator/src/test/java/org/oran/smo/teiv/pgsqlgenerator/schema/data/ModelComparatorTest.java b/pgsql-schema-generator/src/test/java/org/oran/smo/teiv/pgsqlgenerator/schema/data/ModelComparatorTest.java
index b428154..16168a5 100644
--- a/pgsql-schema-generator/src/test/java/org/oran/smo/teiv/pgsqlgenerator/schema/data/ModelComparatorTest.java
+++ b/pgsql-schema-generator/src/test/java/org/oran/smo/teiv/pgsqlgenerator/schema/data/ModelComparatorTest.java
@@ -45,13 +45,13 @@
         Table.builder().name("Sector").columns(
             List.of(
                 Column.builder().name("azimuth").dataType("DECIMAL").build(),
-                Column.builder().name("id").dataType("VARCHAR(511)").postgresConstraints(List.of(
+                Column.builder().name("id").dataType("TEXT").postgresConstraints(List.of(
                         PrimaryKeyConstraint.builder().tableName("Sector").constraintName("PK_Source_id").columnToAddConstraintTo("id").build())).build(),
                 Column.builder().name("sectorId").dataType("jsonb").defaultValue("101").build(),
                 Column.builder().name("geo-location").dataType("geography").build())).build(),
         Table.builder().name("Namespace").columns(
             List.of(
-                Column.builder().name("id").dataType("VARCHAR(511)").postgresConstraints(List.of(
+                Column.builder().name("id").dataType("TEXT").postgresConstraints(List.of(
                         PrimaryKeyConstraint.builder().tableName("Namespace").constraintName("PK_Namespace_id").columnToAddConstraintTo("id").build())).build(),
                 Column.builder().name("name").dataType("TEXT").build())).build());
     //spotless:on
@@ -70,7 +70,7 @@
         // Given baseline mock data
         List<Table> baselineEntitiesTableMissing = List.of(Table.builder().name("Sector").columns(
             List.of(Column.builder().name("azimuth").dataType("DECIMAL").build(),
-                Column.builder().name("id").dataType("VARCHAR(511)").postgresConstraints(List.of(
+                Column.builder().name("id").dataType("TEXT").postgresConstraints(List.of(
                         PrimaryKeyConstraint.builder().tableName("Sector").constraintName("PK_Source_id").columnToAddConstraintTo("id").build())).build(),
                 Column.builder().name("sectorId").dataType("jsonb").defaultValue("101").build(),
                 Column.builder().name("geo-location").dataType("geography").build())).build());
@@ -78,7 +78,7 @@
         // Correct result of difference below
         Map<String, List<Table>> correctMappedDifferences = TestHelper.identifiedModelChangeMapping();
         correctMappedDifferences.get("CREATE").add(Table.builder().name("Namespace").columns(
-            List.of(Column.builder().name("id").dataType("VARCHAR(511)").postgresConstraints(List.of(
+            List.of(Column.builder().name("id").dataType("TEXT").postgresConstraints(List.of(
                             PrimaryKeyConstraint.builder().tableName("Namespace").constraintName("PK_Namespace_id").columnToAddConstraintTo("id").build())).build(),
                 Column.builder().name("name").dataType("TEXT").build())).build());
 
@@ -102,7 +102,7 @@
 
         // Given baseline mock data
         List<Table> baselineEntitiesWIthColumnAndTableMissing = List.of(Table.builder().name("Sector").columns(
-            List.of(Column.builder().name("id").dataType("VARCHAR(511)").postgresConstraints(List.of(
+            List.of(Column.builder().name("id").dataType("TEXT").postgresConstraints(List.of(
                             PrimaryKeyConstraint.builder().tableName("Sector").constraintName("PK_Source_id").columnToAddConstraintTo("id").build())).build(),
                 Column.builder().name("sectorId").dataType("jsonb").defaultValue("101").build(),
                 Column.builder().name("geo-location").dataType("geography").build())).build());
@@ -110,7 +110,7 @@
         // Correct result of difference below
         Map<String, List<Table>> correctMappedDifferences = TestHelper.identifiedModelChangeMapping();
         correctMappedDifferences.get("CREATE").add(Table.builder().name("Namespace").columns(
-            List.of(Column.builder().name("id").dataType("VARCHAR(511)").postgresConstraints(List.of(
+            List.of(Column.builder().name("id").dataType("TEXT").postgresConstraints(List.of(
                             PrimaryKeyConstraint.builder().tableName("Namespace").constraintName("PK_Namespace_id").columnToAddConstraintTo("id").build())).build(),
                 Column.builder().name("name").dataType("TEXT").build())).build());
         correctMappedDifferences.get("ALTER")
@@ -136,7 +136,7 @@
 
         // Given baseline mock data
         List<Table> baselineEntitiesWIthColumnAndTableAndDefaultValueMissing = List.of(Table.builder().name("Sector").columns(
-            List.of(Column.builder().name("id").dataType("VARCHAR(511)").postgresConstraints(List.of(
+            List.of(Column.builder().name("id").dataType("TEXT").postgresConstraints(List.of(
                             PrimaryKeyConstraint.builder().tableName("Sector").constraintName("PK_Source_id").columnToAddConstraintTo("id").build())).build(),
                 Column.builder().name("sectorId").dataType("jsonb").build(),
                 Column.builder().name("geo-location").dataType("geography").build())).build());
@@ -144,7 +144,7 @@
         // Correct result of difference below
         Map<String, List<Table>> correctMappedDifferences = TestHelper.identifiedModelChangeMapping();
         correctMappedDifferences.get("CREATE").add(Table.builder().name("Namespace").columns(
-            List.of(Column.builder().name("id").dataType("VARCHAR(511)").postgresConstraints(List.of(
+            List.of(Column.builder().name("id").dataType("TEXT").postgresConstraints(List.of(
                             PrimaryKeyConstraint.builder().tableName("Namespace").constraintName("PK_Namespace_id").columnToAddConstraintTo("id").build())).build(),
                 Column.builder().name("name").dataType("TEXT").build())).build());
         correctMappedDifferences.get("ALTER")
diff --git a/pgsql-schema-generator/src/test/java/org/oran/smo/teiv/pgsqlgenerator/schema/data/TableBuilderTest.java b/pgsql-schema-generator/src/test/java/org/oran/smo/teiv/pgsqlgenerator/schema/data/TableBuilderTest.java
index 7e9041d..fc33adc 100644
--- a/pgsql-schema-generator/src/test/java/org/oran/smo/teiv/pgsqlgenerator/schema/data/TableBuilderTest.java
+++ b/pgsql-schema-generator/src/test/java/org/oran/smo/teiv/pgsqlgenerator/schema/data/TableBuilderTest.java
@@ -20,10 +20,6 @@
  */
 package org.oran.smo.teiv.pgsqlgenerator.schema.data;
 
-import java.lang.reflect.Constructor;
-import java.lang.reflect.InvocationTargetException;
-import java.util.ArrayList;
-import java.util.Collection;
 import java.util.List;
 
 import org.junit.jupiter.api.Assertions;
@@ -65,131 +61,172 @@
 
     //spotless:off
     List<Entity> entities = List.of(
-            Entity.builder().entityName("Sector").attributes(
+        Entity.builder().entityName("EntityA").storedAt("module-a_EntityA").attributes(
                 List.of(
                     Attribute.builder().name("azimuth").dataType("DECIMAL").build(),
-                    Attribute.builder().name("id").dataType("VARCHAR(511)").constraints(List.of(PrimaryKeyConstraint.builder().constraintName("PK_Sector_id")
+                    Attribute.builder().name("id").dataType("TEXT").constraints(List.of(PrimaryKeyConstraint.builder().constraintName("PK_Sector_id")
                             .tableName("Sector").columnToAddConstraintTo("id").build())).build(),
                     Attribute.builder().name("geo-location").dataType("geography").build(),
                     Attribute.builder().name("sectorId").dataType("jsonb").build()))
-                .moduleReferenceName("").build(),
+            .moduleReferenceName("")
+            .build(),
 
-            Entity.builder().entityName("Namespace").attributes(
+        Entity.builder().entityName("EntityB").storedAt("module-b_EntityB").attributes(
                 List.of(
-                    Attribute.builder().name("id").dataType("VARCHAR(511)").constraints(List.of(PrimaryKeyConstraint.builder().constraintName("PK_Namespace_id")
+                    Attribute.builder().name("id").dataType("TEXT").constraints(List.of(PrimaryKeyConstraint.builder().constraintName("PK_Namespace_id")
                             .tableName("Namespace").columnToAddConstraintTo("id").build())).build(),
                     Attribute.builder().name("name").dataType("TEXT").build()))
-                .moduleReferenceName("").build());
+            .build());
 
     List<List<Relationship>> relationships = List.of(
-            List.of(Relationship.builder().name("oneToOne")
-                    .aSideAssociationName("used-Sector")
-                    .aSideMOType("Sector")
-                    .aSideMinCardinality(0)
-                    .aSideMaxCardinality(1)
-                    .bSideAssociationName("used-by-Namespace")
-                    .bSideMOType("Namespace")
-                    .bSideMinCardinality(0)
-                    .bSideMaxCardinality(1)
-                    .relationshipDataLocation("A_SIDE")
-                    .associationKind("BI_DIRECTIONAL")
-                    .connectSameEntity(false)
-                    .moduleReferenceName("").build()),
-            List.of(Relationship.builder().name("oneToMany")
-                    .aSideAssociationName("used-Sector")
-                    .aSideMOType("Sector")
-                    .aSideMinCardinality(0)
-                    .aSideMaxCardinality(1)
-                    .bSideAssociationName("used-by-Namespace")
-                    .bSideMOType("Namespace")
-                    .bSideMinCardinality(0)
-                    .bSideMaxCardinality(100)
-                    .relationshipDataLocation("B_SIDE")
-                    .associationKind("BI_DIRECTIONAL")
-                    .connectSameEntity(false)
-                    .moduleReferenceName("").build()),
-            List.of(Relationship.builder().name("manyToOne")
-                    .aSideAssociationName("used-Sector")
-                    .aSideMOType("Sector")
-                    .aSideMinCardinality(0)
-                    .aSideMaxCardinality(100)
-                    .bSideAssociationName("used-by-Namespace")
-                    .bSideMOType("Namespace")
-                    .bSideMinCardinality(0)
-                    .bSideMaxCardinality(1)
-                    .relationshipDataLocation("A_SIDE")
-                    .associationKind("BI_DIRECTIONAL")
-                    .connectSameEntity(false)
-                    .moduleReferenceName("").build()),
-            List.of(Relationship.builder().name("manyToMany")
-                    .aSideAssociationName("used-Sector")
-                    .aSideMOType("Sector")
-                    .aSideMinCardinality(0)
-                    .aSideMaxCardinality(100)
-                    .bSideAssociationName("used-by-Namespace")
-                    .bSideMOType("Namespace")
-                    .bSideMinCardinality(0)
-                    .bSideMaxCardinality(100)
-                    .relationshipDataLocation("RELATION")
-                    .associationKind("BI_DIRECTIONAL")
-                    .connectSameEntity(false)
-                    .moduleReferenceName("").build()),
-            // Relationship connecting same entity 1:1
-            List.of(Relationship.builder().name("relationshipConnectingSameEntity")
-                    .aSideAssociationName("used-Sector")
-                    .aSideMOType("Sector")
-                    .aSideMinCardinality(0)
-                    .aSideMaxCardinality(1)
-                    .bSideAssociationName("used-by-Sector")
-                    .bSideMOType("Sector")
-                    .bSideMinCardinality(0)
-                    .bSideMaxCardinality(1)
-                    .relationshipDataLocation("RELATION")
-                    .associationKind("BI_DIRECTIONAL")
-                    .connectSameEntity(true)
-                    .moduleReferenceName("").build()),
-            // Relationship connecting same entity 1:N
-            List.of(Relationship.builder().name("relationshipConnectingSameEntity")
-                    .aSideAssociationName("used-Sector")
-                    .aSideMOType("Sector")
-                    .aSideMinCardinality(0)
-                    .aSideMaxCardinality(1)
-                    .bSideAssociationName("used-by-Sector")
-                    .bSideMOType("Sector")
-                    .bSideMinCardinality(0)
-                    .bSideMaxCardinality(100)
-                    .relationshipDataLocation("RELATION")
-                    .associationKind("BI_DIRECTIONAL")
-                    .connectSameEntity(true)
-                    .moduleReferenceName("").build()),
-            // Relationship connecting same entity N:1
-            List.of(Relationship.builder().name("relationshipConnectingSameEntity")
-                    .aSideAssociationName("used-Sector")
-                    .aSideMOType("Sector")
-                    .aSideMinCardinality(0)
-                    .aSideMaxCardinality(100)
-                    .bSideAssociationName("used-by-Sector")
-                    .bSideMOType("Sector")
-                    .bSideMinCardinality(0)
-                    .bSideMaxCardinality(1)
-                    .relationshipDataLocation("RELATION")
-                    .associationKind("BI_DIRECTIONAL")
-                    .connectSameEntity(true)
-                    .moduleReferenceName("").build()),
-            // Relationship connecting same entity N:M
-            List.of(Relationship.builder().name("relationshipConnectingSameEntity")
-                    .aSideAssociationName("used-Sector")
-                    .aSideMOType("Sector")
-                    .aSideMinCardinality(0)
-                    .aSideMaxCardinality(100)
-                    .bSideAssociationName("used-by-Sector")
-                    .bSideMOType("Sector")
-                    .bSideMinCardinality(0)
-                    .bSideMaxCardinality(100)
-                    .relationshipDataLocation("RELATION")
-                    .associationKind("BI_DIRECTIONAL")
-                    .connectSameEntity(true)
-                    .moduleReferenceName("").build()));
+        List.of(Relationship.builder().name("oneToOne")
+            .aSideAssociationName("used-EntityB")
+            .aSideMOType("EntityA")
+            .aSideModule("module-a")
+            .aSideMinCardinality(0)
+            .aSideMaxCardinality(1)
+            .bSideAssociationName("used-by-EntityA")
+            .bSideMOType("EntityB")
+            .bSideModule("module-b")
+            .bSideMinCardinality(0)
+            .bSideMaxCardinality(1)
+            .relationshipDataLocation("A_SIDE")
+            .associationKind("BI_DIRECTIONAL")
+            .connectSameEntity(false)
+            .storedAt("module-a_EntityA")
+            .aSideStoredAt("module-a_EntityA")
+            .bSideStoredAt("module-b_EntityB")
+            .moduleReferenceName("").build()),
+        List.of(Relationship.builder().name("oneToMany")
+            .aSideAssociationName("used-EntityB")
+            .aSideMOType("EntityA")
+            .aSideModule("module-a")
+            .aSideMinCardinality(0)
+            .aSideMaxCardinality(1)
+            .bSideAssociationName("used-by-EntityA")
+            .bSideMOType("EntityB")
+            .bSideModule("module-b")
+            .bSideMinCardinality(0)
+            .bSideMaxCardinality(100)
+            .relationshipDataLocation("A_SIDE")
+            .associationKind("BI_DIRECTIONAL")
+            .connectSameEntity(false)
+            .storedAt("module-b_EntityB")
+            .aSideStoredAt("module-a_EntityA")
+            .bSideStoredAt("module-b_EntityB")
+            .moduleReferenceName("").build()),
+        List.of(Relationship.builder().name("ManyToOne")
+            .aSideAssociationName("used-EntityB")
+            .aSideMOType("EntityA")
+            .aSideModule("module-a")
+            .aSideMinCardinality(0)
+            .aSideMaxCardinality(100)
+            .bSideAssociationName("used-by-EntityA")
+            .bSideMOType("EntityB")
+            .bSideModule("module-b")
+            .bSideMinCardinality(0)
+            .bSideMaxCardinality(1)
+            .relationshipDataLocation("A_SIDE")
+            .associationKind("BI_DIRECTIONAL")
+            .connectSameEntity(false)
+            .storedAt("module-a_EntityA")
+            .aSideStoredAt("module-a_EntityA")
+            .bSideStoredAt("module-b_EntityB")
+            .moduleReferenceName("").build()),
+        List.of(Relationship.builder().name("ManyToMany")
+            .aSideAssociationName("used-EntityB")
+            .aSideMOType("EntityA")
+            .aSideModule("module-a")
+            .aSideMinCardinality(0)
+            .aSideMaxCardinality(100)
+            .bSideAssociationName("used-by-EntityA")
+            .bSideMOType("EntityB")
+            .bSideModule("module-b")
+            .bSideMinCardinality(0)
+            .bSideMaxCardinality(100)
+            .relationshipDataLocation("RELATION")
+            .associationKind("BI_DIRECTIONAL")
+            .connectSameEntity(false)
+            .storedAt("module-a-b_ManyToMany")
+            .aSideStoredAt("module-a_EntityA")
+            .bSideStoredAt("module-b_EntityB")
+            .moduleReferenceName("module-a-b").build()),
+        // Relationship connecting same entity 1:1
+        List.of(Relationship.builder().name("relationshipConnectingSameEntity")
+            .aSideAssociationName("used-EntityA")
+            .aSideMOType("EntityA")
+            .aSideModule("module-a")
+            .aSideMinCardinality(0)
+            .aSideMaxCardinality(1)
+            .bSideAssociationName("used-by-EntityA")
+            .bSideMOType("EntityA")
+            .bSideModule("module-a")
+            .bSideMinCardinality(0)
+            .bSideMaxCardinality(1)
+            .relationshipDataLocation("RELATION")
+            .associationKind("BI_DIRECTIONAL")
+            .connectSameEntity(false)
+            .storedAt("module-a_relationshipConnectingSameEntity")
+            .aSideStoredAt("module-a_EntityA")
+            .bSideStoredAt("module-a_EntityA")
+            .moduleReferenceName("module-a").build()),
+        // Relationship connecting same entity 1:N
+        List.of(Relationship.builder().name("relationshipConnectingSameEntity")
+            .aSideAssociationName("used-EntityA")
+            .aSideMOType("EntityA")
+            .aSideModule("module-a")
+            .aSideMinCardinality(0)
+            .aSideMaxCardinality(1)
+            .bSideAssociationName("used-by-EntityA")
+            .bSideMOType("EntityA")
+            .bSideModule("module-a")
+            .bSideMinCardinality(0)
+            .bSideMaxCardinality(100)
+            .relationshipDataLocation("RELATION")
+            .associationKind("BI_DIRECTIONAL")
+            .connectSameEntity(false)
+            .storedAt("module-a_relationshipConnectingSameEntity")
+            .aSideStoredAt("module-a_EntityA")
+            .bSideStoredAt("module-a_EntityA")
+            .moduleReferenceName("module-a").build()),
+        // Relationship connecting same entity N:1
+        List.of(Relationship.builder().name("relationshipConnectingSameEntity")
+            .aSideAssociationName("used-EntityA")
+            .aSideMOType("EntityA")
+            .aSideModule("module-a")
+            .aSideMinCardinality(0)
+            .aSideMaxCardinality(100)
+            .bSideAssociationName("used-by-EntityA")
+            .bSideMOType("EntityA")
+            .bSideModule("module-a")
+            .bSideMinCardinality(0)
+            .bSideMaxCardinality(1)
+            .relationshipDataLocation("RELATION")
+            .associationKind("BI_DIRECTIONAL")
+            .connectSameEntity(false)
+            .storedAt("module-a_relationshipConnectingSameEntity")
+            .aSideStoredAt("module-a_EntityA")
+            .bSideStoredAt("module-a_EntityA")
+            .moduleReferenceName("module-a").build()),
+        // Relationship connecting same entity N:M
+        List.of(Relationship.builder().name("relationshipConnectingSameEntity")
+            .aSideAssociationName("used-EntityA")
+            .aSideMOType("EntityA")
+            .aSideModule("module-a")
+            .aSideMinCardinality(0)
+            .aSideMaxCardinality(100)
+            .bSideAssociationName("used-by-EntityA")
+            .bSideMOType("EntityA")
+            .bSideModule("module-a")
+            .bSideMinCardinality(0)
+            .bSideMaxCardinality(100)
+            .relationshipDataLocation("RELATION")
+            .associationKind("BI_DIRECTIONAL")
+            .connectSameEntity(false)
+            .storedAt("module-a_relationshipConnectingSameEntity")
+            .aSideStoredAt("module-a_EntityA")
+            .bSideStoredAt("module-a_EntityA")
+            .moduleReferenceName("module-a").build()));
     //spotless:on
 
     @Test
@@ -198,34 +235,34 @@
         //spotless:off
 
         // Given
-        List<Table> expectedResult = List.of(Table.builder().name("Sector").columns(
-            List.of(
-                Column.builder().name("azimuth").dataType("DECIMAL").build(),
-                Column.builder().name("id").dataType("VARCHAR(511)").postgresConstraints(List.of(PrimaryKeyConstraint.builder().constraintName("PK_Sector_id")
-                        .tableName("Sector").columnToAddConstraintTo("id").build())).build(),
-                Column.builder().name("sectorId").dataType("jsonb").build(),
-                Column.builder().name("geo-location").dataType("geography").build(),
-                Column.builder().name("CD_sourceIds").dataType("jsonb").defaultValue("[]").build(),
-                Column.builder().name("REL_FK_used-Sector").dataType("VARCHAR(511)")
-                        .postgresConstraints(List.of(ForeignKeyConstraint.builder().constraintName("FK_Sector_REL_FK_used-Sector").tableName("Sector")
-                                .referencedTable("Namespace").columnToAddConstraintTo("REL_FK_used-sector").build())).build(),
-                Column.builder().name("REL_ID_oneToOne").dataType("VARCHAR(511)")
-                        .postgresConstraints(List.of(UniqueConstraint.builder().constraintName("UNIQUE_Sector_REL_ID_oneToOne").tableName("Sector")
-                                .columnToAddConstraintTo("REL_ID_oneToOne").build())).build(),
-                Column.builder().name("REL_CD_sourceIds_oneToOne").dataType("jsonb").defaultValue("[]").build(),
-                Column.builder().name(String.format("CD_%s", CLASSIFIERS)).dataType(JSONB).defaultValue("[]").build(),
-                Column.builder().name(String.format("CD_%s", DECORATORS)).dataType(JSONB).defaultValue("{}").build(),
+        List<Table> expectedResult = List.of(Table.builder().name("module-a_EntityA").columns(
+                List.of(
+                    Column.builder().name("azimuth").dataType("DECIMAL").build(),
+                    Column.builder().name("id").dataType("TEXT").postgresConstraints(List.of(PrimaryKeyConstraint.builder().constraintName("PK_module-a_EntityA_id")
+                        .tableName("module-a_EntityA").columnToAddConstraintTo("id").build())).build(),
+                    Column.builder().name("sectorId").dataType("jsonb").build(),
+                    Column.builder().name("geo-location").dataType("geography").build(),
+                    Column.builder().name("CD_sourceIds").dataType("jsonb").defaultValue("[]").build(),
+                    Column.builder().name("REL_FK_used-EntityB").dataType("TEXT")
+                        .postgresConstraints(List.of(ForeignKeyConstraint.builder().constraintName("FK_MODULE-A_ENTITYA_REL_FK_USED-ENTITYB").tableName("module-a_EntityA")
+                            .referencedTable("module-b_EntityB").columnToAddConstraintTo("REL_FK_used-EntityB").build())).build(),
+                    Column.builder().name("REL_ID_oneToOne").dataType("TEXT")
+                        .postgresConstraints(List.of(UniqueConstraint.builder().constraintName("UNIQUE_MODULE-A_ENTITYA_REL_ID_ONETOONE").tableName("module-a_EntityA")
+                            .columnToAddConstraintTo("REL_ID_oneToOne").build())).build(),
+                    Column.builder().name("REL_CD_sourceIds_oneToOne").dataType("jsonb").defaultValue("[]").build(),
+                    Column.builder().name(String.format("CD_%s", CLASSIFIERS)).dataType(JSONB).defaultValue("[]").build(),
+                    Column.builder().name(String.format("CD_%s", DECORATORS)).dataType(JSONB).defaultValue("{}").build(),
                     Column.builder().name(String.format("REL_CD_%s_oneToOne", CLASSIFIERS)).dataType(JSONB).defaultValue("[]").build(),
                     Column.builder().name(String.format("REL_CD_%s_oneToOne", DECORATORS)).dataType(JSONB).defaultValue("{}").build())).build(),
 
-        Table.builder().name("Namespace").columns(
-            List.of(
-                Column.builder().name("id").dataType("VARCHAR(511)").postgresConstraints(List.of(PrimaryKeyConstraint.builder().constraintName("PK_Namespace_id")
-                        .tableName("Namespace").columnToAddConstraintTo("id").build())).build(),
-                Column.builder().name("name").dataType("TEXT").build(),
-                Column.builder().name("CD_sourceIds").dataType("jsonb").defaultValue("[]").build(),
-                Column.builder().name(String.format("CD_%s", CLASSIFIERS)).dataType("jsonb").defaultValue("[]").build(),
-                Column.builder().name(String.format("CD_%s", DECORATORS)).dataType("jsonb").defaultValue("{}").build())).build());
+            Table.builder().name("module-b_EntityB").columns(
+                List.of(
+                    Column.builder().name("id").dataType("TEXT").postgresConstraints(List.of(PrimaryKeyConstraint.builder().constraintName("PK_module-b_EntityB_id")
+                        .tableName("module-b_EntityB").columnToAddConstraintTo("id").build())).build(),
+                    Column.builder().name("name").dataType("TEXT").build(),
+                    Column.builder().name("CD_sourceIds").dataType("jsonb").defaultValue("[]").build(),
+                    Column.builder().name(String.format("CD_%s", CLASSIFIERS)).dataType("jsonb").defaultValue("[]").build(),
+                    Column.builder().name(String.format("CD_%s", DECORATORS)).dataType("jsonb").defaultValue("{}").build())).build());
 
         //spotless:on
 
@@ -242,34 +279,34 @@
         //spotless:off
 
         // Given
-        List<Table> expectedResult = List.of(Table.builder().name("Sector").columns(
-            List.of(
-                Column.builder().name("azimuth").dataType("DECIMAL").build(),
-                Column.builder().name("id").dataType("VARCHAR(511)").postgresConstraints(List.of(PrimaryKeyConstraint.builder().constraintName("PK_Sector_id")
-                        .tableName("Sector").columnToAddConstraintTo("id").build())).build(),
-                Column.builder().name("sectorId").dataType("jsonb").build(),
-                Column.builder().name("geo-location").dataType("geography").build(),
-                Column.builder().name("CD_sourceIds").dataType("jsonb").defaultValue("[]").build(),
-                Column.builder().name(String.format("CD_%s", CLASSIFIERS)).dataType("jsonb").defaultValue("[]").build(),
-                Column.builder().name(String.format("CD_%s", DECORATORS)).dataType("jsonb").defaultValue("{}").build())).build(),
+        List<Table> expectedResult = List.of(Table.builder().name("module-a_EntityA").columns(
+                List.of(
+                    Column.builder().name("azimuth").dataType("DECIMAL").build(),
+                    Column.builder().name("id").dataType("TEXT").postgresConstraints(List.of(PrimaryKeyConstraint.builder().constraintName("PK_module-a_EntityA_id")
+                        .tableName("module-a_EntityA").columnToAddConstraintTo("id").build())).build(),
+                    Column.builder().name("sectorId").dataType("jsonb").build(),
+                    Column.builder().name("geo-location").dataType("geography").build(),
+                    Column.builder().name("CD_sourceIds").dataType("jsonb").defaultValue("[]").build(),
+                    Column.builder().name(String.format("CD_%s", CLASSIFIERS)).dataType("jsonb").defaultValue("[]").build(),
+                    Column.builder().name(String.format("CD_%s", DECORATORS)).dataType("jsonb").defaultValue("{}").build())).build(),
 
-        Table.builder().name("Namespace").columns(
-            List.of(
-                Column.builder().name("id").dataType("VARCHAR(511)").postgresConstraints(List.of(PrimaryKeyConstraint.builder().constraintName("PK_Namespace_id")
-                        .tableName("Namespace").columnToAddConstraintTo("id").build())).build(),
-                Column.builder().name("name").dataType("TEXT").build(),
-                Column.builder().name("CD_sourceIds").dataType("jsonb").defaultValue("[]").build(),
-                Column.builder().name("REL_FK_used-by-Namespace").dataType("VARCHAR(511)")
-                        .postgresConstraints(List.of(ForeignKeyConstraint.builder().constraintName("FK_Namespace_REL_FK_used-by-Namespace")
-                                .tableName("Namespace").referencedTable("Sector").columnToAddConstraintTo("REL_FK_used-by-Namespace").build())).build(),
-                Column.builder().name(String.format("CD_%s", CLASSIFIERS)).dataType("jsonb").defaultValue("[]").build(),
-                Column.builder().name(String.format("CD_%s", DECORATORS)).dataType("jsonb").defaultValue("{}").build(),
-                Column.builder().name("REL_ID_oneToMany").dataType("VARCHAR(511)")
-                        .postgresConstraints(List.of(UniqueConstraint.builder().constraintName("UNIQUE_Namespace_REL_ID_oneToMany").tableName("Namespace")
-                                .columnToAddConstraintTo("REL_ID_oneToMany").build())).build(),
-                Column.builder().name("REL_CD_sourceIds_oneToMany").dataType("jsonb").defaultValue("[]").build(),
-                Column.builder().name(String.format("REL_CD_%s_oneToMany", CLASSIFIERS)).dataType("jsonb").defaultValue("[]").build(),
-                Column.builder().name(String.format("REL_CD_%s_oneToMany", DECORATORS)).dataType("jsonb").defaultValue("{}").build())).build());
+            Table.builder().name("module-b_EntityB").columns(
+                List.of(
+                    Column.builder().name("id").dataType("TEXT").postgresConstraints(List.of(PrimaryKeyConstraint.builder().constraintName("PK_module-b_EntityB_id")
+                        .tableName("module-b_EntityB").columnToAddConstraintTo("id").build())).build(),
+                    Column.builder().name("name").dataType("TEXT").build(),
+                    Column.builder().name("CD_sourceIds").dataType("jsonb").defaultValue("[]").build(),
+                    Column.builder().name("REL_FK_used-by-EntityA").dataType("TEXT")
+                        .postgresConstraints(List.of(ForeignKeyConstraint.builder().constraintName("FK_module-b_EntityB_REL_FK_used-by-EntityA")
+                            .tableName("module-b_EntityB").referencedTable("module-a_EntityA").columnToAddConstraintTo("REL_FK_used-by-EntityA").build())).build(),
+                    Column.builder().name(String.format("CD_%s", CLASSIFIERS)).dataType("jsonb").defaultValue("[]").build(),
+                    Column.builder().name(String.format("CD_%s", DECORATORS)).dataType("jsonb").defaultValue("{}").build(),
+                    Column.builder().name("REL_ID_oneToMany").dataType("TEXT")
+                        .postgresConstraints(List.of(UniqueConstraint.builder().constraintName("UNIQUE_module-b_EntityB_REL_ID_oneToMany").tableName("module-b_EntityB")
+                            .columnToAddConstraintTo("REL_ID_oneToMany").build())).build(),
+                    Column.builder().name("REL_CD_sourceIds_oneToMany").dataType("jsonb").defaultValue("[]").build(),
+                    Column.builder().name(String.format("REL_CD_%s_oneToMany", CLASSIFIERS)).dataType("jsonb").defaultValue("[]").build(),
+                    Column.builder().name(String.format("REL_CD_%s_oneToMany", DECORATORS)).dataType("jsonb").defaultValue("{}").build())).build());
         //spotless:on
 
         // When
@@ -286,32 +323,33 @@
         //spotless:off
 
         // Given
-        List<Table> expectedResult = List.of(Table.builder().name("Sector").columns(
-            List.of(
-                Column.builder().name("azimuth").dataType("DECIMAL").build(),
-                Column.builder().name("id").dataType("VARCHAR(511)").postgresConstraints(List.of(PrimaryKeyConstraint.builder().constraintName("PK_Sector_id")
-                        .tableName("Sector").columnToAddConstraintTo("id").build())).build(),
-                Column.builder().name("sectorId").dataType("jsonb").build(),
-                Column.builder().name("geo-location").dataType("geography").build(),
-                Column.builder().name("CD_sourceIds").dataType("jsonb").defaultValue("[]").build(),
-                Column.builder().name(String.format("CD_%s", CLASSIFIERS)).dataType("jsonb").defaultValue("[]").build(),
-                Column.builder().name(String.format("CD_%s", DECORATORS)).dataType("jsonb").defaultValue("{}").build(),
-                Column.builder().name("REL_FK_used-Sector").dataType("VARCHAR(511)")
-                        .postgresConstraints(List.of(ForeignKeyConstraint.builder().constraintName("FK_Sector_REL_FK_used-Sector").tableName("Sector")
-                                .referencedTable("Namespace").columnToAddConstraintTo("REL_FK_used-sector").build())).build(),
-                Column.builder().name("REL_ID_manyToOne").dataType("VARCHAR(511)")
-                        .postgresConstraints(List.of(UniqueConstraint.builder().constraintName("UNIQUE_Sector_REL_ID_manyToOne").tableName("Sector")
-                                .columnToAddConstraintTo("REL_ID_oneToOne").build())).build(),
-                Column.builder().name("REL_CD_sourceIds_manyToOne").dataType("jsonb").defaultValue("[]").build(),
-                    Column.builder().name(String.format("REL_CD_%s_manyToOne", CLASSIFIERS)).dataType("jsonb").defaultValue("[]").build(),
-                    Column.builder().name(String.format("REL_CD_%s_manyToOne", DECORATORS)).dataType("jsonb").defaultValue("{}").build())).build(),
+        List<Table> expectedResult = List.of(Table.builder().name("module-a_EntityA").columns(
 
-        Table.builder().name("Namespace").columns(
-            List.of(
-                Column.builder().name("id").dataType("VARCHAR(511)").postgresConstraints(List.of(PrimaryKeyConstraint.builder().constraintName("PK_Namespace_id")
-                        .tableName("Namespace").columnToAddConstraintTo("id").build())).build(),
-                Column.builder().name("name").dataType("TEXT").build(),
-                Column.builder().name("CD_sourceIds").dataType("jsonb").defaultValue("[]").build(),
+                List.of(
+                    Column.builder().name("azimuth").dataType("DECIMAL").build(),
+                    Column.builder().name("id").dataType("TEXT").postgresConstraints(List.of(PrimaryKeyConstraint.builder().constraintName("PK_module-a_EntityA_id")
+                        .tableName("module-a_EntityA").columnToAddConstraintTo("id").build())).build(),
+                    Column.builder().name("sectorId").dataType("jsonb").build(),
+                    Column.builder().name("geo-location").dataType("geography").build(),
+                    Column.builder().name("CD_sourceIds").dataType("jsonb").defaultValue("[]").build(),
+                    Column.builder().name("REL_FK_used-EntityB").dataType("TEXT")
+                        .postgresConstraints(List.of(ForeignKeyConstraint.builder().constraintName("FK_MODULE-A_ENTITYA_REL_FK_USED-ENTITYB").tableName("module-a_EntityA")
+                            .referencedTable("module-b_EntityB").columnToAddConstraintTo("REL_FK_used-EntityB").build())).build(),
+                    Column.builder().name("REL_ID_ManyToOne").dataType("TEXT")
+                        .postgresConstraints(List.of(UniqueConstraint.builder().constraintName("UNIQUE_MODULE-A_ENTITYA_REL_ID_MANYTOONE").tableName("module-a_EntityA")
+                            .columnToAddConstraintTo("REL_ID_ManyToOne").build())).build(),
+                    Column.builder().name("REL_CD_sourceIds_ManyToOne").dataType("jsonb").defaultValue("[]").build(),
+                    Column.builder().name(String.format("CD_%s", CLASSIFIERS)).dataType(JSONB).defaultValue("[]").build(),
+                    Column.builder().name(String.format("CD_%s", DECORATORS)).dataType(JSONB).defaultValue("{}").build(),
+                    Column.builder().name(String.format("REL_CD_%s_ManyToOne", CLASSIFIERS)).dataType(JSONB).defaultValue("[]").build(),
+                    Column.builder().name(String.format("REL_CD_%s_ManyToOne", DECORATORS)).dataType(JSONB).defaultValue("{}").build())).build(),
+
+            Table.builder().name("module-b_EntityB").columns(
+                List.of(
+                    Column.builder().name("id").dataType("TEXT").postgresConstraints(List.of(PrimaryKeyConstraint.builder().constraintName("PK_module-b_EntityB_id")
+                        .tableName("module-b_EntityB").columnToAddConstraintTo("id").build())).build(),
+                    Column.builder().name("name").dataType("TEXT").build(),
+                    Column.builder().name("CD_sourceIds").dataType("jsonb").defaultValue("[]").build(),
                     Column.builder().name(String.format("CD_%s", CLASSIFIERS)).dataType("jsonb").defaultValue("[]").build(),
                     Column.builder().name(String.format("CD_%s", DECORATORS)).dataType("jsonb").defaultValue("{}").build())).build());
         //spotless:on
@@ -328,37 +366,37 @@
     void checkManyToManyRelationshipMappingTest() {
         //spotless:off
         // Given
-        List<Table> expectedResult = List.of(Table.builder().name("Sector").columns(
-            List.of(
-                Column.builder().name("azimuth").dataType("DECIMAL").build(),
-                Column.builder().name("id").dataType("VARCHAR(511)").postgresConstraints(List.of(PrimaryKeyConstraint.builder().constraintName("PK_Sector_id")
-                        .tableName("Sector").columnToAddConstraintTo("id").build())).build(),
-                Column.builder().name("sectorId").dataType("jsonb").build(),
-                Column.builder().name("geo-location").dataType("geography").build(),
-                Column.builder().name("CD_sourceIds").dataType("jsonb").defaultValue("[]").build(),
+        List<Table> expectedResult = List.of(Table.builder().name("module-a_EntityA").columns(
+                List.of(
+                    Column.builder().name("azimuth").dataType("DECIMAL").build(),
+                    Column.builder().name("id").dataType("TEXT").postgresConstraints(List.of(PrimaryKeyConstraint.builder().constraintName("PK_module-a_EntityA_id")
+                        .tableName("module-a_EntityA").columnToAddConstraintTo("id").build())).build(),
+                    Column.builder().name("sectorId").dataType("jsonb").build(),
+                    Column.builder().name("geo-location").dataType("geography").build(),
+                    Column.builder().name("CD_sourceIds").dataType("jsonb").defaultValue("[]").build(),
                     Column.builder().name(String.format("CD_%s", CLASSIFIERS)).dataType("jsonb").defaultValue("[]").build(),
                     Column.builder().name(String.format("CD_%s", DECORATORS)).dataType("jsonb").defaultValue("{}").build())).build(),
 
-        Table.builder().name("Namespace").columns(
-            List.of(
-                Column.builder().name("id").dataType("VARCHAR(511)").postgresConstraints(List.of(PrimaryKeyConstraint.builder().constraintName("PK_Namespace_id")
-                        .tableName("Namespace").columnToAddConstraintTo("id").build())).build(),
-                Column.builder().name("name").dataType("TEXT").build(),
-                Column.builder().name("CD_sourceIds").dataType("jsonb").defaultValue("[]").build(),
+            Table.builder().name("module-b_EntityB").columns(
+                List.of(
+                    Column.builder().name("id").dataType("TEXT").postgresConstraints(List.of(PrimaryKeyConstraint.builder().constraintName("PK_module-b_EntityB_id")
+                        .tableName("module-b_EntityB").columnToAddConstraintTo("id").build())).build(),
+                    Column.builder().name("name").dataType("TEXT").build(),
+                    Column.builder().name("CD_sourceIds").dataType("jsonb").defaultValue("[]").build(),
                     Column.builder().name(String.format("CD_%s", CLASSIFIERS)).dataType("jsonb").defaultValue("[]").build(),
                     Column.builder().name(String.format("CD_%s", DECORATORS)).dataType("jsonb").defaultValue("{}").build())).build(),
 
-        Table.builder().name("manyToMany").columns(
-            List.of(
-                Column.builder().name("id").dataType("VARCHAR(511)").postgresConstraints(List.of(PrimaryKeyConstraint.builder().constraintName("PK_manyToMany_id")
-                        .tableName("manyToMany").columnToAddConstraintTo("id").build())).build(),
-                Column.builder().name("aSide_Sector").dataType("VARCHAR(511)")
-                        .postgresConstraints(List.of(ForeignKeyConstraint.builder().constraintName("FK_manyToMany_aSide_Sector")
-                                .tableName("manyToMany").referencedTable("Sector").columnToAddConstraintTo("aSide_Sector").build())).build(),
-                Column.builder().name("bSide_Namespace").dataType("VARCHAR(511)")
-                        .postgresConstraints(List.of(ForeignKeyConstraint.builder().constraintName("FK_manyToMany_bSide_Namespace")
-                                .tableName("manyToMany").referencedTable("Namespace").columnToAddConstraintTo("bSide_Namespace").build())).build(),
-                Column.builder().name("CD_sourceIds").dataType("jsonb").defaultValue("[]").build(),
+            Table.builder().name("module-a-b_ManyToMany").columns(
+                List.of(
+                    Column.builder().name("id").dataType("TEXT").postgresConstraints(List.of(PrimaryKeyConstraint.builder().constraintName("PK_module-a-b_ManyToMany_id")
+                        .tableName("module-a-b_ManyToMany").columnToAddConstraintTo("id").build())).build(),
+                    Column.builder().name("aSide_EntityA").dataType("TEXT")
+                        .postgresConstraints(List.of(ForeignKeyConstraint.builder().constraintName("FK_module-a-b_ManyToMany_aSide_EntityA")
+                            .tableName("module-a-b_ManyToMany").referencedTable("module-a_EntityA").columnToAddConstraintTo("aSide_EntityA").build())).build(),
+                    Column.builder().name("bSide_EntityB").dataType("TEXT")
+                        .postgresConstraints(List.of(ForeignKeyConstraint.builder().constraintName("FK_module-a-b_manyToMany_bSide_EntityB")
+                            .tableName("module-a-b_ManyToMany").referencedTable("module-b_EntityB").columnToAddConstraintTo("bSide_EntityB").build())).build(),
+                    Column.builder().name("CD_sourceIds").dataType("jsonb").defaultValue("[]").build(),
                     Column.builder().name(String.format("CD_%s", CLASSIFIERS)).dataType("jsonb").defaultValue("[]").build(),
                     Column.builder().name(String.format("CD_%s", DECORATORS)).dataType("jsonb").defaultValue("{}").build())).build());
         //spotless:on
@@ -375,40 +413,42 @@
         //spotless:off
         List<Entity> sameEntities = List.of(
 
-            Entity.builder().entityName("Sector").attributes(
-                List.of(Attribute.builder().name("azimuth").dataType("DECIMAL").build(),
-                    Attribute.builder().name("id").dataType("VARCHAR(511)").constraints(List.of(PrimaryKeyConstraint.builder().constraintName("PK_Sector_id")
+            Entity.builder().entityName("EntityA").storedAt("module-a_EntityA").attributes(
+                    List.of(
+                        Attribute.builder().name("azimuth").dataType("DECIMAL").build(),
+                        Attribute.builder().name("id").dataType("TEXT").constraints(List.of(PrimaryKeyConstraint.builder().constraintName("PK_Sector_id")
                             .tableName("Sector").columnToAddConstraintTo("id").build())).build(),
-                    Attribute.builder().name("sectorId").dataType("jsonb").build(),
-                    Attribute.builder().name("geo-location").dataType("geography").build()))
-                .moduleReferenceName("").build());
+                        Attribute.builder().name("geo-location").dataType("geography").build(),
+                        Attribute.builder().name("sectorId").dataType("jsonb").build()))
+                .moduleReferenceName("")
+                .build());
 
         // Given
-        List<Table> expectedResult = List.of(Table.builder().name("Sector").columns(
-            List.of(
-                Column.builder().name("azimuth").dataType("DECIMAL").build(),
-                Column.builder().name("id").dataType("VARCHAR(511)").postgresConstraints(List.of(PrimaryKeyConstraint.builder().constraintName("PK_Sector_id")
-                        .tableName("Sector").columnToAddConstraintTo("id").build())).build(),
-                Column.builder().name("sectorId").dataType("jsonb").build(),
-                Column.builder().name("geo-location").dataType("geography").build(),
-                Column.builder().name("CD_sourceIds").dataType("jsonb").defaultValue("[]").build(),
-                Column.builder().name(String.format("CD_%s", CLASSIFIERS)).dataType("jsonb").defaultValue("[]").build(),
-                Column.builder().name(String.format("CD_%s", DECORATORS)).dataType("jsonb").defaultValue("{}").build())).build(),
+        List<Table> expectedResult = List.of(Table.builder().name("module-a_EntityA").columns(
+                List.of(
+                    Column.builder().name("azimuth").dataType("DECIMAL").build(),
+                    Column.builder().name("id").dataType("TEXT").postgresConstraints(List.of(PrimaryKeyConstraint.builder().constraintName("PK_module-a_EntityA_id")
+                        .tableName("module-a_EntityA").columnToAddConstraintTo("id").build())).build(),
+                    Column.builder().name("sectorId").dataType("jsonb").build(),
+                    Column.builder().name("geo-location").dataType("geography").build(),
+                    Column.builder().name("CD_sourceIds").dataType("jsonb").defaultValue("[]").build(),
+                    Column.builder().name(String.format("CD_%s", CLASSIFIERS)).dataType("jsonb").defaultValue("[]").build(),
+                    Column.builder().name(String.format("CD_%s", DECORATORS)).dataType("jsonb").defaultValue("{}").build())).build(),
 
-        Table.builder().name("relationshipConnectingSameEntity").columns(
-            List.of(
-                Column.builder().name("id").dataType("VARCHAR(511)").postgresConstraints(List.of(PrimaryKeyConstraint.builder()
-                        .constraintName("PK_relationshipConnectingSameEntity_id").tableName("relationshipConnectingSameEntity").columnToAddConstraintTo("id")
+            Table.builder().name("module-a_relationshipConnectingSameEntity").columns(
+                List.of(
+                    Column.builder().name("id").dataType("TEXT").postgresConstraints(List.of(PrimaryKeyConstraint.builder()
+                        .constraintName("PK_module-a_relationshipConnectingSameEntity_id").tableName("module-a_relationshipConnectingSameEntity").columnToAddConstraintTo("id")
                         .build())).build(),
-                Column.builder().name("aSide_Sector").dataType("VARCHAR(511)")
-                        .postgresConstraints(List.of(ForeignKeyConstraint.builder().constraintName("FK_relationshipConnectingSameEntity_aSide_Sector")
-                                .tableName("relationshipConnectingSameEntity").referencedTable("Sector").columnToAddConstraintTo("aSide_Sector").build())).build(),
-                Column.builder().name("bSide_Sector").dataType("VARCHAR(511)")
-                        .postgresConstraints(List.of(ForeignKeyConstraint.builder().constraintName("FK_relationshipConnectingSameEntity_bSide_Sector")
-                                .tableName("relationshipConnectingSameEntity").referencedTable("Sector").columnToAddConstraintTo("bSide_Sector").build())).build(),
-                Column.builder().name("CD_sourceIds").dataType("jsonb").defaultValue("[]").build(),
-                Column.builder().name(String.format("CD_%s", CLASSIFIERS)).dataType("jsonb").defaultValue("[]").build(),
-                Column.builder().name(String.format("CD_%s", DECORATORS)).dataType("jsonb").defaultValue("{}").build())).build());
+                    Column.builder().name("aSide_EntityA").dataType("TEXT")
+                        .postgresConstraints(List.of(ForeignKeyConstraint.builder().constraintName("FK_module-a_relationshipConnectingSameEntity_aSide_EntityA")
+                            .tableName("module-a_relationshipConnectingSameEntity").referencedTable("module-a_EntityA").columnToAddConstraintTo("aSide_EntityA").build())).build(),
+                    Column.builder().name("bSide_EntityA").dataType("TEXT")
+                        .postgresConstraints(List.of(ForeignKeyConstraint.builder().constraintName("FK_module-a_relationshipConnectingSameEntity_bSide_EntityA")
+                            .tableName("module-a_relationshipConnectingSameEntity").referencedTable("module-a_EntityA").columnToAddConstraintTo("bSide_EntityA").build())).build(),
+                    Column.builder().name("CD_sourceIds").dataType("jsonb").defaultValue("[]").build(),
+                    Column.builder().name(String.format("CD_%s", CLASSIFIERS)).dataType("jsonb").defaultValue("[]").build(),
+                    Column.builder().name(String.format("CD_%s", DECORATORS)).dataType("jsonb").defaultValue("{}").build())).build());
         //spotless:on
 
         // When
@@ -450,8 +490,8 @@
                     // Check if all columns for each table were added correctly
                     Assertions.assertEquals(columnsInExpected.size(), columnsInGenerated.size());
 
-                    List<String> allColumnNamesForATableInGeneratedResult = TestHelper.extractColumnNamesForATable(columnsInGenerated);
-                    List<String> allColumnNamesForATableInExpectedResult = TestHelper.extractColumnNamesForATable(columnsInExpected);
+                    List<String> allColumnNamesForATableInGeneratedResult = TestHelper.extractColumnNames(columnsInGenerated);
+                    List<String> allColumnNamesForATableInExpectedResult = TestHelper.extractColumnNames(columnsInExpected);
 
                     // Check if generatedResult contains all columns for a table
                     Assertions.assertEquals(allColumnNamesForATableInExpectedResult, allColumnNamesForATableInGeneratedResult);
@@ -461,7 +501,7 @@
                             .findFirst().ifPresent(columnInGenerated -> {
 
                                 if (columnInExpected.getName().equals("id")) {
-                                    Assertions.assertEquals("VARCHAR(511)", columnInGenerated.getDataType());
+                                    Assertions.assertEquals("TEXT", columnInGenerated.getDataType());
                                     Assertions.assertTrue(TestHelper.checkIfColumnIsPrimaryKey(columnInGenerated.getPostgresConstraints()));
                                 }
 
@@ -487,10 +527,10 @@
                                             .ifPresent(constraint1 -> {
 
                                                 // Check table name where constraint is to be added
-                                                Assertions.assertEquals(constraint.getTableToAddConstraintTo(), constraint.getTableToAddConstraintTo());
+                                                Assertions.assertEquals(constraint.getTableToAddConstraintTo(), constraint1.getTableToAddConstraintTo());
 
                                                 // Check column where constraint is to be added
-                                                Assertions.assertEquals(constraint.getColumnToAddConstraintTo(), constraint.getColumnToAddConstraintTo());
+                                                Assertions.assertEquals(constraint.getColumnToAddConstraintTo(), constraint1.getColumnToAddConstraintTo());
 
                                                 if (constraint instanceof ForeignKeyConstraint expectedFk) {
                                                     ForeignKeyConstraint actualFK = (ForeignKeyConstraint) constraint1;
@@ -506,16 +546,4 @@
         });
         //spotless:on
     }
-
-    Collection<Object> addEModelPrimaryKeyConstraint() {
-        Collection<Object> eModelPrimaryKeyConstraint = new ArrayList<>();
-        try {
-            Constructor<PrimaryKeyConstraint> constructor = PrimaryKeyConstraint.class.getDeclaredConstructor();
-            eModelPrimaryKeyConstraint.add(constructor.newInstance());
-        } catch (InstantiationException | IllegalAccessException | NoSuchMethodException | InvocationTargetException e) {
-            log.error("Failure in tests --> Error while adding primary key constraint: " + e.getMessage());
-        }
-        return eModelPrimaryKeyConstraint;
-    }
-
 }
diff --git a/pgsql-schema-generator/src/test/resources/SchemaParserTest/data/entities/mock_00_init-oran-smo-teiv-data.sql b/pgsql-schema-generator/src/test/resources/SchemaParserTest/data/entities/mock_00_init-oran-smo-teiv-data.sql
index 89da1ee..b952ba2 100644
--- a/pgsql-schema-generator/src/test/resources/SchemaParserTest/data/entities/mock_00_init-oran-smo-teiv-data.sql
+++ b/pgsql-schema-generator/src/test/resources/SchemaParserTest/data/entities/mock_00_init-oran-smo-teiv-data.sql
@@ -53,14 +53,14 @@
 INSERT INTO ties_model.entity_info("schema", "status") VALUES ('ties_data', 'success');
 
 CREATE TABLE IF NOT EXISTS ties_data."Sector" (
-	"id"			 VARCHAR(511),
+	"id"			 TEXT,
 	"azimuth"			DECIMAL,
 	"sectorId"			 jsonb,
 	"geo-location"			"geography"
 );
 
 CREATE TABLE IF NOT EXISTS ties_data."Namespace" (
-	"id"			 VARCHAR(511),
+	"id"			 TEXT,
 	"name"			TEXT
 );
 
diff --git a/pgsql-schema-generator/src/test/resources/SchemaParserTest/data/relationships/manyToMany/mock_00_init-oran-smo-teiv-data.sql b/pgsql-schema-generator/src/test/resources/SchemaParserTest/data/relationships/manyToMany/mock_00_init-oran-smo-teiv-data.sql
index 91e2606..4150f94 100644
--- a/pgsql-schema-generator/src/test/resources/SchemaParserTest/data/relationships/manyToMany/mock_00_init-oran-smo-teiv-data.sql
+++ b/pgsql-schema-generator/src/test/resources/SchemaParserTest/data/relationships/manyToMany/mock_00_init-oran-smo-teiv-data.sql
@@ -53,21 +53,21 @@
 INSERT INTO ties_model.entity_info("schema", "status") VALUES ('ties_data', 'success');
 
 CREATE TABLE IF NOT EXISTS ties_data."Sector" (
-	"id"			 VARCHAR(511),
+	"id"			 TEXT,
 	"azimuth"			DECIMAL,
 	"sectorId"			 jsonb,
 	"geo-location"			"geography"
 );
 
 CREATE TABLE IF NOT EXISTS ties_data."Namespace" (
-	"id"			 VARCHAR(511),
+	"id"			 TEXT,
 	"name"			TEXT
 );
 
 CREATE TABLE IF NOT EXISTS ties_data."REL_serviced-sector_serving-namespace" (
-	"id"			VARCHAR(511),
-	"aSide_Sector"			VARCHAR(511),
-	"bSide_Namespace"			VARCHAR(511)
+	"id"			TEXT,
+	"aSide_Sector"			TEXT,
+	"bSide_Namespace"			TEXT
 );
 
 SELECT ties_data.create_constraint_if_not_exists(
diff --git a/pgsql-schema-generator/src/test/resources/SchemaParserTest/data/relationships/manyToOne/mock_00_init-oran-smo-teiv-data.sql b/pgsql-schema-generator/src/test/resources/SchemaParserTest/data/relationships/manyToOne/mock_00_init-oran-smo-teiv-data.sql
index 6cae7ca..4be3ac9 100644
--- a/pgsql-schema-generator/src/test/resources/SchemaParserTest/data/relationships/manyToOne/mock_00_init-oran-smo-teiv-data.sql
+++ b/pgsql-schema-generator/src/test/resources/SchemaParserTest/data/relationships/manyToOne/mock_00_init-oran-smo-teiv-data.sql
@@ -53,16 +53,16 @@
 INSERT INTO ties_model.entity_info("schema", "status") VALUES ('ties_data', 'success');
 
 CREATE TABLE IF NOT EXISTS ties_data."Sector" (
-	"id"			 VARCHAR(511),
+	"id"			 TEXT,
 	"azimuth"			DECIMAL,
 	"sectorId"			 jsonb,
 	"geo-location"			"geography",
-	"REL_FK_serviced-sector"			VARCHAR(511),
-    "REL_ID_serviced-sector_serving-namespace"			VARCHAR(511)
+	"REL_FK_serviced-sector"			TEXT,
+    "REL_ID_serviced-sector_serving-namespace"			TEXT
 );
 
 CREATE TABLE IF NOT EXISTS ties_data."Namespace" (
-	"id"			 VARCHAR(511),
+	"id"			 TEXT,
 	"name"			TEXT
 );
 
diff --git a/pgsql-schema-generator/src/test/resources/SchemaParserTest/data/relationships/oneToMany/mock_00_init-oran-smo-teiv-data.sql b/pgsql-schema-generator/src/test/resources/SchemaParserTest/data/relationships/oneToMany/mock_00_init-oran-smo-teiv-data.sql
index 34c5019..cf40e8c 100644
--- a/pgsql-schema-generator/src/test/resources/SchemaParserTest/data/relationships/oneToMany/mock_00_init-oran-smo-teiv-data.sql
+++ b/pgsql-schema-generator/src/test/resources/SchemaParserTest/data/relationships/oneToMany/mock_00_init-oran-smo-teiv-data.sql
@@ -53,17 +53,17 @@
 INSERT INTO ties_model.entity_info("schema", "status") VALUES ('ties_data', 'success');
 
 CREATE TABLE IF NOT EXISTS ties_data."Sector" (
-	"id"			 VARCHAR(511),
+	"id"			 TEXT,
 	"azimuth"			DECIMAL,
 	"sectorId"			 jsonb,
 	"geo-location"			"geography"
 );
 
 CREATE TABLE IF NOT EXISTS ties_data."Namespace" (
-	"id"			 VARCHAR(511),
+	"id"			 TEXT,
 	"name"			TEXT,
-	"REL_FK_serving-namespace"			VARCHAR(511),
-	"REL_ID_serviced-sector_serving-namespace"			VARCHAR(511)
+	"REL_FK_serving-namespace"			TEXT,
+	"REL_ID_serviced-sector_serving-namespace"			TEXT
 );
 
 SELECT ties_data.create_constraint_if_not_exists(
diff --git a/pgsql-schema-generator/src/test/resources/SchemaParserTest/data/relationships/oneToOne/mock_00_init-oran-smo-teiv-data.sql b/pgsql-schema-generator/src/test/resources/SchemaParserTest/data/relationships/oneToOne/mock_00_init-oran-smo-teiv-data.sql
index c7057bc..6f1aea5 100644
--- a/pgsql-schema-generator/src/test/resources/SchemaParserTest/data/relationships/oneToOne/mock_00_init-oran-smo-teiv-data.sql
+++ b/pgsql-schema-generator/src/test/resources/SchemaParserTest/data/relationships/oneToOne/mock_00_init-oran-smo-teiv-data.sql
@@ -53,18 +53,18 @@
 INSERT INTO ties_model.entity_info("schema", "status") VALUES ('ties_data', 'success');
 
 CREATE TABLE IF NOT EXISTS ties_data."Sector" (
-	"id"			 VARCHAR(511),
+	"id"			 TEXT,
 	"azimuth"			DECIMAL,
 	"sectorId"			 jsonb,
 	"geo-location"			"geography",
-	"REL_FK_serviced-sector"			VARCHAR(511),
-    "REL_ID_serviced-sector_serving-namespace"			VARCHAR(511)
+	"REL_FK_serviced-sector"			TEXT,
+    "REL_ID_serviced-sector_serving-namespace"			TEXT
 );
 
 CREATE TABLE IF NOT EXISTS ties_data."Namespace" (
-	"id"			 VARCHAR(511),
+	"id"			 TEXT,
 	"name"			TEXT,
-	"REL_FK_serving-namespace"			VARCHAR(511)
+	"REL_FK_serving-namespace"			TEXT
 );
 
 SELECT ties_data.create_constraint_if_not_exists(
diff --git a/pgsql-schema-generator/src/test/resources/SchemaParserTest/data/relationships/sameEntities/mock_00_init-oran-smo-teiv-data.sql b/pgsql-schema-generator/src/test/resources/SchemaParserTest/data/relationships/sameEntities/mock_00_init-oran-smo-teiv-data.sql
index 1bd776d..90c8237 100644
--- a/pgsql-schema-generator/src/test/resources/SchemaParserTest/data/relationships/sameEntities/mock_00_init-oran-smo-teiv-data.sql
+++ b/pgsql-schema-generator/src/test/resources/SchemaParserTest/data/relationships/sameEntities/mock_00_init-oran-smo-teiv-data.sql
@@ -53,16 +53,16 @@
 INSERT INTO ties_model.entity_info("schema", "status") VALUES ('ties_data', 'success');
 
 CREATE TABLE IF NOT EXISTS ties_data."Sector" (
-	"id"			 VARCHAR(511),
+	"id"			 TEXT,
 	"azimuth"			DECIMAL,
 	"sectorId"			 jsonb,
 	"geo-location"			"geography"
 );
 
 CREATE TABLE IF NOT EXISTS ties_data."REL_serviced-sector_serving-sector" (
-	"id"			VARCHAR(511),
-	"aSide_Sector"			VARCHAR(511),
-	"bSide_Sector"			VARCHAR(511)
+	"id"			TEXT,
+	"aSide_Sector"			TEXT,
+	"bSide_Sector"			TEXT
 );
 
 SELECT ties_data.create_constraint_if_not_exists(
diff --git a/pgsql-schema-generator/src/test/resources/SchemaParserTest/model/mock_01_init-oran-smo-teiv-model.sql b/pgsql-schema-generator/src/test/resources/SchemaParserTest/model/mock_01_init-oran-smo-teiv-model.sql
index 6c71cc4..1f554a0 100644
--- a/pgsql-schema-generator/src/test/resources/SchemaParserTest/model/mock_01_init-oran-smo-teiv-model.sql
+++ b/pgsql-schema-generator/src/test/resources/SchemaParserTest/model/mock_01_init-oran-smo-teiv-model.sql
@@ -46,44 +46,34 @@
     "domain"             VARCHAR(511),
     "includedModules"        jsonb,
     "revision"       VARCHAR(511),
-    "content"               TEXT,
-    "ownerAppId"       VARCHAR(511),
-    "status"       VARCHAR(127)
+    "content"               TEXT
 );
 
 CREATE TABLE IF NOT EXISTS ties_model.entity_info (
-    "name"                   VARCHAR(511) PRIMARY KEY,
-    "moduleReferenceName"    VARCHAR(511),
+    "storedAt"            VARCHAR(511) PRIMARY KEY,
+    "name"                VARCHAR(511) NOT NULL,
+    "moduleReferenceName" VARCHAR(511) NOT NULL,
     FOREIGN KEY ("moduleReferenceName") REFERENCES ties_model.module_reference ("name") ON DELETE CASCADE
 );
 
 CREATE TABLE IF NOT EXISTS ties_model.relationship_info (
-    "name"      VARCHAR(511) PRIMARY KEY,
-    "aSideAssociationName"    TEXT,
-    "aSideMOType"             TEXT,
-    "aSideMinCardinality"     BIGINT,
-    "aSideMaxCardinality"     BIGINT,
-    "bSideAssociationName"    TEXT,
-    "bSideMOType"             TEXT,
-    "bSideMinCardinality"     BIGINT,
-    "bSideMaxCardinality"     BIGINT,
-    "associationKind"    TEXT,
-    "relationshipDataLocation"          TEXT,
-    "connectSameEntity"       BOOLEAN,
-    "moduleReferenceName"     TEXT,
-    FOREIGN KEY ("moduleReferenceName") REFERENCES ties_model.module_reference ("name") ON DELETE CASCADE
-);
-
-CREATE TABLE IF NOT EXISTS ties_model.decorators (
-    "name"                   VARCHAR(511) PRIMARY KEY,
-    "dataType"                   VARCHAR(511),
-    "moduleReferenceName"    VARCHAR(511),
-    FOREIGN KEY ("moduleReferenceName") REFERENCES ties_model.module_reference ("name") ON DELETE CASCADE
-);
-
-CREATE TABLE IF NOT EXISTS ties_model.classifiers (
-    "name"                   VARCHAR(511) PRIMARY KEY,
-    "moduleReferenceName"    VARCHAR(511),
+    "name"                     VARCHAR(511) NOT NULL,
+    "aSideAssociationName"     TEXT NOT NULL,
+    "aSideMOType"              TEXT NOT NULL,
+    "aSideModule"              TEXT NOT NULL,
+    "aSideMinCardinality"      BIGINT NOT NULL,
+    "aSideMaxCardinality"      BIGINT NOT NULL,
+    "bSideAssociationName"     TEXT NOT NULL,
+    "bSideMOType"              TEXT NOT NULL,
+    "bSideModule"              TEXT NOT NULL,
+    "bSideMinCardinality"      BIGINT NOT NULL,
+    "bSideMaxCardinality"      BIGINT NOT NULL,
+    "associationKind"          TEXT NOT NULL,
+    "relationshipDataLocation" TEXT NOT NULL,
+    "connectSameEntity"        BOOLEAN NOT NULL,
+    "storedAt"                 VARCHAR(511) NOT NULL,
+    "moduleReferenceName"      TEXT NOT NULL,
+    PRIMARY KEY ("name", "moduleReferenceName"),
     FOREIGN KEY ("moduleReferenceName") REFERENCES ties_model.module_reference ("name") ON DELETE CASCADE
 );
 
@@ -93,15 +83,15 @@
 COPY ties_model.hash_info("name", "hashedValue", "type") FROM stdin;
 \.
 
-COPY ties_model.module_reference("name", "namespace", "domain", "includedModules", "revision", "content", "ownerAppId", "status") FROM stdin;
+COPY ties_model.module_reference("name", "namespace", "domain", "includedModules", "revision", "content") FROM stdin;
 \.
 
-COPY ties_model.entity_info("name", "moduleReferenceName") FROM stdin;
+COPY ties_model.entity_info("storedAt", "name", "moduleReferenceName") FROM stdin;
 \.
 
-COPY ties_model.relationship_info("name", "aSideAssociationName", "aSideMOType", "aSideMinCardinality", "aSideMaxCardinality", "bSideAssociationName", "bSideMOType", "bSideMinCardinality", "bSideMaxCardinality", "associationKind", "relationshipDataLocation", "connectSameEntity", "moduleReferenceName") FROM stdin;
-ENODEBFUNCTION_PROVIDES_LTESECTORCARRIER	provided-lteSectorCarrier	ENodeBFunction	1	1	provided-by-enodebFunction	LTESectorCarrier	0	100	BI_DIRECTIONAL	B_SIDE	false	o-ran-smo-teiv-ran
-LTESECTORCARRIER_USES_ANTENNACAPABILITY	used-antennaCapability	LTESectorCarrier	0	1	used-by-lteSectorCarrier	AntennaCapability	0	1	BI_DIRECTIONAL	A_SIDE	false	o-ran-smo-teiv-ran
+COPY ties_model.relationship_info("name", "aSideAssociationName", "aSideMOType", "aSideModule", "aSideMinCardinality", "aSideMaxCardinality", "bSideAssociationName", "bSideMOType", "bSideModule", "bSideMinCardinality", "bSideMaxCardinality", "associationKind", "connectSameEntity", "relationshipDataLocation", "storedAt", "moduleReferenceName") FROM stdin;
+ENODEBFUNCTION_PROVIDES_LTESECTORCARRIER	provided-lteSectorCarrier	ENodeBFunction	o-ran-smo-teiv-ran	1	1	provided-by-enodebFunction	LTESectorCarrier	o-ran-smo-teiv-ran	0	100	BI_DIRECTIONAL	false	B_SIDE	o-ran-smo-teiv-ran:LTESectorCarrier	o-ran-smo-teiv-ran
+LTESECTORCARRIER_USES_ANTENNACAPABILITY	used-antennaCapability	LTESectorCarrier	o-ran-smo-teiv-ran	0	9223372036854775807	used-by-lteSectorCarrier	AntennaCapability	o-ran-smo-teiv-ran	0	1	BI_DIRECTIONAL	false	A_SIDE	o-ran-smo-teiv-ran:LTESectorCarrier	o-ran-smo-teiv-ran
 \.
 
 ;
diff --git a/pgsql-schema-generator/src/test/resources/application.yaml b/pgsql-schema-generator/src/test/resources/application.yaml
index 82829f7..8ef6bda 100644
--- a/pgsql-schema-generator/src/test/resources/application.yaml
+++ b/pgsql-schema-generator/src/test/resources/application.yaml
@@ -32,9 +32,14 @@
     baseline: src/test/resources/baseline-schema/01_init-oran-smo-teiv-model.sql
     temp-baseline: target/test-classes/01_init-oran-smo-teiv-model_baseline.sql
     output: target/test-classes/TEST_01_init-oran-smo-teiv-model.sql
+  consumer-data:
+    skeleton: scripts/02_init-oran-smo-teiv-consumer-data.sql
+    baseline: src/test/resources/baseline-schema/02_init-oran-smo-teiv-consumer-data.sql
+    output: target/test-classes/TEST_02_init-oran-smo-teiv-consumer-data.sql
 test-result:
     data: src/test/resources/expected-db-schema/result_00_init-oran-smo-teiv-data.sql
     model: src/test/resources/expected-db-schema/result_01_init-oran-smo-teiv-model.sql
+    consumer-data: src/test/resources/expected-db-schema/result_02_init-oran-smo-teiv-consumer-data.sql
 exclusions:
   model-names: metadata, decorators
 graphs:
diff --git a/pgsql-schema-generator/src/test/resources/baseline-schema/00_init-oran-smo-teiv-data.sql b/pgsql-schema-generator/src/test/resources/baseline-schema/00_init-oran-smo-teiv-data.sql
index b356a1f..109f6e7 100644
--- a/pgsql-schema-generator/src/test/resources/baseline-schema/00_init-oran-smo-teiv-data.sql
+++ b/pgsql-schema-generator/src/test/resources/baseline-schema/00_init-oran-smo-teiv-data.sql
@@ -23,6 +23,7 @@
 
 CREATE EXTENSION IF NOT EXISTS postgis;
 CREATE EXTENSION IF NOT EXISTS postgis_topology;
+CREATE EXTENSION IF NOT EXISTS pg_trgm;
 
 GRANT USAGE ON SCHEMA topology to :pguser;
 GRANT SELECT ON ALL SEQUENCES IN SCHEMA topology TO :pguser;
@@ -51,90 +52,121 @@
 -- Update data schema exec status
 INSERT INTO ties_model.execution_status("schema", "status") VALUES ('ties_data', 'success');
 
---missing CD_sourceIds column and its default value
-CREATE TABLE IF NOT EXISTS ties_data."AntennaModule" (
-	"id"			VARCHAR(511),
+--missing consumer data columns, their default values and index
+--missing index for antennaBeamWidth
+CREATE TABLE IF NOT EXISTS ties_data."o-ran-smo-teiv-equipment_AntennaModule" (
+	"id"			TEXT,
 	"positionWithinSector"			TEXT,
-	"electricalAntennaTilt"			BIGINT,
-	"mechanicalAntennaBearing"			BIGINT,
+	"electricalAntennaTilt"			INTEGER,
+	"mechanicalAntennaBearing"			INTEGER,
 	"antennaBeamWidth"			jsonb,
-	"mechanicalAntennaTilt"			BIGINT,
+	"mechanicalAntennaTilt"			INTEGER,
 	"antennaModelNumber"			TEXT,
-	"totalTilt"			BIGINT,
+	"totalTilt"			INTEGER,
 	"geo-location"	geography
 );
 
 SELECT ties_data.create_constraint_if_not_exists(
-	'AntennaModule',
- 'PK_AntennaModule_id',
- 'ALTER TABLE ties_data."AntennaModule" ADD CONSTRAINT "PK_AntennaModule_id" PRIMARY KEY ("id");'
+	'o-ran-smo-teiv-equipment_AntennaModule',
+ 'PK_o-ran-smo-teiv-equipment_AntennaModule_id',
+ 'ALTER TABLE ties_data."o-ran-smo-teiv-equipment_AntennaModule" ADD CONSTRAINT "PK_o-ran-smo-teiv-equipment_AntennaModule_id" PRIMARY KEY ("id");'
 );
 
---missing eNodeBPlmnId column
-CREATE TABLE IF NOT EXISTS ties_data."ENodeBFunction" (
-	"id"			VARCHAR(511),
-	"eNBId"			BIGINT,
+--missing eNodeBPlmnId, classifiers and decorator columns
+--missing default value for sourceIds column
+CREATE TABLE IF NOT EXISTS ties_data."o-ran-smo-teiv-ran_ENodeBFunction" (
+	"id"			TEXT,
+	"eNBId"			INTEGER,
 	"CD_sourceIds"			jsonb
 );
 
-ALTER TABLE ONLY ties_data."ENodeBFunction" ALTER COLUMN "eNBId" SET DEFAULT '11';
-
-ALTER TABLE ONLY ties_data."ENodeBFunction" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
+ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_ENodeBFunction" ALTER COLUMN "eNBId" SET DEFAULT '11';
 
 SELECT ties_data.create_constraint_if_not_exists(
-	'ENodeBFunction',
- 'PK_ENodeBFunction_id',
- 'ALTER TABLE ties_data."ENodeBFunction" ADD CONSTRAINT "PK_ENodeBFunction_id" PRIMARY KEY ("id");'
+	'o-ran-smo-teiv-ran_ENodeBFunction',
+ 'PK_o-ran-smo-teiv-ran_ENodeBFunction_id',
+ 'ALTER TABLE ties_data."o-ran-smo-teiv-ran_ENodeBFunction" ADD CONSTRAINT "PK_o-ran-smo-teiv-ran_ENodeBFunction_id" PRIMARY KEY ("id");'
 );
 
---missing "ANTENNACAPABILITY_USED_BY_LTESECTORCARRIER" relationship
-CREATE TABLE IF NOT EXISTS ties_data."AntennaCapability" (
-	"id"			VARCHAR(511),
+CREATE INDEX IF NOT EXISTS "IDX_3F7D14B4CF2CA74F28BA1600606E82C6E8C447C0" ON ties_data."o-ran-smo-teiv-ran_ENodeBFunction" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
+
+--missing index on JSONB columns
+CREATE TABLE IF NOT EXISTS ties_data."o-ran-smo-teiv-ran_AntennaCapability" (
+	"id"			TEXT,
 	"geranFqBands"			jsonb,
 	"nRFqBands"			jsonb,
 	"eUtranFqBands"			jsonb,
-	"CD_sourceIds"			jsonb
+	"CD_sourceIds"			jsonb,
+	"CD_decorators"			jsonb
+	"CD_classifiers"			jsonb
 );
 
-ALTER TABLE ONLY ties_data."AntennaCapability" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
+ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_AntennaCapability" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
+
+ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_AntennaCapability" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
+
+ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_AntennaCapability" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
 
 SELECT ties_data.create_constraint_if_not_exists(
-	'AntennaCapability',
- 'PK_AntennaCapability_id',
- 'ALTER TABLE ties_data."AntennaCapability" ADD CONSTRAINT "PK_AntennaCapability_id" PRIMARY KEY ("id");'
+	'o-ran-smo-teiv-ran_AntennaCapability',
+ 'PK_o-ran-smo-teiv-ran_AntennaCapability_id',
+ 'ALTER TABLE ties_data."AntennaCapability" ADD CONSTRAINT "PK_o-ran-smo-teiv-ran_AntennaCapability_id" PRIMARY KEY ("id");'
 );
 
-CREATE TABLE IF NOT EXISTS ties_data."LTESectorCarrier" (
-	"id"			VARCHAR(511),
+--missing "ANTENNACAPABILITY_USED_BY_LTESECTORCARRIER" relationship
+CREATE TABLE IF NOT EXISTS ties_data."o-ran-smo-teiv-ran_LTESectorCarrier" (
+	"id"			TEXT,
 	"sectorCarrierType"			TEXT,
 	"CD_sourceIds"			jsonb,
-	"REL_FK_provided-by-enodebFunction"			VARCHAR(511),
-	"REL_ID_ENODEBFUNCTION_PROVIDES_LTESECTORCARRIER"			VARCHAR(511),
-	"REL_CD_sourceIds_ENODEBFUNCTION_PROVIDES_LTESECTORCARRIER"			jsonb
+	"CD_classifiers"    jsonb,
+	"CD_decorators"     jsonb,
+	"REL_FK_provided-by-enodebFunction"			TEXT,
+	"REL_ID_ENODEBFUNCTION_PROVIDES_LTESECTORCARRIER"			TEXT,
+	"REL_CD_sourceIds_ENODEBFUNCTION_PROVIDES_LTESECTORCARRIER"			jsonb,
+	"REL_CD_classifiers_ENODEBFUNCTION_PROVIDES_LTESECTORCARRIER"			jsonb,
+	"REL_CD_decorators_ENODEBFUNCTION_PROVIDES_LTESECTORCARRIER"			jsonb,
 );
 
-ALTER TABLE ONLY ties_data."LTESectorCarrier" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
+ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_LTESectorCarrier" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
 
-ALTER TABLE ONLY ties_data."LTESectorCarrier" ALTER COLUMN "REL_CD_sourceIds_ENODEBFUNCTION_PROVIDES_LTESECTORCARRIER" SET DEFAULT '[]';
+ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_LTESectorCarrier" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
+
+ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_LTESectorCarrier" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
+
+ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_LTESectorCarrier" ALTER COLUMN "REL_CD_sourceIds_ENODEBFUNCTION_PROVIDES_LTESECTORCARRIER" SET DEFAULT '[]';
+
+ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_LTESectorCarrier" ALTER COLUMN "REL_CD_classifiers_ENODEBFUNCTION_PROVIDES_LTESECTORCARRIER" SET DEFAULT '[]';
+
+ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_LTESectorCarrier" ALTER COLUMN "REL_CD_decorators_ENODEBFUNCTION_PROVIDES_LTESECTORCARRIER" SET DEFAULT '{}';
 
 SELECT ties_data.create_constraint_if_not_exists(
-	'LTESectorCarrier',
- 'PK_LTESectorCarrier_id',
- 'ALTER TABLE ties_data."LTESectorCarrier" ADD CONSTRAINT "PK_LTESectorCarrier_id" PRIMARY KEY ("id");'
+	'o-ran-smo-teiv-ran_LTESectorCarrier',
+ 'PK_o-ran-smo-teiv-ran_LTESectorCarrier_id',
+ 'ALTER TABLE ties_data."o-ran-smo-teiv-ran_LTESectorCarrier" ADD CONSTRAINT "PK_o-ran-smo-teiv-ran_LTESectorCarrier_id" PRIMARY KEY ("id");'
 );
 
 SELECT ties_data.create_constraint_if_not_exists(
-	'LTESectorCarrier',
- 'UNIQUE_B9770D6C26DDA0173DB9690F6E3B42C111AF26E9',
- 'ALTER TABLE ties_data."LTESectorCarrier" ADD CONSTRAINT "UNIQUE_B9770D6C26DDA0173DB9690F6E3B42C111AF26E9" UNIQUE ("REL_ID_ENODEBFUNCTION_PROVIDES_LTESECTORCARRIER");'
+	'o-ran-smo-teiv-ran_LTESectorCarrier',
+ 'FK_D0868FBC0BBE2754F4B765C4898C1A1700E2BEFD',
+ 'ALTER TABLE ties_data."o-ran-smo-teiv-ran_LTESectorCarrier" ADD CONSTRAINT "FK_D0868FBC0BBE2754F4B765C4898C1A1700E2BEFD" FOREIGN KEY ("REL_FK_provided-by-enodebFunction") REFERENCES ties_data."o-ran-smo-teiv-ran_ENodeBFunction" (id) ON DELETE CASCADE;'
 );
 
 SELECT ties_data.create_constraint_if_not_exists(
-	'LTESectorCarrier',
- 'FK_LTESectorCarrier_REL_FK_provided-by-enodebFunction',
- 'ALTER TABLE ties_data."LTESectorCarrier" ADD CONSTRAINT "FK_LTESectorCarrier_REL_FK_provided-by-enodebFunction" FOREIGN KEY ("REL_FK_provided-by-enodebFunction") REFERENCES ties_data."ENodeBFunction" (id) ON DELETE CASCADE;'
+	'o-ran-smo-teiv-ran_LTESectorCarrier',
+ 'UNIQUE_FD943EE596337B11E0C640E1176CADF9CD69E19A',
+ 'ALTER TABLE ties_data."o-ran-smo-teiv-ran_LTESectorCarrier" ADD CONSTRAINT "UNIQUE_FD943EE596337B11E0C640E1176CADF9CD69E19A" UNIQUE ("REL_ID_ENODEBFUNCTION_PROVIDES_LTESECTORCARRIER");'
 );
 
+CREATE INDEX IF NOT EXISTS "IDX_6EC539C61EA7078DBA264C9877B87FC263605D42" ON ties_data."o-ran-smo-teiv-ran_LTESectorCarrier" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
+
+CREATE INDEX IF NOT EXISTS "IDX_E754EB8AD825DB3111B07B9E5DA3B30C38DB406B" ON ties_data."o-ran-smo-teiv-ran_LTESectorCarrier" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
+
+CREATE INDEX IF NOT EXISTS "IDX_GIN_o-ran-smo-teiv-ran_LTESectorCarrier_CD_decorators" ON ties_data."o-ran-smo-teiv-ran_LTESectorCarrier" USING GIN ("CD_decorators");
+
+CREATE INDEX IF NOT EXISTS "IDX_1EBC7271CEA658156DE25286404CBC4593340F8E" ON ties_data."o-ran-smo-teiv-ran_LTESectorCarrier" USING GIN (("REL_CD_sourceIds_ENODEBFUNCTION_PROVIDES_LTESECTORCARRIER"::TEXT) gin_trgm_ops);
+
+CREATE INDEX IF NOT EXISTS "IDX_846B7740E8AA756B8C1409CD909D2DF73A47ED4C" ON ties_data."o-ran-smo-teiv-ran_LTESectorCarrier" USING GIN (("REL_CD_classifiers_ENODEBFUNCTION_PROVIDES_LTESECTORCARRIER"::TEXT) gin_trgm_ops);
+
+CREATE INDEX IF NOT EXISTS "IDX_44075E1D464599B61924196C20F2B88332520CD8" ON ties_data."o-ran-smo-teiv-ran_LTESectorCarrier" USING GIN ("REL_CD_decorators_ENODEBFUNCTION_PROVIDES_LTESECTORCARRIER");
+
 COMMIT;
-
-
diff --git a/pgsql-schema-generator/src/test/resources/baseline-schema/01_init-oran-smo-teiv-model.sql b/pgsql-schema-generator/src/test/resources/baseline-schema/01_init-oran-smo-teiv-model.sql
index 089b788..fc61d6f 100644
--- a/pgsql-schema-generator/src/test/resources/baseline-schema/01_init-oran-smo-teiv-model.sql
+++ b/pgsql-schema-generator/src/test/resources/baseline-schema/01_init-oran-smo-teiv-model.sql
@@ -19,7 +19,6 @@
 -- ============LICENSE_END=========================================================
 --
 
-
 BEGIN;
 
 DROP SCHEMA IF EXISTS ties_model cascade;
@@ -31,60 +30,52 @@
 SET ROLE :'pguser';
 
 CREATE TABLE IF NOT EXISTS ties_model.execution_status (
-    "schema"                 VARCHAR(127) PRIMARY KEY,
-    "status"          VARCHAR(127)
+    "schema" VARCHAR(127) PRIMARY KEY,
+    "status" VARCHAR(127)
 );
 
 CREATE TABLE IF NOT EXISTS ties_model.hash_info (
-    "name"                 VARCHAR(511) PRIMARY KEY,
-    "hashedValue"          VARCHAR(511),
-    "type"                 VARCHAR(511)
+    "name"        TEXT PRIMARY KEY,
+    "hashedValue" VARCHAR(63) NOT NULL,
+    "type"        VARCHAR(511)
 );
 
 CREATE TABLE IF NOT EXISTS ties_model.module_reference (
-    "name"                   VARCHAR(511) PRIMARY KEY,
-    "namespace"              VARCHAR(511),
-    "domain"             VARCHAR(511),
-    "includedModules"        jsonb,
-    "revision"       VARCHAR(511),
-    "content"               TEXT,
-    "ownerAppId"       VARCHAR(511),
-    "status"       VARCHAR(127)
+    "name"            TEXT PRIMARY KEY,
+    "namespace"       TEXT,
+    "domain"          TEXT,
+    "includedModules" jsonb DEFAULT '[]'::jsonb,
+    "revision"        TEXT NOT NULL,
+    "content"         TEXT NOT NULL
 );
 
 CREATE TABLE IF NOT EXISTS ties_model.entity_info (
-    "name"                   VARCHAR(511) PRIMARY KEY,
-    "moduleReferenceName"    VARCHAR(511),
+    "storedAt"            TEXT PRIMARY KEY,
+    "name"                TEXT NOT NULL,
+    "moduleReferenceName" TEXT NOT NULL,
     FOREIGN KEY ("moduleReferenceName") REFERENCES ties_model.module_reference ("name") ON DELETE CASCADE
 );
 
 CREATE TABLE IF NOT EXISTS ties_model.relationship_info (
-    "name"      VARCHAR(511) PRIMARY KEY,
-    "aSideAssociationName"    TEXT,
-    "aSideMOType"             TEXT,
-    "aSideMinCardinality"     BIGINT,
-    "aSideMaxCardinality"     BIGINT,
-    "bSideAssociationName"    TEXT,
-    "bSideMOType"             TEXT,
-    "bSideMinCardinality"     BIGINT,
-    "bSideMaxCardinality"     BIGINT,
-    "associationKind"    TEXT,
-    "relationshipDataLocation"          TEXT,
-    "connectSameEntity"       BOOLEAN,
-    "moduleReferenceName"     TEXT,
-    FOREIGN KEY ("moduleReferenceName") REFERENCES ties_model.module_reference ("name") ON DELETE CASCADE
-);
-
-CREATE TABLE IF NOT EXISTS ties_model.decorators (
-    "name"                   VARCHAR(511) PRIMARY KEY,
-    "dataType"                   VARCHAR(511),
-    "moduleReferenceName"    VARCHAR(511),
-    FOREIGN KEY ("moduleReferenceName") REFERENCES ties_model.module_reference ("name") ON DELETE CASCADE
-);
-
-CREATE TABLE IF NOT EXISTS ties_model.classifiers (
-    "name"                   VARCHAR(511) PRIMARY KEY,
-    "moduleReferenceName"    VARCHAR(511),
+    "name"                     TEXT NOT NULL,
+    "aSideAssociationName"     TEXT NOT NULL,
+    "aSideMOType"              TEXT NOT NULL,
+    "aSideModule"              TEXT NOT NULL,
+    "aSideMinCardinality"      BIGINT NOT NULL,
+    "aSideMaxCardinality"      BIGINT NOT NULL,
+    "bSideAssociationName"     TEXT NOT NULL,
+    "bSideMOType"              TEXT NOT NULL,
+    "bSideModule"              TEXT NOT NULL,
+    "bSideMinCardinality"      BIGINT NOT NULL,
+    "bSideMaxCardinality"      BIGINT NOT NULL,
+    "associationKind"          TEXT NOT NULL,
+    "relationshipDataLocation" TEXT NOT NULL,
+    "storedAt"                 TEXT NOT NULL,
+    "connectSameEntity"        BOOLEAN NOT NULL,
+    "moduleReferenceName"      TEXT NOT NULL,
+    PRIMARY KEY ("name", "moduleReferenceName"),
+    FOREIGN KEY ("aSideModule") REFERENCES ties_model.module_reference ("name") ON DELETE CASCADE,
+    FOREIGN KEY ("bSideModule") REFERENCES ties_model.module_reference ("name") ON DELETE CASCADE,
     FOREIGN KEY ("moduleReferenceName") REFERENCES ties_model.module_reference ("name") ON DELETE CASCADE
 );
 
@@ -92,57 +83,64 @@
 INSERT INTO ties_model.execution_status("schema", "status") VALUES ('ties_model', 'success');
 
 COPY ties_model.hash_info("name", "hashedValue", "type") FROM stdin;
-AntennaModule	AntennaModule	TABLE
-positionWithinSector	positionWithinSector	COLUMN
-electricalAntennaTilt	electricalAntennaTilt	COLUMN
-mechanicalAntennaBearing	mechanicalAntennaBearing	COLUMN
-AntennaBeamWidth	AntennaBeamWidth	COLUMN
-mechanicalAntennaTilt	mechanicalAntennaTilt	COLUMN
-antennaModelNumber	antennaModelNumber	COLUMN
-totalTilt	totalTilt	COLUMN
-PK_AntennaModule_id	PK_AntennaModule_id	CONSTRAINT
-CloudSite	CloudSite	TABLE
-geo-location	geo-location	COLUMN
-CD_sourceIds	CD_sourceIds	COLUMN
-PK_CloudSite_id	PK_CloudSite_id	CONSTRAINT
-ENodeBFunction	ENodeBFunction	TABLE
-eNBId	eNBId	COLUMN
-eNodeBPlmnId	eNodeBPlmnId	COLUMN
-PK_ENodeBFunction_id	PK_ENodeBFunction_id	CONSTRAINT
-AntennaCapability	AntennaCapability	TABLE
-geranFqBands	geranFqBands	COLUMN
-nRFqBands	nRFqBands	COLUMN
-eUtranFqBands	eUtranFqBands	COLUMN
-PK_AntennaCapability_id	PK_AntennaCapability_id	CONSTRAINT
-LTESectorCarrier	LTESectorCarrier	TABLE
-sectorCarrierType	sectorCarrierType	COLUMN
+FK_o-ran-smo-teiv-ran_LTESectorCarrier_REL_FK_provided-by-enodebFunction	FK_D0868FBC0BBE2754F4B765C4898C1A1700E2BEFD	CONSTRAINT
+IDX_GIN_TRGM_OPS_ON_LIST_AS_JSONB_o-ran-smo-teiv-ran_ENodeBFunction_CD_sourceIds	IDX_3F7D14B4CF2CA74F28BA1600606E82C6E8C447C0	INDEX
+IDX_GIN_TRGM_OPS_ON_LIST_AS_JSONB_o-ran-smo-teiv-ran_LTESectorCarrier_CD_classifiers	IDX_E754EB8AD825DB3111B07B9E5DA3B30C38DB406B	INDEX
+IDX_GIN_TRGM_OPS_ON_LIST_AS_JSONB_o-ran-smo-teiv-ran_LTESectorCarrier_CD_sourceIds	IDX_6EC539C61EA7078DBA264C9877B87FC263605D42	INDEX
+IDX_GIN_TRGM_OPS_ON_LIST_AS_JSONB_o-ran-smo-teiv-ran_LTESectorCarrier_REL_CD_classifiers_ENODEBFUNCTION_PROVIDES_LTESECTORCARRIER	IDX_846B7740E8AA756B8C1409CD909D2DF73A47ED4C	INDEX
+IDX_GIN_TRGM_OPS_ON_LIST_AS_JSONB_o-ran-smo-teiv-ran_LTESectorCarrier_REL_CD_sourceIds_ENODEBFUNCTION_PROVIDES_LTESECTORCARRIER	IDX_1EBC7271CEA658156DE25286404CBC4593340F8E	INDEX
+IDX_GIN_o-ran-smo-teiv-ran_LTESectorCarrier_CD_decorators	IDX_GIN_o-ran-smo-teiv-ran_LTESectorCarrier_CD_decorators	INDEX
+IDX_GIN_o-ran-smo-teiv-ran_LTESectorCarrier_REL_CD_decorators_ENODEBFUNCTION_PROVIDES_LTESECTORCARRIER	IDX_44075E1D464599B61924196C20F2B88332520CD8	INDEX
+PK_o-ran-smo-teiv-equipment_AntennaModule_id	PK_o-ran-smo-teiv-equipment_AntennaModule_id	CONSTRAINT
+PK_o-ran-smo-teiv-ran_AntennaCapability_id	PK_o-ran-smo-teiv-ran_AntennaCapability_id	CONSTRAINT
+PK_o-ran-smo-teiv-ran_ENodeBFunction_id	PK_o-ran-smo-teiv-ran_ENodeBFunction_id	CONSTRAINT
+PK_o-ran-smo-teiv-ran_LTESectorCarrier_id	PK_o-ran-smo-teiv-ran_LTESectorCarrier_id	CONSTRAINT
+REL_CD_classifiers_ENODEBFUNCTION_PROVIDES_LTESECTORCARRIER	REL_CD_classifiers_ENODEBFUNCTION_PROVIDES_LTESECTORCARRIER	COLUMN
+REL_CD_decorators_ENODEBFUNCTION_PROVIDES_LTESECTORCARRIER	REL_CD_decorators_ENODEBFUNCTION_PROVIDES_LTESECTORCARRIER	COLUMN
+REL_CD_sourceIds_ENODEBFUNCTION_PROVIDES_LTESECTORCARRIER	REL_CD_sourceIds_ENODEBFUNCTION_PROVIDES_LTESECTORCARRIER	COLUMN
 REL_FK_provided-by-enodebFunction	REL_FK_provided-by-enodebFunction	COLUMN
 REL_ID_ENODEBFUNCTION_PROVIDES_LTESECTORCARRIER	REL_ID_ENODEBFUNCTION_PROVIDES_LTESECTORCARRIER	COLUMN
-REL_CD_sourceIds_ENODEBFUNCTION_PROVIDES_LTESECTORCARRIER	REL_CD_sourceIds_ENODEBFUNCTION_PROVIDES_LTESECTORCARRIER	COLUMN
-PK_LTESectorCarrier_id	PK_LTESectorCarrier_id	CONSTRAINT
-UNIQUE_LTESectorCarrier_REL_ID_ENODEBFUNCTION_PROVIDES_LTESECTORCARRIER	UNIQUE_B9770D6C26DDA0173DB9690F6E3B42C111AF26E9	CONSTRAINT
-FK_LTESectorCarrier_REL_FK_provided-by-enodebFunction	FK_LTESectorCarrier_REL_FK_provided-by-enodebFunction	CONSTRAINT
+UNIQUE_o-ran-smo-teiv-ran_LTESectorCarrier_REL_ID_ENODEBFUNCTION_PROVIDES_LTESECTORCARRIER	UNIQUE_FD943EE596337B11E0C640E1176CADF9CD69E19A	CONSTRAINT
+antennaBeamWidth	antennaBeamWidth	COLUMN
+antennaModelNumber	antennaModelNumber	COLUMN
+eNBId	eNBId	COLUMN
+eUtranFqBands	eUtranFqBands	COLUMN
+electricalAntennaTilt	electricalAntennaTilt	COLUMN
+geo-location	geo-location	COLUMN
+geranFqBands	geranFqBands	COLUMN
+id	id	COLUMN
+mechanicalAntennaBearing	mechanicalAntennaBearing	COLUMN
+mechanicalAntennaTilt	mechanicalAntennaTilt	COLUMN
+nRFqBands	nRFqBands	COLUMN
+o-ran-smo-teiv-equipment_AntennaModule	o-ran-smo-teiv-equipment_AntennaModule	TABLE
+o-ran-smo-teiv-ran_AntennaCapability	o-ran-smo-teiv-ran_AntennaCapability	TABLE
+o-ran-smo-teiv-ran_ENodeBFunction	o-ran-smo-teiv-ran_ENodeBFunction	TABLE
+o-ran-smo-teiv-ran_LTESectorCarrier	o-ran-smo-teiv-ran_LTESectorCarrier	TABLE
+positionWithinSector	positionWithinSector	COLUMN
+sectorCarrierType	sectorCarrierType	COLUMN
+totalTilt	totalTilt	COLUMN
 \.
 
-COPY ties_model.module_reference("name", "namespace", "domain", "includedModules", "revision", "content", "ownerAppId", "status") FROM stdin;
-o-ran-smo-teiv-common-yang-extensions	urn:o-ran:smo-teiv-common-yang-extensions	\N	[]	2024-05-02	bW9kdWxlIG8tcmFuLXNtby10ZWl2LWNvbW1vbi15YW5nLWV4dGVuc2lvbnMgewoKICB5YW5nLXZlcnNpb24gMS4xOwogIG5hbWVzcGFjZSAidXJuOm8tcmFuOnNtby10ZWl2LWNvbW1vbi15YW5nLWV4dGVuc2lvbnMiOwogIHByZWZpeCBvci10ZWl2LXlleHQ7CgogIG9yZ2FuaXphdGlvbiAiRXJpY3Nzb24gQUIiOwogIGNvbnRhY3QgIkVyaWNzc29uIGZpcnN0IGxpbmUgc3VwcG9ydCB2aWEgZW1haWwiOwogIGRlc2NyaXB0aW9uCiAgIlRvcG9sb2d5IGFuZCBJbnZlbnRvcnkgWUFORyBleHRlbnNpb25zIG1vZGVsLgoKICBDb3B5cmlnaHQgKGMpIDIwMjMgRXJpY3Nzb24gQUIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCgogIFRoaXMgbW9kZWwgY29udGFpbnMgZXh0ZW5zaW9ucyB0byB0aGUgWUFORyBsYW5ndWFnZSB0aGF0IHRvcG9sb2d5IGFuZAogIGludmVudG9yeSBtb2RlbHMgd2lsbCB1c2UgdG8gZGVmaW5lIGFuZCBhbm5vdGF0ZSB0eXBlcyBhbmQgcmVsYXRpb25zaGlwcy4iOwoKICByZXZpc2lvbiAiMjAyNC0wNS0wMiIgewogICAgZGVzY3JpcHRpb24gIkluaXRpYWwgcmV2aXNpb24uIjsKICAgIG9yLXRlaXYteWV4dDpsYWJlbCAwLjMuMDsKICB9CgogIGV4dGVuc2lvbiBiaURpcmVjdGlvbmFsVG9wb2xvZ3lSZWxhdGlvbnNoaXAgewoKICAgIGRlc2NyaXB0aW9uCiAgICAgICJEZWZpbmVzIGEgYmktZGlyZWN0aW9uYWwgcmVsYXRpb25zaGlwIGluIHRoZSB0b3BvbG9neS4KCiAgICAgICBBIGJpLWRpcmVjdGlvbmFsLWFzc29jaWF0aW9uIChCREEpIGlzIGEgcmVsYXRpb25zaGlwIGNvbXByaXNpbmcgb2YgYW4KICAgICAgIEEtc2lkZSBhbmQgYSBCLXNpZGUuIFRoZSBBLXNpZGUgaXMgY29uc2lkZXJlZCB0aGUgb3JpZ2luYXRpbmcgc2lkZSBvZgogICAgICAgdGhlIHJlbGF0aW9uc2hpcDsgdGhlIEItc2lkZSBpcyBjb25zaWRlcmVkIHRoZSB0ZXJtaW5hdGluZyBzaWRlIG9mIHRoZQogICAgICAgcmVsYXRpb25zaGlwLiBUaGUgb3JkZXIgb2YgQS1zaWRlIGFuZCBCLXNpZGUgaXMgb2YgaW1wb3J0YW5jZSBhbmQgTVVTVAogICAgICAgTk9UIGJlIGNoYW5nZWQgb25jZSBkZWZpbmVkLgoKICAgICAgIEJvdGggQS1zaWRlIGFuZCBCLXNpZGUgYXJlIGRlZmluZWQgb24gYSB0eXBlLCBhbmQgYXJlIGdpdmVuIGEgcm9sZS4gQQogICAgICAgdHlwZSBtYXkgaGF2ZSBtdWx0aXBsZSBvcmlnaW5hdGluZyBhbmQvb3IgdGVybWluYXRpbmcgc2lkZXMgb2YgYQogICAgICAgcmVsYXRpb25zaGlwLCBhbGwgZGlzdGluZ3Vpc2hlZCBieSByb2xlIG5hbWUuCgogICAgICAgVGhlIHN0YXRlbWVudCBNVVNUIG9ubHkgYmUgYSBzdWJzdGF0ZW1lbnQgb2YgdGhlICdtb2R1bGUnIHN0YXRlbWVudC4KICAgICAgIE11bHRpcGxlICdiaS1kaXJlY3Rpb25hbC10b3BvbG9neS1yZWxhdGlvbnNoaXAnIHN0YXRlbWVudHMgYXJlIGFsbG93ZWQKICAgICAgIHBlciBwYXJlbnQgc3RhdGVtZW50LgoKICAgICAgIFN1YnN0YXRlbWVudHMgdG8gdGhlICdiaS1kaXJlY3Rpb25hbC10b3BvbG9neS1yZWxhdGlvbnNoaXAnIGRlZmluZSB0aGUKICAgICAgIEEtc2lkZSBhbmQgdGhlIEItc2lkZSwgcmVzcGVjdGl2ZWx5LCBhbmQgb3B0aW9uYWxseSBwcm9wZXJ0aWVzIG9mIHRoZQogICAgICAgcmVsYXRpb25zaGlwLiBEYXRhIG5vZGVzIG9mIHR5cGVzICdsZWFmJyBhbmQgJ2xlYWYtbGlzdCcgYXJlIHVzZWQgZm9yCiAgICAgICB0aGlzIHB1cnBvc2UuIE9uZSBvZiB0aGUgZGF0YSBub2RlcyBNVVNUIGJlIGFubm90YXRlZCB3aXRoIHRoZSAnYS1zaWRlJwogICAgICAgZXh0ZW5zaW9uOyBhbm90aGVyIGRhdGEgbm9kZSBNVVNUIGJlIGFubm90YXRlZCB3aXRoIHRoZSAnYi1zaWRlJwogICAgICAgZXh0ZW5zaW9uLiBPdGhlciBkYXRhIG5vZGVzIGRlZmluZSBwcm9wZXJ0aWVzIG9mIHRoZSByZWxhdGlvbnNoaXAuCgogICAgICAgVGhlIGFyZ3VtZW50IGlzIHRoZSBuYW1lIG9mIHRoZSByZWxhdGlvbnNoaXAuIFRoZSByZWxhdGlvbnNoaXAgbmFtZSBpcwogICAgICAgc2NvcGVkIHRvIHRoZSBuYW1lc3BhY2Ugb2YgdGhlIGRlY2xhcmluZyBtb2R1bGUgYW5kIE1VU1QgYmUgdW5pcXVlCiAgICAgICB3aXRoaW4gdGhlIHNjb3BlLiI7CgogICAgYXJndW1lbnQgcmVsYXRpb25zaGlwTmFtZTsKICB9CgogIGV4dGVuc2lvbiBhU2lkZSB7CiAgICBkZXNjcmlwdGlvbgogICAgICAiRGVmaW5lcyB0aGUgQS1zaWRlIG9mIGEgcmVsYXRpb25zaGlwLgoKICAgICAgIFRoZSBzdGF0ZW1lbnQgTVVTVCBvbmx5IGJlIGEgc3Vic3RhdGVtZW50IG9mIGEgJ2xlYWYnIG9yICdsZWFmLWxpc3QnCiAgICAgICBzdGF0ZW1lbnQsIHdoaWNoIGl0c2VsZiBtdXN0IGJlIGEgc3Vic3RhdGVtZW50IG9mIHRoZQogICAgICAgJ3VuaS1kaXJlY3Rpb25hbC10b3BvbG9neS1yZWxhdGlvbnNoaXAnIHN0YXRlbWVudC4KCiAgICAgICBUaGUgZGF0YSB0eXBlIG9mIHRoZSBwYXJlbnQgJ2xlYWYnIG9yICdsZWFmLWxpc3QnIE1VU1QgYmUKICAgICAgICdpbnN0YW5jZS1pZGVudGlmaWVyJy4gQ29uc3RyYWludHMgTUFZIGJlIHVzZWQgYXMgcGFydCBvZiB0aGUgcGFyZW50CiAgICAgICAnbGVhZicgb3IgJ2xlYWYtbGlzdCcgdG8gZW5mb3JjZSBjYXJkaW5hbGl0eS4KCiAgICAgICBUaGUgaWRlbnRpZmllciBvZiB0aGUgcGFyZW50ICdsZWFmJyBvciAnbGVhZi1saXN0JyBpcyB1c2VkIGFzIG5hbWUgb2YKICAgICAgIHRoZSByb2xlIG9mIHRoZSBBLXNpZGUgb2YgdGhlIHJlbGF0aW9uc2hpcC4gVGhlIG5hbWUgb2YgdGhlIHJvbGUgaXMKICAgICAgIHNjb3BlZCB0byB0aGUgdHlwZSBvbiB3aGljaCB0aGUgQS1zaWRlIGlzIGRlZmluZWQgYW5kIE1VU1QgYmUgdW5pcXVlCiAgICAgICB3aXRoaW4gdGhlIHNjb3BlLgoKICAgICAgIFdoaWxlIHRoZSBwYXJlbnQgJ2xlYWYnIG9yICdsZWFmLWxpc3QnIGRvZXMgbm90IHJlc3VsdCBpbiBhIHByb3BlcnR5IG9mCiAgICAgICB0aGUgcmVsYXRpb25zaGlwLCBpdCBpcyBSRUNPTU1FTkRFRCB0byBhdm9pZCB1c2luZyB0aGUgbmFtZSBvZiBhbgogICAgICAgZXhpc3RpbmcgdHlwZSBwcm9wZXJ0eSBhcyByb2xlIG5hbWUgdG8gYXZvaWQgcG90ZW50aWFsIGFtYmlndWl0aWVzCiAgICAgICBiZXR3ZWVuIHByb3BlcnRpZXMgb2YgYSB0eXBlLCBhbmQgcm9sZXMgb2YgYSByZWxhdGlvbnNoaXAgb24gdGhlIHR5cGUuCgogICAgICAgVGhlIGFyZ3VtZW50IGlzIHRoZSBuYW1lIG9mIHRoZSB0eXBlIG9uIHdoaWNoIHRoZSBBLXNpZGUgcmVzaWRlcy4gSWYgdGhlCiAgICAgICB0eXBlIGlzIGRlY2xhcmVkIGluIGFub3RoZXIgbW9kdWxlLCB0aGUgdHlwZSBtdXN0IGJlIHByZWZpeGVkLCBhbmQgYQogICAgICAgY29ycmVzcG9uZGluZyAnaW1wb3J0JyBzdGF0ZW1lbnQgYmUgdXNlZCB0byBkZWNsYXJlIHRoZSBwcmVmaXguIjsKCiAgICBhcmd1bWVudCBhU2lkZVR5cGU7CiAgfQoKICBleHRlbnNpb24gYlNpZGUgewogICAgZGVzY3JpcHRpb24gIkRlZmluZXMgdGhlIEItc2lkZSBvZiBhIHJlbGF0aW9uc2hpcC4KCiAgICAgICBUaGUgc3RhdGVtZW50IE1VU1Qgb25seSBiZSBhIHN1YnN0YXRlbWVudCBvZiBhICdsZWFmJyBvciAnbGVhZi1saXN0JwogICAgICAgc3RhdGVtZW50LCB3aGljaCBpdHNlbGYgbXVzdCBiZSBhIHN1YnN0YXRlbWVudCBvZiB0aGUKICAgICAgICd1bmktZGlyZWN0aW9uYWwtdG9wb2xvZ3ktcmVsYXRpb25zaGlwJyBzdGF0ZW1lbnQuCgogICAgICAgVGhlIGRhdGEgdHlwZSBvZiB0aGUgcGFyZW50ICdsZWFmJyBvciAnbGVhZi1saXN0JyBNVVNUIGJlCiAgICAgICAnaW5zdGFuY2UtaWRlbnRpZmllcicuIENvbnN0cmFpbnRzIE1BWSBiZSB1c2VkIGFzIHBhcnQgb2YgdGhlIHBhcmVudAogICAgICAgJ2xlYWYnIG9yICdsZWFmLWxpc3QnIHRvIGVuZm9yY2UgY2FyZGluYWxpdHkuCgogICAgICAgVGhlIGlkZW50aWZpZXIgb2YgdGhlIHBhcmVudCAnbGVhZicgb3IgJ2xlYWYtbGlzdCcgaXMgdXNlZCBhcyBuYW1lIG9mCiAgICAgICB0aGUgcm9sZSBvZiB0aGUgQi1zaWRlIG9mIHRoZSByZWxhdGlvbnNoaXAuIFRoZSBuYW1lIG9mIHRoZSByb2xlIGlzCiAgICAgICBzY29wZWQgdG8gdGhlIHR5cGUgb24gd2hpY2ggdGhlIEItc2lkZSBpcyBkZWZpbmVkIGFuZCBNVVNUIGJlIHVuaXF1ZQogICAgICAgd2l0aGluIHRoZSBzY29wZS4KCiAgICAgICBXaGlsZSB0aGUgcGFyZW50ICdsZWFmJyBvciAnbGVhZi1saXN0JyBkb2VzIG5vdCByZXN1bHQgaW4gYSBwcm9wZXJ0eSBvZgogICAgICAgdGhlIHJlbGF0aW9uc2hpcCwgaXQgaXMgUkVDT01NRU5ERUQgdG8gYXZvaWQgdXNpbmcgdGhlIG5hbWUgb2YgYW4KICAgICAgIGV4aXN0aW5nIHR5cGUgcHJvcGVydHkgYXMgcm9sZSBuYW1lIHRvIGF2b2lkIHBvdGVudGlhbCBhbWJpZ3VpdGllcwogICAgICAgYmV0d2VlbiBwcm9wZXJ0aWVzIG9mIGEgdHlwZSwgYW5kIHJvbGVzIG9mIGEgcmVsYXRpb25zaGlwIG9uIHRoZSB0eXBlLgoKICAgICAgIFRoZSBhcmd1bWVudCBpcyB0aGUgbmFtZSBvZiB0aGUgdHlwZSBvbiB3aGljaCB0aGUgQi1zaWRlIHJlc2lkZXMuIElmIHRoZQogICAgICAgdHlwZSBpcyBkZWNsYXJlZCBpbiBhbm90aGVyIG1vZHVsZSwgdGhlIHR5cGUgbXVzdCBiZSBwcmVmaXhlZCwgYW5kIGEKICAgICAgIGNvcnJlc3BvbmRpbmcgJ2ltcG9ydCcgc3RhdGVtZW50IGJlIHVzZWQgdG8gZGVjbGFyZSB0aGUgcHJlZml4LiI7CgogICAgYXJndW1lbnQgYlNpZGVUeXBlOwogIH0KCiAgZXh0ZW5zaW9uIGRvbWFpbiB7CiAgICBkZXNjcmlwdGlvbiAiS2V5d29yZCB1c2VkIHRvIGNhcnJ5IGRvbWFpbiBpbmZvcm1hdGlvbi4iOwogICAgYXJndW1lbnQgZG9tYWluTmFtZTsKICB9CgogIGV4dGVuc2lvbiBsYWJlbCB7CiAgICBkZXNjcmlwdGlvbiAiVGhlIGxhYmVsIGNhbiBiZSB1c2VkIHRvIGdpdmUgbW9kdWxlcyBhbmQgc3VibW9kdWxlcyBhIHNlbWFudGljIHZlcnNpb24sIGluIGFkZGl0aW9uIHRvIHRoZWlyIHJldmlzaW9uLgoKICAgICAgVGhlIGZvcm1hdCBvZiB0aGUgbGFiZWwgaXMg4oCYeC55LnrigJkg4oCTIGV4cHJlc3NlZCBhcyBwYXR0ZXJuLCBpdCBpcyBbMC05XStcXC5bMC05XStcXC5bMC05XSsKCiAgICAgIFRoZSBzdGF0ZW1lbnQgTVVTVCBvbmx5IGJlIGEgc3Vic3RhdGVtZW50IG9mIHRoZSByZXZpc2lvbiBzdGF0ZW1lbnQuICBaZXJvIG9yIG9uZSByZXZpc2lvbiBsYWJlbCBzdGF0ZW1lbnRzCiAgICAgIHBlciBwYXJlbnQgc3RhdGVtZW50IGFyZSBhbGxvd2VkLgoKICAgICAgUmV2aXNpb24gbGFiZWxzIE1VU1QgYmUgdW5pcXVlIGFtb25nc3QgYWxsIHJldmlzaW9ucyBvZiBhIG1vZHVsZSBvciBzdWJtb2R1bGUuIjsKICAgICAgYXJndW1lbnQgc2VtdmVyc2lvbjsKICB9Cn0=	BUILT_IN_MODULE	IN_USAGE
-o-ran-smo-teiv-common-yang-types	urn:o-ran:smo-teiv-common-yang-types	\N	[]	2024-05-02	bW9kdWxlIG8tcmFuLXNtby10ZWl2LWNvbW1vbi15YW5nLXR5cGVzIHsKCiAgeWFuZy12ZXJzaW9uIDEuMTsKICBuYW1lc3BhY2UgInVybjpvLXJhbjpzbW8tdGVpdi1jb21tb24teWFuZy10eXBlcyI7CiAgcHJlZml4IG9yLXRlaXYtdHlwZXM7CgogIGltcG9ydCBvLXJhbi1zbW8tdGVpdi1jb21tb24teWFuZy1leHRlbnNpb25zIHtwcmVmaXggb3ItdGVpdi15ZXh0OyB9CgogIGltcG9ydCBfM2dwcC1jb21tb24teWFuZy10eXBlcyB7IHByZWZpeCB0eXBlczNncHA7IH0KCiAgb3JnYW5pemF0aW9uICJFcmljc3NvbiBBQiI7CiAgY29udGFjdCAiRXJpY3Nzb24gZmlyc3QgbGluZSBzdXBwb3J0IHZpYSBlbWFpbCI7CiAgZGVzY3JpcHRpb24KICAiVG9wb2xvZ3kgYW5kIEludmVudG9yeSBjb21tb24gdHlwZXMgbW9kZWwuCgogIENvcHlyaWdodCAoYykgMjAyMyBFcmljc3NvbiBBQi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KCiAgVGhpcyBtb2RlbCBjb250YWlucyByZS11c2FibGUgZGF0YSB0eXBlcyB0aGF0IHRvcG9sb2d5IGFuZCBpbnZlbnRvcnkgbW9kZWxzCiAgd2lsbCBmcmVxdWVudGx5IHVzZSBhcyBwYXJ0IG9mIHR5cGVzIGFuZCByZWxhdGlvbnNoaXBzLiI7CgogIHJldmlzaW9uICIyMDI0LTA1LTAyIiB7CiAgICBkZXNjcmlwdGlvbiAiSW5pdGlhbCByZXZpc2lvbi4iOwogICAgb3ItdGVpdi15ZXh0OmxhYmVsIDAuMy4wOwogIH0KCiAgZ3JvdXBpbmcgVG9wX0dycF9UeXBlIHsKCiAgICBkZXNjcmlwdGlvbiAiR3JvdXBpbmcgY29udGFpbmluZyB0aGUga2V5IGF0dHJpYnV0ZSBjb21tb24gdG8gYWxsIHR5cGVzLiBBbGwgdHlwZXMKICAgICAgICAgICAgICAgIE1VU1QgdXNlIHRoaXMgZ3JvdXBpbmcuIjsKCiAgICBsZWFmIGlkIHsKICAgICAgdHlwZSBzdHJpbmc7CiAgICAgIGRlc2NyaXB0aW9uICJVbmlxdWUgaWRlbnRpZmllciBvZiB0b3BvbG9neSBlbnRpdGllcy4gUmVwcmVzZW50cyB0aGUgRW50aXR5IEluc3RhbmNlIElkZW50aWZpZXIuIjsKICAgIH0KICB9CgogIGdyb3VwaW5nIENNX0lEIHsKCiAgICBkZXNjcmlwdGlvbiAiR3JvdXBpbmcgY29udGFpbmluZyB0aGUga2V5IGF0dHJpYnV0ZXMgdG8gbWFrZQogICAgICAgICAgICAgICAgdXNlIG9mIENvbmZpZ3VyYXRpb24gTWFuYWdlbWVudCAoQ00pLiI7CgogICAgbGVhZiBjbUhhbmRsZSB7CiAgICAgIHR5cGUgc3RyaW5nOwogICAgICBkZXNjcmlwdGlvbiAiVW5pcXVlIGlkZW50aWZpZXIgZm9yIG5ldHdvcmsgZW50aXRpZXMgaW4gQ00uIjsKICAgIH0KCiAgICBsZWFmIHJlc291cmNlSWRlbnRpZmllciB7CiAgICAgIHR5cGUgc3RyaW5nOwogICAgICBkZXNjcmlwdGlvbiAiVGhlIHhwYXRoIGV4cHJlc3Npb24gaWRlbnRpZnlpbmcgdGhlIHJlc291cmNlIGluIHRoZSBOb2RlIG1vZGVsIHlhbmcgdHJlZS4iOwogICAgfQogIH0KCiAgdHlwZWRlZiBfM0dQUF9GRE5fVHlwZSB7CiAgICB0eXBlIHR5cGVzM2dwcDpEaXN0aW5ndWlzaGVkTmFtZTsKICB9CgogIGNvbnRhaW5lciBjb25zdW1lci1kYXRhIHsKICAgIGRlc2NyaXB0aW9uICJUaGlzIGNvbnRhaW5lciBkZWZpbmVzIHRoZSBjb25zdW1lci1kYXRhLiBDb25zdW1lci1kYXRhIG1heSBiZSBhdHRhY2hlZCB0byBUb3BvbG9neSBFbnRpdHkgb3IKICAgICAgICAgICAgICAgIFRvcG9sb2d5IFJlbGF0aW9uIGluc3RhbmNlLCBvdXRzaWRlIG9mIHRoZSBkZWNsYXJlZCBUb3BvbG9neSBFbnRpdHkgb3IgVG9wb2xvZ3kgUmVsYXRpb25zaGlwJ3MgYXR0cmlidXRlcy4KICAgICAgICAgICAgICAgIFRoaXMgY29udGFpbmVyIGNhbm5vdCBiZSBpbnN0YW50aWF0ZWQsIGFuZCBpdCBNVVNUIE5PVCBiZSBhdWdtZW50ZWQgb3IgZGV2aWF0ZWQgaW4gYW55IHdheSwgdW5sZXNzIHN0YXRlZAogICAgICAgICAgICAgICAgb3RoZXJ3aXNlLiI7CgogICAgY29udGFpbmVyIGRlY29yYXRvcnMgewogICAgICBkZXNjcmlwdGlvbiAiVGhpcyBjb250YWluZXIgc2VydmVzIGFzIGV4dGVuc2lvbiBwb2ludCBmb3IgYXBwbGljYXRpb25zIHdpc2hpbmcgdG8gZGVmaW5lIHRoZWlyIG93biBkZWNvcmF0b3JzLgogICAgICAgICAgICAgICAgICBUaGlzIGlzIGRvbmUgdmlhIGF1Z21lbnRhdGlvbnMuIFRoZXkgY2FuIG9ubHkgYmUgZGVmaW5lZCBpbiBuYW1lIHZhbHVlIHBhaXIuIjsKICAgIH0KCiAgICBsZWFmLWxpc3QgY2xhc3NpZmllcnMgewogICAgICBkZXNjcmlwdGlvbiAiQ29uc3VtZXIgZGVmaW5lZCB0YWdzIHRvIHRvcG9sb2d5IGVudGl0aWVzIGFuZCByZWxhdGlvbnNoaXBzLiI7CiAgICAgIHR5cGUgaWRlbnRpdHlyZWYgeyBiYXNlIGNsYXNzaWZpZXI7IH0KICAgIH0KCiAgICBsZWFmLWxpc3Qgc291cmNlSWRzIHsKICAgICAgZGVzY3JpcHRpb24gIkFuIG9yZGVyZWQgbGlzdCBvZiBpZGVudGl0aWVzIHRoYXQgcmVwcmVzZW50IHRoZSBzZXQgb2YgbmF0aXZlIHNvdXJjZSBpZGVudGlmaWVycyBmb3IgcGFydGljaXBhdGluZwogICAgICAgICAgICAgICAgICBlbnRpdGllcy4iOwogICAgICB0eXBlIHN0cmluZzsKICAgICAgb3JkZXJlZC1ieSB1c2VyOwogICAgfQoKICAgIGNvbnRhaW5lciBtZXRhZGF0YSB7CiAgICAgIGRlc2NyaXB0aW9uICJUaGlzIGNvbnRhaW5lciBzZXJ2ZXMgYXMgZXh0ZW5zaW9uIHBvaW50IHRvIGRlZmluZSBtZXRhZGF0YS4gVGhleSBjYW4gb25seSBiZSBkZWZpbmVkIGluIG5hbWUgdmFsdWUKICAgICAgICAgICAgICAgICAgcGFpci4iOwogICAgfQogIH0KCiAgaWRlbnRpdHkgY2xhc3NpZmllcnsKICAgIGRlc2NyaXB0aW9uICAiVGhlIGNsYXNzaWZpZXIgaXMgdXNlZCBhcyBhIGJhc2UgdG8gcHJvdmlkZSBhbGwgY2xhc3NpZmllcnMgd2l0aCBpZGVudGl0eS4gIjsKICB9Cn0=	BUILT_IN_MODULE	IN_USAGE
-o-ran-smo-teiv-ran	urn:o-ran:smo-teiv-ran	RAN	[]	2024-05-02	bW9kdWxlIG8tcmFuLXNtby10ZWl2LXJhbiB7DQogICAgeWFuZy12ZXJzaW9uIDEuMTsNCiAgICBuYW1lc3BhY2UgInVybjpvLXJhbjpzbW8tdGVpdi1yYW4iOw0KICAgIHByZWZpeCBvci10ZWl2LXJhbjsNCg0KICAgIGltcG9ydCBvLXJhbi1zbW8tdGVpdi1jb21tb24teWFuZy10eXBlcyB7cHJlZml4IG9yLXRlaXYtdHlwZXM7IH0NCg0KICAgIGltcG9ydCBvLXJhbi1zbW8tdGVpdi1jb21tb24teWFuZy1leHRlbnNpb25zIHtwcmVmaXggb3ItdGVpdi15ZXh0OyB9DQoNCiAgICBpbXBvcnQgXzNncHAtY29tbW9uLXlhbmctdHlwZXMgeyBwcmVmaXggdHlwZXMzZ3BwOyB9DQoNCiAgICBvcmdhbml6YXRpb24gIkVyaWNzc29uIEFCIjsNCiAgICBjb250YWN0ICJFcmljc3NvbiBmaXJzdCBsaW5lIHN1cHBvcnQgdmlhIGVtYWlsIjsNCiAgICBkZXNjcmlwdGlvbg0KICAgICJSQU4gTG9naWNhbCB0b3BvbG9neSBtb2RlbC4NCg0KICAgIENvcHlyaWdodCAoYykgMjAyMyBFcmljc3NvbiBBQi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCg0KICAgIFRoaXMgbW9kZWwgY29udGFpbnMgdGhlIHRvcG9sb2d5IGVudGl0aWVzIGFuZCByZWxhdGlvbnMgaW4gdGhlDQogICAgUkFOIExvZ2ljYWwgZG9tYWluLCB3aGljaCByZXByZXNlbnRzIHRoZSBmdW5jdGlvbmFsIGNhcGFiaWxpdHkNCiAgICBvZiB0aGUgZGVwbG95ZWQgUkFOIHRoYXQgYXJlIHJlbGV2YW50IHRvIHJBcHBzIHVzZSBjYXNlcy4iOw0KDQogICAgcmV2aXNpb24gIjIwMjQtMDUtMDIiIHsNCiAgICAgICAgZGVzY3JpcHRpb24gIkluaXRpYWwgcmV2aXNpb24uIjsNCiAgICAgICAgb3ItdGVpdi15ZXh0OmxhYmVsIDAuMy4wOw0KICAgIH0NCg0KICAgIG9yLXRlaXYteWV4dDpkb21haW4gUkFOOw0KDQogICAgbGlzdCBHTkJEVUZ1bmN0aW9uIHsNCiAgICAgICAgZGVzY3JpcHRpb24gImdOb2RlQiBEaXN0cmlidXRlZCBVbml0IChnTkItRFUpLg0KDQogICAgICAgICAgICAgICAgICAgIEEgZ05CIG1heSBjb25zaXN0IG9mIGEgZ05CLUNlbnRyYWxpemVkIFVuaXQNCiAgICAgICAgICAgICAgICAgICAgKGdOQi1DVSkgYW5kIGEgZ05CLURVLiBUaGUgQ1UgcHJvY2Vzc2VzIG5vbi1yZWFsDQogICAgICAgICAgICAgICAgICAgIHRpbWUgcHJvdG9jb2xzIGFuZCBzZXJ2aWNlcywgYW5kIHRoZSBEVSBwcm9jZXNzZXMNCiAgICAgICAgICAgICAgICAgICAgUEhZIGxldmVsIHByb3RvY29sIGFuZCByZWFsIHRpbWUgc2VydmljZXMuIFRoZQ0KICAgICAgICAgICAgICAgICAgICBnTkItQ1UgYW5kIHRoZSBnTkItRFUgdW5pdHMgYXJlIGNvbm5lY3RlZCB2aWENCiAgICAgICAgICAgICAgICAgICAgRjEgbG9naWNhbCBpbnRlcmZhY2UuDQoNCiAgICAgICAgICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBpcyB0cnVlIGZvciBhIGdOQi1EVToNCiAgICAgICAgICAgICAgICAgICAgSXMgY29ubmVjdGVkIHRvIHRoZSBnTkItQ1UtQ1AgdGhyb3VnaCB0aGUgRjEtQw0KICAgICAgICAgICAgICAgICAgICBpbnRlcmZhY2UuSXMgY29ubmVjdGVkIHRvIHRoZSBnTkItQ1UtVVAgdGhyb3VnaA0KICAgICAgICAgICAgICAgICAgICB0aGUgRjEtVSBpbnRlcmZhY2UuIE9uZSBnTkItRFUgaXMgY29ubmVjdGVkIHRvIG9ubHkNCiAgICAgICAgICAgICAgICAgICAgb25lIGdOQi1DVS1DUC4gT25lIGdOQi1EVSBjYW4gYmUgY29ubmVjdGVkIHRvDQogICAgICAgICAgICAgICAgICAgIG11bHRpcGxlIGdOQi1DVS1VUHMgdW5kZXIgdGhlIGNvbnRyb2wgb2YgdGhlIHNhbWUNCiAgICAgICAgICAgICAgICAgICAgZ05CLUNVLUNQLg0KICAgICAgICAgICAgICAgICAgICBOb3RlOiBBIGdOQiBtYXkgY29uc2lzdCBvZiBhIGdOQi1DVS1DUCwgbXVsdGlwbGUNCiAgICAgICAgICAgICAgICAgICAgZ05CLUNVLVVQcyBhbmQgbXVsdGlwbGUgZ05CLURVcy4gZ05CLURVIGlzIGEgY29uY3JldGUNCiAgICAgICAgICAgICAgICAgICAgY2xhc3MgdGhhdCBleHRlbmRzIHRoZSBORy1SQU4gbm9kZSBvYmplY3QuIEluIFRvcG9sb2d5LCB5b3UNCiAgICAgICAgICAgICAgICAgICAgY2FuIGNyZWF0ZSwgcmVhZCwgdXBkYXRlLCBhbmQgZGVsZXRlIHRoZSBnTkItRFUgb2JqZWN0LiI7DQoNCiAgICAgICAgdXNlcyBvci10ZWl2LXR5cGVzOlRvcF9HcnBfVHlwZTsNCiAgICAgICAga2V5IGlkOw0KDQogICAgICAgIGNvbnRhaW5lciBhdHRyaWJ1dGVzIHsNCg0KICAgICAgICAgICAgY29udGFpbmVyIGRVcExNTklkIHsNCiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiAiUExNTiBpZGVudGlmaWVyIHVzZWQgYXMgcGFydCBvZiBQTSBFdmVudHMgZGF0YSI7DQogICAgICAgICAgICAgICAgdXNlcyB0eXBlczNncHA6UExNTklkOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICBsZWFmIGdOQkRVSWQgew0KICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICJVbmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIERVIHdpdGhpbiBhIGdOb2RlQiI7DQogICAgICAgICAgICAgICAgdHlwZSB1aW50MzI7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIGxlYWYgZ05CSWQgew0KICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICJJZGVudGl0eSBvZiBnTm9kZUIgd2l0aGluIGEgUExNTiI7DQogICAgICAgICAgICAgICAgdHlwZSB1aW50MzI7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIGxlYWYgZ05CSWRMZW5ndGggew0KICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICJMZW5ndGggb2YgZ05CSWQgYml0IHN0cmluZyByZXByZXNlbnRhdGlvbiI7DQogICAgICAgICAgICAgICAgdHlwZSB1aW50MzI7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICB9DQoNCiAgICBsaXN0IEVOb2RlQkZ1bmN0aW9uIHsNCiAgICAgICAgZGVzY3JpcHRpb24gIkFuIEV2b2x2ZWQgTm9kZSBCIChlTm9kZUIpIGlzIHRoZSBvbmx5IG1hbmRhdG9yeQ0KICAgICAgICAgICAgICAgICAgICBub2RlIGluIHRoZSByYWRpbyBhY2Nlc3MgbmV0d29yayAoUkFOKSBvZiBMb25nLVRlcm0NCiAgICAgICAgICAgICAgICAgICAgRXZvbHV0aW9uIChMVEUpLiBUaGUgZU5vZGVCIGlzIGEgY29tcGxleCBiYXNlDQogICAgICAgICAgICAgICAgICAgIHN0YXRpb24gdGhhdCBoYW5kbGVzIHJhZGlvIGNvbW11bmljYXRpb25zDQogICAgICAgICAgICAgICAgICAgIGluIHRoZSBjZWxsIGFuZCBjYXJyaWVzIG91dCByYWRpbyByZXNvdXJjZQ0KICAgICAgICAgICAgICAgICAgICBtYW5hZ2VtZW50IGFuZCBoYW5kb3ZlciBkZWNpc2lvbnMuIFVubGlrZSAyLzNHDQogICAgICAgICAgICAgICAgICAgIHdpcmVsZXNzIFJBTiwgdGhlcmUgaXMgbm8gY2VudHJhbGl6ZWQgcmFkaW8gbmV0d29yaw0KICAgICAgICAgICAgICAgICAgICBjb250cm9sbGVyIGluIExURS4gSXQgaXMgdGhlIGhhcmR3YXJlIHRoYXQgaXMgY29ubmVjdGVkDQogICAgICAgICAgICAgICAgICAgIHRvIHRoZSBtb2JpbGUgcGhvbmUgbmV0d29yayB0aGF0IGNvbW11bmljYXRlcw0KICAgICAgICAgICAgICAgICAgICBkaXJlY3RseSB3aXRoIG1vYmlsZSBoYW5kc2V0cyAoVXNlciBFcXVpcG1lbnQpLCBsaWtlIGEgYmFzZQ0KICAgICAgICAgICAgICAgICAgICB0cmFuc2NlaXZlciBzdGF0aW9uIChCVFMpIGluIEdTTSBuZXR3b3Jrcy4gVGhpcyBzaW1wbGlmaWVzDQogICAgICAgICAgICAgICAgICAgIHRoZSBhcmNoaXRlY3R1cmUgYW5kIGFsbG93cyBsb3dlciByZXNwb25zZSB0aW1lcy4iOw0KDQogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpUb3BfR3JwX1R5cGU7DQogICAgICAgIGtleSBpZDsNCg0KICAgICAgICBjb250YWluZXIgYXR0cmlidXRlcyB7DQogICAgICAgICAgICBsZWFmIGVOQklkIHsNCiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiAiVGhlIEVOb2RlQiBJRCB0aGF0IGZvcm1zIHBhcnQgb2YNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgQ2VsbCBHbG9iYWwgSWRlbnRpdHksIGFuZCBpcw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsc28gdXNlZCB0byBpZGVudGlmeSB0aGUgbm9kZSBvdmVyDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIFMxIGludGVyZmFjZSI7DQogICAgICAgICAgICAgICAgdHlwZSB1aW50MzI7DQogICAgICAgICAgICAgICAgZGVmYXVsdCAxMTsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgbGVhZiBkdXBsZXhUeXBlIHsNCiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiAiSW5kaWNhdG9yIG9mIEVVdHJhbkNlbGwgdHlwZSwgRkREIG9yIFRERCI7DQogICAgICAgICAgICAgICAgdHlwZSBlbnVtZXJhdGlvbiB7DQogICAgICAgICAgICAgICAgICAgIGVudW0gdGRkIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlIDE7DQogICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiAiVEREIjsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgY29udGFpbmVyIGVOb2RlQlBsbW5JZCB7DQogICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIlRoZSBFTm9kZUIgUHVibGljIExhbmQgTW9iaWxlIE5ldHdvcmsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoUExNTikgSUQgdGhhdCBmb3JtcyBwYXJ0IG9mIHRoZSBFTm9kZUINCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBHbG9iYWwgSUQgdXNlZCB0byBpZGVudGlmeSB0aGUgbm9kZSBvdmVyDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIFMxIGludGVyZmFjZS4gTm90ZTogVGhlIHZhbHVlIChNQ0M9MDAxLCBNTkM9MDEpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kaWNhdGVzIHRoYXQgdGhlIFBMTU4gaXMgbm90IGluaXRpYXRlZC4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgdmFsdWUgY2FuIG5vdCBiZSB1c2VkIGFzIGEgdmFsaWQgUExNTiBJZGVudGl0eS4iOw0KDQogICAgICAgICAgICAgICAgbGVhZiBtY2Mgew0KICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiAiVGhlIE1DQyBwYXJ0IG9mIGEgUExNTiBpZGVudGl0eQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VkIGluIHRoZSByYWRpbyBuZXR3b3JrLiI7DQogICAgICAgICAgICAgICAgICAgIHR5cGUgaW50MzIgew0KICAgICAgICAgICAgICAgICAgICAgICAgcmFuZ2UgMC4uOTk5Ow0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGxlYWYgbW5jIHsNCiAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIlRoZSBNTkMgcGFydCBvZiBhIFBMTU4gaWRlbnRpdHkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlZCBpbiB0aGUgcmFkaW8gbmV0d29yay4iOw0KICAgICAgICAgICAgICAgICAgICB0eXBlIGludDMyIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlIDAuLjk5OTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBsZWFmIG1uY0xlbmd0aCB7DQogICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICJUaGUgbGVuZ3RoIG9mIHRoZSBNTkMgcGFydCBvZiBhDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBMTU4gaWRlbnRpdHkgdXNlZCBpbiB0aGUgcmFkaW8gbmV0d29yay4iOw0KICAgICAgICAgICAgICAgICAgICB0eXBlIGludDMyIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlIDIuLjM7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICB9DQoNCiAgICBsaXN0IEFudGVubmFDYXBhYmlsaXR5IHsNCiAgICAgICAgZGVzY3JpcHRpb24gIlRoaXMgTU8gc2VydmVzIGFzIGEgbWFwcGluZyBiZXR3ZWVuIHRoZSBjZWxsDQogICAgICAgICAgICAgICAgICAgIGFuZCB0aGUgUkJTIGVxdWlwbWVudCB1c2VkIHRvIHByb3ZpZGUgY292ZXJhZ2UNCiAgICAgICAgICAgICAgICAgICAgaW4gYSBjZXJ0YWluIGdlb2dyYXBoaWNhbCBhcmVhLiBUaGUgTU8gYWxzbw0KICAgICAgICAgICAgICAgICAgICBjb250cm9scyB0aGUgbWF4aW11bSBvdXRwdXQgcG93ZXIgb2YgdGhlIHNlY3Rvci4iOw0KDQogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpUb3BfR3JwX1R5cGU7DQogICAgICAgIGtleSBpZDsNCg0KICAgICAgICBjb250YWluZXIgYXR0cmlidXRlcyB7DQogICAgICAgICAgICBsZWFmLWxpc3QgZVV0cmFuRnFCYW5kcyB7DQogICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIkxpc3Qgb2YgTFRFIGZyZXF1ZW5jeSBiYW5kcw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQgYXNzb2NpYXRlZCBoYXJkd2FyZSBzdXBwb3J0cyI7DQogICAgICAgICAgICAgICAgdHlwZSBzdHJpbmc7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIGxlYWYtbGlzdCBnZXJhbkZxQmFuZHMgew0KICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICJMaXN0IG9mIEdFUkFOIGZyZXF1ZW5jeSBiYW5kcw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQgYXNzb2NpYXRlZCBoYXJkd2FyZSBzdXBwb3J0cyI7DQogICAgICAgICAgICAgICAgdHlwZSBzdHJpbmc7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIGxlYWYtbGlzdCBuUkZxQmFuZHMgew0KICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICJMaXN0IG9mIE5SIGZyZXF1ZW5jeSBiYW5kcw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzc29jaWF0ZWQgaGFyZHdhcmUgc3VwcG9ydHMiOw0KICAgICAgICAgICAgICAgIHR5cGUgc3RyaW5nOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgfQ0KDQogICAgbGlzdCBMVEVTZWN0b3JDYXJyaWVyIHsNCiAgICAgICAgZGVzY3JpcHRpb24gIlRoZSBMVEUgU2VjdG9yIENhcnJpZXIgb2JqZWN0IHByb3ZpZGVzIHRoZQ0KICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzIGZvciBkZWZpbmluZyB0aGUgbG9naWNhbCBjaGFyYWN0ZXJpc3RpY3MNCiAgICAgICAgICAgICAgICAgICAgb2YgYSBjYXJyaWVyIChjZWxsKSBpbiBhIHNlY3Rvci4gQSBzZWN0b3IgaXMgYSBjb3ZlcmFnZQ0KICAgICAgICAgICAgICAgICAgICBhcmVhIGFzc29jaWF0ZWQgd2l0aCBhIGJhc2Ugc3RhdGlvbiBoYXZpbmcNCiAgICAgICAgICAgICAgICAgICAgaXRzIG93biBhbnRlbm5hcywgcmFkaW8gcG9ydHMsIGFuZCBjb250cm9sIGNoYW5uZWxzLg0KICAgICAgICAgICAgICAgICAgICBUaGUgY29uY2VwdCBvZiBzZWN0b3JzIHdhcyBkZXZlbG9wZWQgdG8gaW1wcm92ZSBjby1jaGFubmVsDQogICAgICAgICAgICAgICAgICAgIGludGVyZmVyZW5jZSBpbiBjZWxsdWxhciBzeXN0ZW1zLCBhbmQgbW9zdCB3aXJlbGVzcyBzeXN0ZW1zDQogICAgICAgICAgICAgICAgICAgIHVzZSB0aHJlZSBzZWN0b3IgY2VsbHMuIjsNCg0KICAgICAgICB1c2VzIG9yLXRlaXYtdHlwZXM6VG9wX0dycF9UeXBlOw0KICAgICAgICBrZXkgaWQ7DQoNCiAgICAgICAgY29udGFpbmVyIGF0dHJpYnV0ZXMgew0KICAgICAgICAgICAgbGVhZiBzZWN0b3JDYXJyaWVyVHlwZSB7DQogICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIkluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB0aGUgc2VjdG9yIGNhcnJpZXINCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlbGxlZCBieSBNTyBTZWN0b3JDYXJyaWVyIGlzIGEgZGlnaXRhbCBzZWN0b3IuIjsNCiAgICAgICAgICAgICAgICB0eXBlIGVudW1lcmF0aW9uIHsNCiAgICAgICAgICAgICAgICAgICAgZW51bSBub3JtYWxfc2VjdG9yIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlIDA7DQogICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiAiTm90IGEgZGlnaXRhbCBzZWN0b3IiOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIGVudW0gbGVmdF9kaWdpdGFsX3NlY3RvciB7DQogICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSAxOw0KICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIkxlZnQgZGlnaXRhbCBzZWN0b3IgZm9yIDJEUyI7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgZW51bSByaWdodF9kaWdpdGFsX3NlY3RvciB7DQogICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSAyOw0KICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIlJpZ2h0IGRpZ2l0YWwgc2VjdG9yIGZvciAyRFMiOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIGVudW0gbGVmdF9kaWdpdGFsX3NlY3Rvcl8zZHMgew0KICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgMzsNCiAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICJMZWZ0IGRpZ2l0YWwgc2VjdG9yIGZvciAzRFMiOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIGVudW0gcmlnaHRfZGlnaXRhbF9zZWN0b3JfM2RzIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlIDQ7DQogICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiAiUmlnaHQgZGlnaXRhbCBzZWN0b3IgZm9yIDNEUyI7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgZW51bSBtaWRkbGVfZGlnaXRhbF9zZWN0b3Igew0KICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgNTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICJNaWRkbGUgZGlnaXRhbCBzZWN0b3IgZm9yIDNEUyI7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICB9DQoNCiAgICBsaXN0IE5SU2VjdG9yQ2FycmllciB7DQogICAgICAgIGRlc2NyaXB0aW9uICJUaGUgTlIgU2VjdG9yIENhcnJpZXIgb2JqZWN0IHByb3ZpZGVzDQogICAgICAgICAgICAgICAgICAgIHRoZSBhdHRyaWJ1dGVzIGZvciBkZWZpbmluZyB0aGUgbG9naWNhbA0KICAgICAgICAgICAgICAgICAgICBjaGFyYWN0ZXJpc3RpY3Mgb2YgYSBjYXJyaWVyIChjZWxsKSBpbiBhDQogICAgICAgICAgICAgICAgICAgIHNlY3Rvci4gQSBzZWN0b3IgaXMgYSBjb3ZlcmFnZSBhcmVhIGFzc29jaWF0ZWQNCiAgICAgICAgICAgICAgICAgICAgd2l0aCBhIGJhc2Ugc3RhdGlvbiBoYXZpbmcgaXRzIG93biBhbnRlbm5hcywNCiAgICAgICAgICAgICAgICAgICAgcmFkaW8gcG9ydHMsIGFuZCBjb250cm9sIGNoYW5uZWxzLiBUaGUgY29uY2VwdA0KICAgICAgICAgICAgICAgICAgICBvZiBzZWN0b3JzIHdhcyBkZXZlbG9wZWQgdG8gaW1wcm92ZSBjby1jaGFubmVsDQogICAgICAgICAgICAgICAgICAgIGludGVyZmVyZW5jZSBpbiBjZWxsdWxhciBzeXN0ZW1zLCBhbmQgbW9zdCB3aXJlbGVzcw0KICAgICAgICAgICAgICAgICAgICBzeXN0ZW1zIHVzZSB0aHJlZSBzZWN0b3IgY2VsbHMuIjsNCg0KICAgICAgICB1c2VzIG9yLXRlaXYtdHlwZXM6VG9wX0dycF9UeXBlOw0KICAgICAgICBrZXkgaWQ7DQoNCiAgICAgICAgY29udGFpbmVyIGF0dHJpYnV0ZXMgew0KICAgICAgICAgICAgbGVhZiBhcmZjbkRMIHsNCiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiAiTlIgQWJzb2x1dGUgUmFkaW8gRnJlcXVlbmN5IENoYW5uZWwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBOdW1iZXIgKE5SLUFSRkNOKSBmb3IgZG93bmxpbmsiOw0KICAgICAgICAgICAgICAgIHR5cGUgdWludDMyOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICBsZWFmIGFyZmNuVUwgew0KICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICJOUiBBYnNvbHV0ZSBSYWRpbyBmcmVxdWVuY3kgQ2hhbm5lbCBOdW1iZXINCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoTlItQVJGQ04pIGZvciB1cGxpbmsuIjsNCiAgICAgICAgICAgICAgICB0eXBlIHVpbnQzMjsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgbGVhZiBmcmVxdWVuY3lETCB7DQogICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIlJGIFJlZmVyZW5jZSBGcmVxdWVuY3kgb2YgZG93bmxpbmsgY2hhbm5lbCI7DQogICAgICAgICAgICAgICAgdHlwZSB1aW50MzI7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIGxlYWYgZnJlcXVlbmN5VUwgew0KICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICJSRiBSZWZlcmVuY2UgRnJlcXVlbmN5IG9mIHVwbGluayBjaGFubmVsIjsNCiAgICAgICAgICAgICAgICB0eXBlIHVpbnQzMjsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgIH0NCg0KICAgIG9yLXRlaXYteWV4dDpiaURpcmVjdGlvbmFsVG9wb2xvZ3lSZWxhdGlvbnNoaXAgTFRFU0VDVE9SQ0FSUklFUl9VU0VTX0FOVEVOTkFDQVBBQklMSVRZIHsgLy8gMC4uMSB0byAwLi4xDQoNCiAgICAgICAgdXNlcyBvci10ZWl2LXR5cGVzOlRvcF9HcnBfVHlwZTsNCiAgICAgICAga2V5IGlkOw0KDQogICAgICAgIGxlYWYgdXNlZC1hbnRlbm5hQ2FwYWJpbGl0eSB7DQogICAgICAgICAgICBkZXNjcmlwdGlvbiAiTFRFIFNlY3RvciBDYXJyaWVyIHVzZXMgQW50ZW5uYSBDYXBhYmlsaXR5LiI7DQogICAgICAgICAgICBvci10ZWl2LXlleHQ6YVNpZGUgTFRFU2VjdG9yQ2FycmllcjsNCiAgICAgICAgICAgIHR5cGUgaW5zdGFuY2UtaWRlbnRpZmllcjsNCiAgICAgICAgfQ0KDQogICAgICAgIGxlYWYgdXNlZC1ieS1sdGVTZWN0b3JDYXJyaWVyIHsNCiAgICAgICAgICAgIGRlc2NyaXB0aW9uICJBbnRlbm5hIENwYWJpbGl0eSB1c2VkIGJ5IExURSBTZWN0b3IgQ2Fycmllci4iOw0KICAgICAgICAgICAgb3ItdGVpdi15ZXh0OmJTaWRlIEFudGVubmFDYXBhYmlsaXR5Ow0KICAgICAgICAgICAgdHlwZSBpbnN0YW5jZS1pZGVudGlmaWVyOw0KICAgICAgICB9DQogICAgfQ0KDQogICAgb3ItdGVpdi15ZXh0OmJpRGlyZWN0aW9uYWxUb3BvbG9neVJlbGF0aW9uc2hpcCBFTk9ERUJGVU5DVElPTl9QUk9WSURFU19MVEVTRUNUT1JDQVJSSUVSIHsgLy8gMSB0byAwLi5uDQoNCiAgICAgICAgdXNlcyBvci10ZWl2LXR5cGVzOlRvcF9HcnBfVHlwZTsNCiAgICAgICAga2V5IGlkOw0KDQogICAgICAgIGxlYWYtbGlzdCBwcm92aWRlZC1sdGVTZWN0b3JDYXJyaWVyIHsNCiAgICAgICAgICAgIGRlc2NyaXB0aW9uICJlTm9kZUIgRnVuY3Rpb24gcHJvdmlkZXMgTFRFIFNlY3RvciBDYXJyaWVyLiI7DQogICAgICAgICAgICBvci10ZWl2LXlleHQ6YVNpZGUgRU5vZGVCRnVuY3Rpb247DQogICAgICAgICAgICB0eXBlIGluc3RhbmNlLWlkZW50aWZpZXI7DQogICAgICAgIH0NCg0KICAgICAgICBsZWFmIHByb3ZpZGVkLWJ5LWVub2RlYkZ1bmN0aW9uIHsNCiAgICAgICAgICAgIGRlc2NyaXB0aW9uICJMVEUgU2VjdG9yIENhcnJpZXIgcHJvdmlkZWQgYnkgZU5vZGVCIEZ1bmN0aW9uLiI7DQogICAgICAgICAgICBvci10ZWl2LXlleHQ6YlNpZGUgTFRFU2VjdG9yQ2FycmllcjsNCiAgICAgICAgICAgIHR5cGUgaW5zdGFuY2UtaWRlbnRpZmllcjsNCiAgICAgICAgICAgIG1hbmRhdG9yeSB0cnVlOw0KICAgICAgICB9DQogICAgfQ0KDQogICAgb3ItdGVpdi15ZXh0OmJpRGlyZWN0aW9uYWxUb3BvbG9neVJlbGF0aW9uc2hpcCBOUlNFQ1RPUkNBUlJJRVJfVVNFU19BTlRFTk5BQ0FQQUJJTElUWSB7IC8vIDAuLm4gdG8gMC4uMQ0KDQogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpUb3BfR3JwX1R5cGU7DQogICAgICAgIGtleSBpZDsNCg0KICAgICAgICBsZWFmIHVzZWQtYW50ZW5uYUNhcGFiaWxpdHkgew0KICAgICAgICAgICAgZGVzY3JpcHRpb24gIk5SIFNlY3RvciBDYXJyaWVyIHVzZXMgQW50ZW5uYSBDYXBhYmlsaXR5LiI7DQogICAgICAgICAgICBvci10ZWl2LXlleHQ6YVNpZGUgTlJTZWN0b3JDYXJyaWVyOw0KICAgICAgICAgICAgdHlwZSBpbnN0YW5jZS1pZGVudGlmaWVyOw0KICAgICAgICB9DQoNCiAgICAgICAgbGVhZi1saXN0IHVzZWQtYnktbnJTZWN0b3JDYXJyaWVyIHsNCiAgICAgICAgICAgIGRlc2NyaXB0aW9uICJBbnRlbm5hIENhcGFiaWxpdHkgdXNlZCBieSBOUiBTZWN0b3IgQ2Fycmllci4iOw0KICAgICAgICAgICAgb3ItdGVpdi15ZXh0OmJTaWRlIEFudGVubmFDYXBhYmlsaXR5Ow0KICAgICAgICAgICAgdHlwZSBpbnN0YW5jZS1pZGVudGlmaWVyOw0KICAgICAgICB9DQogICAgfQ0KDQogICAgb3ItdGVpdi15ZXh0OmJpRGlyZWN0aW9uYWxUb3BvbG9neVJlbGF0aW9uc2hpcCBBTlRFTk5BQ0FQQUJJTElUWV9VU0VTX0FOVEVOTkFDQVBBQklMSVRZIHsgLy8gU2FtZSBlbnRpdHkgKDAuLjEgdG8gMC4uMSkNCg0KICAgICAgICB1c2VzIG9yLXRlaXYtdHlwZXM6VG9wX0dycF9UeXBlOw0KICAgICAgICBrZXkgaWQ7DQoNCiAgICAgICAgbGVhZiB1c2VkLWFudGVubmFDYXBhYmlsaXR5IHsNCiAgICAgICAgICAgIGRlc2NyaXB0aW9uICJBbnRlbm5hIENhcGFiaWxpdHkgcmVhbGlzZWQgYnkgQW50ZW5uYSBDYXBhYmlsaXR5LiI7DQogICAgICAgICAgICBvci10ZWl2LXlleHQ6YVNpZGUgQW50ZW5uYUNhcGFiaWxpdHk7DQogICAgICAgICAgICB0eXBlIGluc3RhbmNlLWlkZW50aWZpZXI7DQogICAgICAgIH0NCg0KICAgICAgICBsZWFmIHVzZWQtYnktYW50ZW5uYUNhcGFiaWxpdHkgew0KICAgICAgICAgICAgZGVzY3JpcHRpb24gIkFudGVubmEgQ2FwYWJpbGl0eSByZWFsaXNlcyBBbnRlbm5hIENhcGFiaWxpdHkuIjsNCiAgICAgICAgICAgIG9yLXRlaXYteWV4dDpiU2lkZSBBbnRlbm5hQ2FwYWJpbGl0eTsNCiAgICAgICAgICAgIHR5cGUgaW5zdGFuY2UtaWRlbnRpZmllcjsNCiAgICAgICAgfQ0KICAgIH0NCg0KICAgIG9yLXRlaXYteWV4dDpiaURpcmVjdGlvbmFsVG9wb2xvZ3lSZWxhdGlvbnNoaXAgQU5URU5OQUNBUEFCSUxJVFlfUFJPVklERVNfQU5URU5OQUNBUEFCSUxJVFkgeyAvLyBTYW1lIGVudGl0eSAoMC4uMSB0byAwLi5uKQ0KDQogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpUb3BfR3JwX1R5cGU7DQogICAgICAgIGtleSBpZDsNCg0KICAgICAgICBsZWFmIHByb3ZpZGVkLWFudGVubmFDYXBhYmlsaXR5IHsNCiAgICAgICAgICAgIGRlc2NyaXB0aW9uICJBbnRlbm5hIENhcGFiaWxpdHkgcmVhbGlzZWQgYnkgQW50ZW5uYSBDYXBhYmlsaXR5LiI7DQogICAgICAgICAgICBvci10ZWl2LXlleHQ6YVNpZGUgQW50ZW5uYUNhcGFiaWxpdHk7DQogICAgICAgICAgICB0eXBlIGluc3RhbmNlLWlkZW50aWZpZXI7DQogICAgICAgIH0NCg0KICAgICAgICBsZWFmLWxpc3QgcHJvdmlkZWQtYnktYW50ZW5uYUNhcGFiaWxpdHkgew0KICAgICAgICAgICAgZGVzY3JpcHRpb24gIkFudGVubmEgQ2FwYWJpbGl0eSByZWFsaXNlcyBBbnRlbm5hIENhcGFiaWxpdHkuIjsNCiAgICAgICAgICAgIG9yLXRlaXYteWV4dDpiU2lkZSBBbnRlbm5hQ2FwYWJpbGl0eTsNCiAgICAgICAgICAgIHR5cGUgaW5zdGFuY2UtaWRlbnRpZmllcjsNCiAgICAgICAgfQ0KICAgIH0NCg0KICAgIG9yLXRlaXYteWV4dDpiaURpcmVjdGlvbmFsVG9wb2xvZ3lSZWxhdGlvbnNoaXAgQU5URU5OQUNBUEFCSUxJVFlfU0VSVkVTX0FOVEVOTkFDQVBBQklMSVRZIHsgLy8gU2FtZSBlbnRpdHkgKDAuLm4gdG8gMC4uMSkNCg0KICAgICAgICB1c2VzIG9yLXRlaXYtdHlwZXM6VG9wX0dycF9UeXBlOw0KICAgICAgICBrZXkgaWQ7DQoNCiAgICAgICAgbGVhZi1saXN0IHNlcnZpY2VkLWFudGVubmFDYXBhYmlsaXR5IHsNCiAgICAgICAgICAgIGRlc2NyaXB0aW9uICJBbnRlbm5hIENhcGFiaWxpdHkgcmVhbGlzZWQgYnkgQW50ZW5uYSBDYXBhYmlsaXR5LiI7DQogICAgICAgICAgICBvci10ZWl2LXlleHQ6YVNpZGUgQW50ZW5uYUNhcGFiaWxpdHk7DQogICAgICAgICAgICB0eXBlIGluc3RhbmNlLWlkZW50aWZpZXI7DQogICAgICAgIH0NCg0KICAgICAgICBsZWFmIHNlcnZpY2VkLWJ5LWFudGVubmFDYXBhYmlsaXR5IHsNCiAgICAgICAgICAgIGRlc2NyaXB0aW9uICJBbnRlbm5hIENhcGFiaWxpdHkgcmVhbGlzZXMgQW50ZW5uYSBDYXBhYmlsaXR5LiI7DQogICAgICAgICAgICBvci10ZWl2LXlleHQ6YlNpZGUgQW50ZW5uYUNhcGFiaWxpdHk7DQogICAgICAgICAgICB0eXBlIGluc3RhbmNlLWlkZW50aWZpZXI7DQogICAgICAgIH0NCiAgICB9DQoNCiAgICBvci10ZWl2LXlleHQ6YmlEaXJlY3Rpb25hbFRvcG9sb2d5UmVsYXRpb25zaGlwIEFOVEVOTkFDQVBBQklMSVRZX1JFQUxJU0VEX0JZX0FOVEVOTkFDQVBBQklMSVRZIHsgLy8gU2FtZSBlbnRpdHkgKDAuLm4gdG8gMC4ubSkNCg0KICAgICAgICB1c2VzIG9yLXRlaXYtdHlwZXM6VG9wX0dycF9UeXBlOw0KICAgICAgICBrZXkgaWQ7DQoNCiAgICAgICAgbGVhZi1saXN0IHJlYWxpc2VkLWJ5LWFudGVubmFDYXBhYmlsaXR5IHsNCiAgICAgICAgICAgIGRlc2NyaXB0aW9uICJBbnRlbm5hIENhcGFiaWxpdHkgcmVhbGlzZWQgYnkgQW50ZW5uYSBDYXBhYmlsaXR5LiI7DQogICAgICAgICAgICBvci10ZWl2LXlleHQ6YVNpZGUgQW50ZW5uYUNhcGFiaWxpdHk7DQogICAgICAgICAgICB0eXBlIGluc3RhbmNlLWlkZW50aWZpZXI7DQogICAgICAgIH0NCg0KICAgICAgICBsZWFmLWxpc3QgcmVhbGlzZWQtYW50ZW5uYUNhcGFiaWxpdHkgew0KICAgICAgICAgICAgZGVzY3JpcHRpb24gIkFudGVubmEgQ2FwYWJpbGl0eSByZWFsaXNlcyBBbnRlbm5hIENhcGFiaWxpdHkuIjsNCiAgICAgICAgICAgIG9yLXRlaXYteWV4dDpiU2lkZSBBbnRlbm5hQ2FwYWJpbGl0eTsNCiAgICAgICAgICAgIHR5cGUgaW5zdGFuY2UtaWRlbnRpZmllcjsNCiAgICAgICB9DQogICAgfQ0KfQ==	BUILT_IN_MODULE	IN_USAGE
-o-ran-smo-teiv-equipment	urn:o-ran:smo-teiv-equipment	EQUIPMENT	[]	2024-05-02	bW9kdWxlIG8tcmFuLXNtby10ZWl2LWVxdWlwbWVudCB7DQogICAgeWFuZy12ZXJzaW9uIDEuMTsNCiAgICBuYW1lc3BhY2UgInVybjpvLXJhbjpzbW8tdGVpdi1lcXVpcG1lbnQiOw0KICAgIHByZWZpeCBvci10ZWl2LWVxdWlwOw0KDQogICAgaW1wb3J0IG8tcmFuLXNtby10ZWl2LWNvbW1vbi15YW5nLXR5cGVzIHtwcmVmaXggb3ItdGVpdi10eXBlczsgfQ0KDQogICAgaW1wb3J0IG8tcmFuLXNtby10ZWl2LWNvbW1vbi15YW5nLWV4dGVuc2lvbnMge3ByZWZpeCBvci10ZWl2LXlleHQ7IH0NCg0KICAgIGltcG9ydCBpZXRmLWdlby1sb2NhdGlvbiB7DQogICAgICAgIHByZWZpeCBnZW87DQogICAgICAgIHJlZmVyZW5jZSAiUkZDIDkxNzk6IEEgWUFORyBHcm91cGluZyBmb3IgR2VvZ3JhcGhpYyBMb2NhdGlvbnMiOw0KICAgIH0NCg0KICAgIG9yZ2FuaXphdGlvbiAiRXJpY3Nzb24gQUIiOw0KICAgIGNvbnRhY3QgIkVyaWNzc29uIGZpcnN0IGxpbmUgc3VwcG9ydCB2aWEgZW1haWwiOw0KICAgIGRlc2NyaXB0aW9uDQogICAgIlJBTiBFcXVpcG1lbnQgdG9wb2xvZ3kgbW9kZWwuDQoNCiAgICBDb3B5cmlnaHQgKGMpIDIwMjMgRXJpY3Nzb24gQUIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQoNCiAgICBUaGlzIG1vZGVsIGNvbnRhaW5zIHRoZSB0b3BvbG9neSBlbnRpdGllcyBhbmQgcmVsYXRpb25zIGluIHRoZQ0KICAgIFJBTiBMb2dpY2FsIGRvbWFpbiwgd2hpY2ggcmVwcmVzZW50cyB0aGUgZnVuY3Rpb25hbCBjYXBhYmlsaXR5DQogICAgb2YgdGhlIGRlcGxveWVkIFJBTiB0aGF0IGFyZSByZWxldmFudCB0byByQXBwcyB1c2UgY2FzZXMuIjsNCg0KICAgIHJldmlzaW9uICIyMDI0LTA1LTAyIiB7DQogICAgICAgIGRlc2NyaXB0aW9uICJJbml0aWFsIHJldmlzaW9uLiI7DQogICAgICAgIG9yLXRlaXYteWV4dDpsYWJlbCAwLjMuMDsNCiAgICB9DQoNCiAgICBvci10ZWl2LXlleHQ6ZG9tYWluIEVRVUlQTUVOVDsNCg0KICAgIGxpc3QgQW50ZW5uYU1vZHVsZSB7DQogICAgICAgIGRlc2NyaXB0aW9uICJBbiBBbnRlbm5hIE1vZHVsZSByZXByZXNlbnRzIHRoZQ0KICAgICAgICAgICAgICAgICAgICBwaHlzaWNhbCBhc3BlY3Qgb2YgYW4gYW50ZW5uYS4iOw0KDQogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpUb3BfR3JwX1R5cGU7DQogICAgICAgIGtleSBpZDsNCg0KICAgICAgICBjb250YWluZXIgYXR0cmlidXRlcyB7DQogICAgICAgICAgICBsZWFmIGZkbiB7DQogICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIlRoaXMgRnVsbCBEaXN0aW5ndWlzaGVkIE5hbWUgKEZETikgaWRlbnRpZmllcw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuIGluc3RhbmNlIG9mIHRoZSBBbnRlbm5hU3ViVW5pdCBNTy4gSXQgY29udGFpbnMNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgZnVsbCBwYXRoIGZyb20gdGhlIFN1Ym5ldHdvcmsgdG8gdGhlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgQW50ZW5uYVN1YlVuaXQuIjsNCiAgICAgICAgICAgICAgICB0eXBlIG9yLXRlaXYtdHlwZXM6XzNHUFBfRkROX1R5cGU7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIGxlYWYgYW50ZW5uYU1vZGVsTnVtYmVyIHsNCiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiAiVmVuZG9yLXNwZWNpZmljIGFudGVubmEgbW9kZWwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZGVudGlmaWVyLiBUaGlzIGF0dHJpYnV0ZSBpcyBwYXJ0IG9mDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgQUlTRyB2MyBBREIgU3RhbmRhcmQgYW5kIGhhcw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vIG9wZXJhdGlvbmFsIGltcGFjdC4iOw0KICAgICAgICAgICAgICAgIHR5cGUgc3RyaW5nOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICBsZWFmIG1lY2hhbmljYWxBbnRlbm5hQmVhcmluZyB7DQogICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIkFudGVubmEgYmVhcmluZyBvbiBhbnRlbm5hIHN1YnVuaXQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGVyZSBhbnRlbm5hIHVuaXQgaXMgaW5zdGFsbGVkLiI7DQogICAgICAgICAgICAgICAgdHlwZSB1aW50MzI7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIGxlYWYgbWVjaGFuaWNhbEFudGVubmFUaWx0IHsNCiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiAiVGhlIGZpeGVkIGFudGVubmEgdGlsdCBvZiB0aGUgaW5zdGFsbGF0aW9uLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZWQgYXMgdGhlIGluY2xpbmF0aW9uIG9mIHRoZSBhbnRlbm5hDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudCByZXNwZWN0IHRvIHRoZSB2ZXJ0aWNhbCBwbGFuZS4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBJdCBpcyBhIHNpZ25lZCB2YWx1ZS4gUG9zaXRpdmUgaW5kaWNhdGVzDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZG93bnRpbHQsIGFuZCBuZWdhdGl2ZSBpbmRpY2F0ZXMgdXB0aWx0LiI7DQogICAgICAgICAgICAgICAgdHlwZSB1aW50MzI7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIGxlYWYgcG9zaXRpb25XaXRoaW5TZWN0b3Igew0KICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICJBbnRlbm5hIHVuaXQgcG9zaXRpb24gd2l0aGluIHNlY3Rvci4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGF0dHJpYnV0ZSBpcyBwYXJ0IG9mIEFJU0cgdjMgQURCDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhbmRhcmQgYW5kIGhhcyBubyBvcGVyYXRpb25hbCBpbXBhY3QuIjsNCiAgICAgICAgICAgICAgICB0eXBlIHN0cmluZzsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgbGVhZiB0b3RhbFRpbHQgew0KICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICJUb3RhbCBhbnRlbm5hIGVsZXZhdGlvbiBpbmNsdWRpbmcgdGhlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFsbGVkIHRpbHQgYW5kIHRoZSB0aWx0IGFwcGxpZWQgYnkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgUmVtb3RlIEVsZWN0cmljYWwgVGlsdCAoUkVUKS4iOw0KICAgICAgICAgICAgICAgIHR5cGUgdWludDMyOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICBsZWFmIGVsZWN0cmljYWxBbnRlbm5hVGlsdCB7DQogICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIkVsZWN0cmljYWxseS1jb250cm9sbGVkIHRpbHQgb2YgbWFpbiBiZWFtIG1heGltdW0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIHJlc3BlY3QgdG8gZGlyZWN0aW9uIG9ydGhvZ29uYWwgdG8gYW50ZW5uYQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQgYXhpcyAoc2VlIDNHUFAgVFMgMjUuNDY2KS4gVmFsdWUgaXMgc2lnbmVkOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbHQgZG93biBpcyBwb3NpdGl2ZSwgdGlsdCB1cCBpcyBuZWdhdGl2ZS4iOw0KICAgICAgICAgICAgICAgIHR5cGUgdWludDMyOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICBsZWFmLWxpc3QgQW50ZW5uYUJlYW1XaWR0aCB7DQogICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIlRoZSBhbmd1bGFyIHNwYW4gb2YgdGhlIG1haW4gbG9iZSBvZiB0aGUgYW50ZW5uYSByYWRpYXRpb24NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXR0ZXJuIGluIHRoZSBob3Jpem9udGFsIHBsYW5lLiBNZWFzdXJlZCBpbiBkZWdyZWVzLiI7DQogICAgICAgICAgICAgICAgdHlwZSB1aW50MzI7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIGxlYWYgZHVwbGV4VHlwZSB7DQogICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIkluZGljYXRvciBvZiBFVXRyYW5DZWxsIHR5cGUsIEZERCBvciBUREQiOw0KICAgICAgICAgICAgICAgIHR5cGUgZW51bWVyYXRpb24gew0KICAgICAgICAgICAgICAgICAgICBlbnVtIHR5cGUxIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlIDA7DQogICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiAidHlwZTEiOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgfQ0KDQogICAgb3ItdGVpdi15ZXh0OmJpRGlyZWN0aW9uYWxUb3BvbG9neVJlbGF0aW9uc2hpcCBBTlRFTk5BTU9EVUxFX1VTRVNfQU5URU5OQU1PRFVMRSB7IC8vIFNhbWUgZW50aXR5ICgwLi4xIHRvIDAuLjEpDQoNCiAgICAgICAgdXNlcyBvci10ZWl2LXR5cGVzOlRvcF9HcnBfVHlwZTsNCiAgICAgICAga2V5IGlkOw0KDQogICAgICAgIGxlYWYtbGlzdCB1c2VkLWJ5LWFudGVubmFNb2R1bGUgew0KICAgICAgICAgICAgZGVzY3JpcHRpb24gIkFudGVubmEgTW9kdWxlIHJlYWxpc2VkIGJ5IEFudGVubmEgTW9kdWxlLiI7DQogICAgICAgICAgICBvci10ZWl2LXlleHQ6YVNpZGUgQW50ZW5uYU1vZHVsZTsNCiAgICAgICAgICAgIHR5cGUgaW5zdGFuY2UtaWRlbnRpZmllcjsNCiAgICAgICB9DQoNCiAgICAgICAgbGVhZi1saXN0IHVzZWQtYW50ZW5uYU1vZHVsZSB7DQogICAgICAgICAgICBkZXNjcmlwdGlvbiAiQW50ZW5uYSBNb2R1bGUgcmVhbGlzZXMgQW50ZW5uYSBNb2R1bGUuIjsNCiAgICAgICAgICAgIG9yLXRlaXYteWV4dDpiU2lkZSBBbnRlbm5hTW9kdWxlOw0KICAgICAgICAgICAgdHlwZSBpbnN0YW5jZS1pZGVudGlmaWVyOw0KICAgICAgIH0NCiAgICB9DQp9	BUILT_IN_MODULE	IN_USAGE
-o-ran-smo-teiv-cloud	urn:o-ran:smo-teiv-cloud	CLOUD	[]	2024-05-02	bW9kdWxlIG8tcmFuLXNtby10ZWl2LWNsb3VkIHsNCiAgICB5YW5nLXZlcnNpb24gMS4xOw0KICAgIG5hbWVzcGFjZSAidXJuOm8tcmFuOnNtby10ZWl2LWNsb3VkIjsNCiAgICBwcmVmaXggb3ItdGVpdi1jbG91ZDsNCg0KICAgIGltcG9ydCBvLXJhbi1zbW8tdGVpdi1jb21tb24teWFuZy10eXBlcyB7cHJlZml4IG9yLXRlaXYtdHlwZXM7IH0NCg0KICAgIGltcG9ydCBvLXJhbi1zbW8tdGVpdi1jb21tb24teWFuZy1leHRlbnNpb25zIHtwcmVmaXggb3ItdGVpdi15ZXh0OyB9DQoNCiAgICBpbXBvcnQgaWV0Zi1nZW8tbG9jYXRpb24gew0KICAgICAgICBwcmVmaXggZ2VvOw0KICAgICAgICByZWZlcmVuY2UgIlJGQyA5MTc5OiBBIFlBTkcgR3JvdXBpbmcgZm9yIEdlb2dyYXBoaWMgTG9jYXRpb25zIjsNCiAgICB9DQoNCiAgICBvcmdhbml6YXRpb24gIkVyaWNzc29uIEFCIjsNCiAgICBjb250YWN0ICJFcmljc3NvbiBmaXJzdCBsaW5lIHN1cHBvcnQgdmlhIGVtYWlsIjsNCiAgICBkZXNjcmlwdGlvbg0KICAgICJSQU4gQ2xvdWQgdG9wb2xvZ3kgbW9kZWwuDQoNCiAgICBDb3B5cmlnaHQgKGMpIDIwMjMgRXJpY3Nzb24gQUIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQoNCiAgICBUaGlzIG1vZGVsIGNvbnRhaW5zIHRoZSB0b3BvbG9neSBlbnRpdGllcyBhbmQgcmVsYXRpb25zIGluIHRoZQ0KICAgIFJBTiBDTE9VRCBkb21haW4sIHdoaWNoIGNvbXByaXNlcyBjbG91ZCBpbmZyYXN0cnVjdHVyZSBhbmQNCiAgICBkZXBsb3ltZW50IGFzcGVjdHMgdGhhdCBjYW4gYmUgdXNlZCBpbiB0aGUgdG9wb2xvZ3kgbW9kZWwuIjsNCg0KICAgIHJldmlzaW9uICIyMDI0LTA1LTAyIiB7DQogICAgICAgIGRlc2NyaXB0aW9uICJJbml0aWFsIHJldmlzaW9uLiI7DQogICAgICAgIG9yLXRlaXYteWV4dDpsYWJlbCAwLjMuMDsNCiAgICB9DQoNCiAgICBvci10ZWl2LXlleHQ6ZG9tYWluIENMT1VEOw0KDQogICAgbGlzdCBDbG91ZFNpdGUgew0KICAgICAgICBkZXNjcmlwdGlvbiAiUmVwcmVzZW50cyB0aGUgaW5mcmFzdHJ1Y3R1cmUgdGhhdA0KICAgICAgICAgICAgICAgICAgICBob3N0cyB0aGUgTkYgRGVwbG95bWVudC4iOw0KDQogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpUb3BfR3JwX1R5cGU7DQogICAgICAgIGtleSBpZDsNCg0KICAgICAgICBjb250YWluZXIgYXR0cmlidXRlcyB7DQogICAgICAgICAgICBsZWFmIG5hbWUgew0KICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICJOYW1lIG9mIENsb3VkIFNpdGUiOw0KICAgICAgICAgICAgICAgIHR5cGUgc3RyaW5nOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICB1c2VzIGdlbzpnZW8tbG9jYXRpb247DQogICAgICAgIH0NCiAgICB9DQp9	BUILT_IN_MODULE	IN_USAGE
-o-ran-smo-teiv-equipment-to-ran	urn:o-ran:smo-teiv-equipment-to-ran	EQUIPMENT_TO_RAN	["o-ran-smo-teiv-equipment", "o-ran-smo-teiv-ran"]	2024-05-02	bW9kdWxlIG8tcmFuLXNtby10ZWl2LWVxdWlwbWVudC10by1yYW4gew0KICAgIHlhbmctdmVyc2lvbiAxLjE7DQogICAgbmFtZXNwYWNlICJ1cm46by1yYW46c21vLXRlaXYtZXF1aXBtZW50LXRvLXJhbiI7DQogICAgcHJlZml4IG9yLXRlaXYtZXF1aXB0b3JhbjsNCg0KICAgIGltcG9ydCBvLXJhbi1zbW8tdGVpdi1jb21tb24teWFuZy10eXBlcyB7cHJlZml4IG9yLXRlaXYtdHlwZXM7IH0NCg0KICAgIGltcG9ydCBvLXJhbi1zbW8tdGVpdi1jb21tb24teWFuZy1leHRlbnNpb25zIHtwcmVmaXggb3ItdGVpdi15ZXh0OyB9DQoNCiAgICBpbXBvcnQgby1yYW4tc21vLXRlaXYtZXF1aXBtZW50IHtwcmVmaXggb3ItdGVpdi1lcXVpcDsgfQ0KDQogICAgaW1wb3J0IG8tcmFuLXNtby10ZWl2LXJhbiB7cHJlZml4IG9yLXRlaXYtcmFuOyB9DQoNCiAgICBvcmdhbml6YXRpb24gIkVyaWNzc29uIEFCIjsNCiAgICBjb250YWN0ICJFcmljc3NvbiBmaXJzdCBsaW5lIHN1cHBvcnQgdmlhIGVtYWlsIjsNCiAgICBkZXNjcmlwdGlvbg0KICAgICJSQU4gTG9naWNhbCB0byBFcXVpcG1lbnQgdG9wb2xvZ3kgbW9kZWwuDQoNCiAgICBDb3B5cmlnaHQgKGMpIDIwMjMgRXJpY3Nzb24gQUIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQoNCiAgICBUaGlzIG1vZGVsIGNvbnRhaW5zIHRoZSBSQU4gTG9naWNhbCB0byBFcXVpcG1lbnQgdG9wb2xvZ3kNCiAgICBlbnRpdGllcyBhbmQgcmVsYXRpb25zLiI7DQoNCiAgICByZXZpc2lvbiAiMjAyNC0wNS0wMiIgew0KICAgICAgICBkZXNjcmlwdGlvbiAiSW5pdGlhbCByZXZpc2lvbi4iOw0KICAgICAgICBvci10ZWl2LXlleHQ6bGFiZWwgMC4zLjA7DQogICAgfQ0KDQogICAgb3ItdGVpdi15ZXh0OmRvbWFpbiBFUVVJUE1FTlRfVE9fUkFOOw0KDQogICAgb3ItdGVpdi15ZXh0OmJpRGlyZWN0aW9uYWxUb3BvbG9neVJlbGF0aW9uc2hpcCBBTlRFTk5BTU9EVUxFX1NFUlZFU19BTlRFTk5BQ0FQQUJJTElUWSB7IC8vIDAuLm4gdG8gMC4ubQ0KDQogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpUb3BfR3JwX1R5cGU7DQogICAgICAgIGtleSBpZDsNCg0KICAgICAgICBsZWFmLWxpc3Qgc2VydmljZWQtYW50ZW5uYUNhcGFiaWxpdHkgew0KICAgICAgICAgICAgZGVzY3JpcHRpb24gIkFudGVubmEgQ2FwYWJpbGl0eSBzZXJ2aWNlZCBieSB0aGlzIEFudGVubmEgTW9kdWxlLiI7DQogICAgICAgICAgICBvci10ZWl2LXlleHQ6YVNpZGUgb3ItdGVpdi1lcXVpcDpBbnRlbm5hTW9kdWxlOw0KICAgICAgICAgICAgdHlwZSBpbnN0YW5jZS1pZGVudGlmaWVyOw0KICAgICAgICB9DQoNCiAgICAgICAgbGVhZi1saXN0IHNlcnZpbmctYW50ZW5uYU1vZHVsZSB7DQogICAgICAgICAgICBkZXNjcmlwdGlvbiAiQW50ZW5uYSBNb2R1bGUgc2VydmVzIHRoaXMgQW50ZW5uYSBDYXBhYmlsaXR5LiI7DQogICAgICAgICAgICBvci10ZWl2LXlleHQ6YlNpZGUgb3ItdGVpdi1yYW46QW50ZW5uYUNhcGFiaWxpdHk7DQogICAgICAgICAgICB0eXBlIGluc3RhbmNlLWlkZW50aWZpZXI7DQogICAgICAgIH0NCiAgICB9DQp9DQo=	BUILT_IN_MODULE	IN_USAGE
+COPY ties_model.module_reference("name", "namespace", "domain", "includedModules", "revision", "content") FROM stdin;
+_3gpp-common-yang-types	urn:3gpp:sa5:_3gpp-common-yang-types	\N	[]	2023-11-06	bW9kdWxlIF8zZ3BwLWNvbW1vbi15YW5nLXR5cGVzIHsKICB5YW5nLXZlcnNpb24gMS4xOwogIG5hbWVzcGFjZSAidXJuOjNncHA6c2E1Ol8zZ3BwLWNvbW1vbi15YW5nLXR5cGVzIjsKICBwcmVmaXggInR5cGVzM2dwcCI7CgogIGltcG9ydCBpZXRmLWluZXQtdHlwZXMgeyBwcmVmaXggaW5ldDsgfQogIGltcG9ydCBpZXRmLXlhbmctdHlwZXMgeyBwcmVmaXggeWFuZzsgfQogIGltcG9ydCBfM2dwcC1jb21tb24teWFuZy1leHRlbnNpb25zIHsgcHJlZml4IHlleHQzZ3BwOyB9CgogIG9yZ2FuaXphdGlvbiAiM0dQUCBTQTUiOwogIGNvbnRhY3QgImh0dHBzOi8vd3d3LjNncHAub3JnL0R5bmFSZXBvcnQvVFNHLVdHLS1TNS0tb2ZmaWNpYWxzLmh0bT9JdGVtaWQ9NDY0IjsKICBkZXNjcmlwdGlvbiAiVGhlIG1vZGVsIGRlZmluZXMgYSBZQU5HIG1hcHBpbmcgb2YgdGhlIHRvcCBsZXZlbAogICAgaW5mb3JtYXRpb24gY2xhc3NlcyB1c2VkIGZvciBtYW5hZ2VtZW50IG9mIDVHIG5ldHdvcmtzIGFuZAogICAgbmV0d29yayBzbGljaW5nLgogICAgQ29weXJpZ2h0IDIwMjMsIDNHUFAgT3JnYW5pemF0aW9uYWwgUGFydG5lcnMgKEFSSUIsIEFUSVMsIENDU0EsIEVUU0ksIFRTRFNJLAogICAgVFRBLCBUVEMpLiBBbGwgcmlnaHRzIHJlc2VydmVkLiI7CiAgcmVmZXJlbmNlICIzR1BQIFRTIDI4LjYyMyI7CgogIHJldmlzaW9uIDIwMjMtMTEtMDYgeyByZWZlcmVuY2UgQ1ItMDMwNTsgfQogIHJldmlzaW9uIDIwMjMtMDktMTggeyByZWZlcmVuY2UgQ1ItMDI3MSA7IH0KICByZXZpc2lvbiAyMDIzLTA4LTA5IHsgcmVmZXJlbmNlIENSLTAyNjY7IH0KICByZXZpc2lvbiAyMDIzLTA1LTEwIHsgcmVmZXJlbmNlIENSLTAyNTA7IH0KICByZXZpc2lvbiAyMDIzLTAyLTE0IHsgcmVmZXJlbmNlIENSLTAyMzQ7IH0KICByZXZpc2lvbiAyMDIyLTExLTA0IHsgcmVmZXJlbmNlICJDUi0wMTk0IjsgfQogIHJldmlzaW9uIDIwMjItMTAtMjQgeyByZWZlcmVuY2UgQ1ItMDE5NjsgIH0KICByZXZpc2lvbiAyMDIyLTA3LTI2IHsgcmVmZXJlbmNlICJDUi0wMTgwIiA7IH0KICByZXZpc2lvbiAyMDIyLTAyLTA5IHsgcmVmZXJlbmNlICJDUi0wMTQ0IjsgfQogIHJldmlzaW9uIDIwMjEtMTEtMDEgeyByZWZlcmVuY2UgIkNSLTAxNDEiOyB9CgogIHJldmlzaW9uIDIwMjEtMDktMzAgewogICAgZGVzY3JpcHRpb24gIkFkZGVkIExvbmdpdHVkZSwgTGF0aXR1ZGUsIFRlbnRoT2ZEZWdyZWVzLCBPbk9mZi4iOwogICAgcmVmZXJlbmNlICJDUi0wMTM4IjsKICB9CgogIHJldmlzaW9uIDIwMjAtMTEtMDYgewogICAgZGVzY3JpcHRpb24gIlJlbW92ZWQgaW5jb3JyZWN0IFMtTlNTQUkgZGVmaW5pdGlvbnMuIjsKICAgIHJlZmVyZW5jZSAiQ1ItMDExOCI7CiAgfQoKICByZXZpc2lvbiAyMDIwLTAzLTEwIHsKICAgIGRlc2NyaXB0aW9uICJSZW1vdmVkIGZhdWx0eSB3aGVuIHN0YXRlbWVudHMuIjsKICAgIHJlZmVyZW5jZSAiU1AtMjAwMjI5IjsKICB9CgogIHJldmlzaW9uIDIwMTktMTAtMjUgewogICAgZGVzY3JpcHRpb24gIkFkZGVkIE1hbmFnZWRORlByb2ZpbGUuIjsKICAgIHJlZmVyZW5jZSAiUzUtMTk0NDU3IjsKICB9CgogIHJldmlzaW9uIDIwMTktMTAtMTYgewogICAgZGVzY3JpcHRpb24gIkFkZGVkIFNBUCBhbmQgdXNhZ2VTdGF0ZS4iOwogICAgcmVmZXJlbmNlICJTNS0xOTM1MTgiOwogIH0KCiAgcmV2aXNpb24gMjAxOS0wNi0yMyB7CiAgICByZWZlcmVuY2UgICJJbml0aWFsIHZlcnNpb24uIjsKICB9CgogIHR5cGVkZWYgRW5hYmxlZERpc2FibGVkIHsKICAgIHR5cGUgZW51bWVyYXRpb24gewogICAgICBlbnVtIERJU0FCTEVEIDsKICAgICAgZW51bSBFTkFCTEVEIDsKICAgIH0KICB9CgogIGdyb3VwaW5nIG5hbWVWYWx1ZVBhaXIgewogICAgbGVhZiBuYW1lIHsgdHlwZSBzdHJpbmc7IH0KICAgIGxlYWYgdmFsdWUgeyB0eXBlIHN0cmluZzsgfQogIH0KCiAgZ3JvdXBpbmcgUHJvY2Vzc01vbml0b3JHcnAgewogICAgZGVzY3JpcHRpb24gIlByb3ZpZGVzIGF0dHJpYnV0ZXMgdG8gbW9uaXRvciB0aGUgcHJvZ3Jlc3Mgb2YgcHJvY2Vzc2VzCiAgICAgIHdpdGggc3BlY2lmaWMgcHVycG9zZSBhbmQgbGltaXRlZCBsaWZldGltZSBydW5uaW5nIG9uIE1uUyBwcm9kdWNlcnMuCiAgICAgIEl0IG1heSBiZSB1c2VkIGFzIGRhdGEgdHlwZSBmb3IgZGVkaWNhdGVkIHByb2dyZXNzIG1vbml0b3IgYXR0cmlidXRlcwogICAgICB3aGVuIHNwZWNpZnlpbmcgdGhlIG1hbmFnZW1lbnQgcmVwcmVzZW50YXRpb24gb2YgdGhlc2UgcHJvY2Vzc2VzLgogICAgICBUaGUgYXR0cmlidXRlcyBpbiB0aGlzIGNsYXVzZSBhcmUgZGVmaW5lZCBpbiBhIGdlbmVyaWMgd2F5LgogICAgICBGb3Igc29tZSBhdHRyaWJ1dGVzIHNwZWNpYWxpc2F0aW9ucyBtYXkgYmUgcHJvdmlkZWQgd2hlbiBzcGVjaWZ5aW5nIGEKICAgICAgY29uY3JldGUgcHJvY2VzcyByZXByZXNlbnRhdGlvbi4KCiAgICAgIElmIGEgbWFuYWdlbWVudCBvcGVyYXRpb24gb24gc29tZSBJT0NzIHRyaWdnZXJzIGFuIGFzc29jaWF0ZWQKICAgICAgYXN5bmNocm9ub3VzIHByb2Nlc3MgKHdob3NlIHByb2dyZXNzIHNoYWxsIGJlIG1vbml0b3JlZCksIHRoaXMgc2hvdWxkCiAgICAgIGFsc28gcmVzdWx0IGluIGNyZWF0aW5nIGFuIGF0dHJpYnV0ZSBuYW1lZCAncHJvY2Vzc01vbml0b3InIChvZiB0eXBlCiAgICAgICdQcm9jZXNzTW9uaXRvcicpIGluIHRoZXNlIElPQyhzKS4gVGhlIHByb2Nlc3NNb25pdG9yIGF0dHJpYnV0ZSBtYXkgYmUKICAgICAgYWNjb21wYW5pZWQgYnkgdXNlLWNhc2Ugc3BlY2lmaWMgYWRkaXRpb25hbCBkYXRhIGl0ZW1zLgoKICAgICAgVGhlIHByb2dyZXNzIG9mIHRoZSBwcm9jZXNzIGlzIGRlc2NyaWJlZCBieSB0aGUgJ3N0YXR1cycgYW5kCiAgICAgICdwcm9ncmVzc1BlcmNlbnRhZ2UnIGF0dHJpYnV0ZXMuIEFkZGl0aW9uYWwgdGV4dHVhbCBxdWFsaWZpY2F0aW9ucyBmb3IKICAgICAgdGhlICdzdGF0dXMnIGF0dHJpYnV0ZSBtYXkgYmUgcHJvdmlkZWQgYnkgdGhlICdwcm9ncmVzc1N0YXRlSW5mbycgYW5kCiAgICAgICdyZXN1bHRTdGF0ZUluZm8nIGF0dHJpYnV0ZXMuCgogICAgICBXaGVuIHRoZSBwcm9jZXNzIGlzIGluc3RhbnRpYXRlZCwgdGhlICdzdGF0dXMnIGlzIHNldCB0byAnTk9UX1JVTk5JTkcnCiAgICAgIGFuZCB0aGUgJ3Byb2dyZXNzUGVyY2VudGFnZScgdG8gJzAnLiBUaGUgTW5TIHByb2R1Y2VyIGRlY2lkZXMgd2hlbiB0bwogICAgICBzdGFydCBleGVjdXRpbmcgdGhlIHByb2Nlc3MgYW5kIHRvIHRyYW5zaXRpb24gaW50byB0aGUgJ1JVTk5JTkcnIHN0YXRlLgogICAgICBUaGlzIHRpbWUgaXMgY2FwdHVyZWQgaW4gdGhlICdzdGFydFRpbWUnIGF0dHJpYnV0ZS4gQWx0ZXJuYXRpdmVseSwgdGhlCiAgICAgIHByb2Nlc3MgbWF5IHN0YXJ0IHRvIGV4ZWN1dGUgZGlyZWN0bHkgdXBvbiBpdHMgaW5zdGFudGlhdGlvbi4gT25lCiAgICAgIGFsdGVybmF0aXZlIG11c3QgYmUgc2VsZWN0ZWQgd2hlbiB1c2luZyB0aGlzIGRhdGEgdHlwZS4KCiAgICAgIER1cmluZyB0aGUgJ1JVTk5JTkcnIHN0YXRlIHRoZSAncHJvZ3Jlc3NQZXJjZW50YWdlJyBhdHRyaWJ1dGUgbWF5IGJlCiAgICAgIHJlcGVhdGVkbHkgdXBkYXRlZC4gVGhlIGV4YWN0IHNlbWFudGljIG9mIHRoaXMgYXR0cmlidXRlIGlzIHN1YmplY3QgdG8KICAgICAgZnVydGhlciBzcGVjaWFsaXNhdGlvbi4gVGhlICdwcm9ncmVzc0luZm8nIGF0dHJpYnV0ZSBtYXkgYmUgdXNlZCB0bwogICAgICBwcm92aWRlIGFkZGl0aW9uYWwgdGV4dHVhbCBpbmZvcm1hdGlvbiBpbiB0aGUgJ05PVF9SVU5OSU5HJywgJ0NBTkNFTExJTkcnCiAgICAgIGFuZCAnUlVOTklORycgc3RhdGVzLiBGdXJ0aGVyIHNwZWNpYWxpc2F0aW9uIG9mCiAgICAgICdwcm9ncmVzc1N0YXRlSW5mbycgbWF5IGJlIHByb3ZpZGVkIHdoZXJlIHRoaXMgZGF0YSB0eXBlIGlzCiAgICAgIHVzZWQuCgogICAgICBVcG9uIHN1Y2Nlc3NmdWwgY29tcGxldGlvbiBvZiB0aGUgcHJvY2VzcywgdGhlICdzdGF0dXMnIGF0dHJpYnV0ZSBpcyBzZXQKICAgICAgdG8gJ0ZJTklTSEVEJywgdGhlICdwcm9ncmVzc1BlcmNlbnRhZ2UnIHRvIDEwMCUuIFRoZSB0aW1lIGlzIGNhcHR1cmVkIGluCiAgICAgIHRoZSAnZW5kVGltZScgYXR0cmlidXRlLiBBZGRpdGlvbmFsIHRleHR1YWwgaW5mb3JtYXRpb24gbWF5IGJlIHByb3ZpZGVkCiAgICAgIGluIHRoZSAncmVzdWx0U3RhdGVJbmZvJyBhdHRyaWJ1dGUuIFRoZSB0eXBlIG9mCiAgICAgICdyZXN1bHRTdGF0ZUluZm8nIGluIHRoaXMgZGF0YSB0eXBlIGRlZmluaXRpb24gaXMgJ1N0cmluZycuCiAgICAgIEZ1cnRoZXIgc3BlY2lhbGlzYXRpb24gb2YgJ3Jlc3VsdFN0YXRlSW5mbycgbWF5IGJlIHByb3ZpZGVkCiAgICAgIHdoZXJlIHRoaXMgZGF0YSB0eXBlIGlzIHVzZWQuCgogICAgICBJbiBjYXNlIHRoZSBwcm9jZXNzIGZhaWxzIHRvIGNvbXBsZXRlIHN1Y2Nlc3NmdWxseSwgdGhlICdzdGF0dXMnCiAgICAgIGF0dHJpYnV0ZSBpcyBzZXQgdG8gJ0ZBSUxFRCcgb3IgJ1BBUlRJQUxMWV9GQUlMRUQnLCB0aGUgY3VycmVudCB2YWx1ZSBvZgogICAgICAncHJvZ3Jlc3NQZXJjZW50YWdlJyBpcyBmcm96ZW4sIGFuZCB0aGUgdGltZSBjYXB0dXJlZCBpbiAnZW5kVGltZScuIFRoZQogICAgICAncmVzdWx0U3RhdGVJbmZvJyBzcGVjaWZpZXMgdGhlIHJlYXNvbiBmb3IgdGhlIGZhaWx1cmUuCiAgICAgIFNwZWNpZmljIGZhaWx1cmUgcmVhc29ucyBtYXkgYmUgc3BlY2lmaWVkIHdoZXJlIHRoZSBkYXRhIHR5cGUgZGVmaW5lZCBpbgogICAgICB0aGlzIGNsYXVzZSBpcyB1c2VkLiBUaGUgZXhhY3Qgc2VtYW50aWMgb2YgZmFpbHVyZSBtYXkgYmUgc3ViamVjdCBmb3IKICAgICAgZnVydGhlciBzcGVjaWFsaXNhdGlvbiBhcyB3ZWxsLgoKICAgICAgSW4gY2FzZSB0aGUgcHJvY2VzcyBpcyBjYW5jZWxsZWQsIHRoZSAnc3RhdHVzJyBhdHRyaWJ1dGUgaXMgZmlyc3Qgc2V0IHRvCiAgICAgICdDQU5DRUxMSU5HJyBhbmQgd2hlbiB0aGUgcHJvY2VzcyBpcyByZWFsbHkgY2FuY2VsbGVkIHRoZW4gdG8gJ0NBTkNFTExFRCcuCiAgICAgIFRoZSB0cmFuc2l0aW9uIHRvICdDQU5DRUxMRUQnIGlzIGNhcHR1cmVkIGluIHRoZSAnZW5kVGltZScgYXR0cmlidXRlLgogICAgICBUaGUgdmFsdWUgb2YgJ3Byb2dyZXNzUGVyY2VudGFnZScgaXMgZnJvemVuLiBBZGRpdGlvbmFsIHRleHR1YWwKICAgICAgaW5mb3JtYXRpb24gbWF5IGJlIHByb3ZpZGVkIGluIHRoZSAncmVzdWx0U3RhdGVJbmZvJyBhdHRyaWJ1dGUuCgogICAgICBUaGUgJ3Jlc3VsdFN0YXRlSW5mbycgYXR0cmlidXRlIGlzIHByb3ZpZGVkIG9ubHkgZm9yIGFkZGl0aW9uYWwgdGV4dHVhbAogICAgICBxdWFsaWZpY2F0aW9uIG9mIHRoZSBzdGF0ZXMgJ0ZJTklTSEVEJywgJ0ZBSUxFRCcsICdQQVJUSUFMTFlfRkFJTEVEJyBvcgogICAgICAnQ0FOQ0VMTEVEJy4gSXQgc2hhbGwgbm90IGJlIHVzZWQgZm9yIG1ha2luZyB0aGUgb3V0Y29tZSwgdGhhdCB0aGUKICAgICAgcHJvY2VzcyBtYXkgcHJvZHVjZSBpbiBjYXNlIG9mIHN1Y2Nlc3MsIGF2YWlsYWJsZS4KCiAgICAgIFRoZSBwcm9jZXNzIG1heSBoYXZlIHRvIGJlIGNvbXBsZXRlZCB3aXRoaW4gYSBjZXJ0YWluIHRpbWUgYWZ0ZXIgaXRzCiAgICAgIGNyZWF0aW9uLCBmb3IgZXhhbXBsZSBiZWNhdXNlIHJlcXVpcmVkIGRhdGEgbWF5IG5vdCBiZSBhdmFpbGFibGUgYW55CiAgICAgIG1vcmUgYWZ0ZXIgYSBjZXJ0YWluIHRpbWUsIG9yIHRoZSBwcm9jZXNzIG91dGNvbWUgaXMgbmVlZGVkIHVudGlsIGEKICAgICAgY2VydGFpbiB0aW1lIGFuZCB3aGVuIG5vdCBwcm92aWRlZCBieSB0aGlzIHRpbWUgaXMgbm90IG5lZWRlZCBhbnkgbW9yZS4KICAgICAgVGhlIHRpbWUgdW50aWwgdGhlIE1uUyBwcm9kdWNlciBhdXRvbWF0aWNhbGx5IGNhbmNlbHMgdGhlIHByb2Nlc3MgaXMKICAgICAgaW5kaWNhdGVkIGJ5IHRoZSAndGltZXInIGF0dHJpYnV0ZS4iOwoKICAgIGxlYWYgaWQgewogICAgICB0eXBlIHN0cmluZzsKICAgICAgbWFuZGF0b3J5IHRydWU7CiAgICAgIGRlc2NyaXB0aW9uICJJZCBvZiB0aGUgcHJvY2Vzcy4gSXQgaXMgdW5pcXVlIHdpdGhpbiBhIHNpbmdsZQogICAgICAgIG11bHRpdmFsdWUgYXR0cmlidXRlIG9mIHR5cGUgUHJvY2Vzc01vbml0b3IuIjsKICAgIH0KCiAgICBsZWFmIHN0YXR1cyB7CiAgICAgIHR5cGUgZW51bWVyYXRpb24gewogICAgICAgIGVudW0gTk9UX1NUQVJURUQgOwogICAgICAgIGVudW0gUlVOTklORyA7CiAgICAgICAgZW51bSBDQU5DRUxMSU5HIDsKICAgICAgICBlbnVtIEZJTklTSEVEIDsKICAgICAgICBlbnVtIEZBSUxFRCA7CiAgICAgICAgZW51bSBQQVJUSUFMTFlfRkFJTEVEIDsKICAgICAgICBlbnVtIENBTkNFTExFRCA7CiAgICAgIH0KICAgICAgY29uZmlnIGZhbHNlOwogICAgICBkZWZhdWx0ICBSVU5OSU5HOwogICAgICBkZXNjcmlwdGlvbiAiUmVwcmVzZW50cyB0aGUgc3RhdHVzIG9mIHRoZSBhc3NvY2lhdGVkIHByb2Nlc3MsCiAgICAgICAgd2hldGhlciBpdCBmYWlscywgc3VjY2VlZHMgZXRjLgogICAgICAgIEl0IGRvZXMgbm90IHJlcHJlc2VudCB0aGUgcmV0dXJuZWQgdmFsdWVzIG9mIGEgc3VjY2Vzc2Z1bGx5IGZpbmlzaGVkCiAgICAgICAgcHJvY2Vzcy4gIjsKICAgIH0KCiAgICBsZWFmIHByb2dyZXNzUGVyY2VudGFnZSB7CiAgICAgIHR5cGUgdWludDggewogICAgICAgIHJhbmdlIDAuLjEwMDsKICAgICAgfQogICAgICBjb25maWcgZmFsc2U7CiAgICAgIGRlc2NyaXB0aW9uICJQcm9ncmVzcyBvZiB0aGUgYXNzb2NpYXRlZCBwcm9jZXNzIGFzIHBlcmNlbnRhZ2UiOwogICAgfQoKICAgIGxlYWYtbGlzdCBwcm9ncmVzc1N0YXRlSW5mbyB7CiAgICAgIHR5cGUgc3RyaW5nOwogICAgICBjb25maWcgZmFsc2U7CiAgICAgIGRlc2NyaXB0aW9uICJBZGRpdGlvbmFsIHRleHR1YWwgcXVhbGlmaWNhdGlvbiBvZiB0aGUgc3RhdGVzCiAgICAgICAgJ05PVF9TVEFSVEVEJywgJ0NBTkNFTExJTkcnIGFuZCAnUlVOTklORycuCgogICAgICAgIEZvciBzcGVjaWZpYyBwcm9jZXNzZXMsIHNwZWNpZmljIHdlbGwtZGVmaW5lZCBzdHJpbmdzIChlLmcuIHN0cmluZwogICAgICAgIHBhdHRlcm5zIG9yIGVudW1zKSBtYXkgYmUgZGVmaW5lZCBhcyBhIHNwZWNpYWxpc2F0aW9uLiI7CiAgICB9CgogICAgbGVhZiByZXN1bHRTdGF0ZUluZm8gewogICAgICB0eXBlIHN0cmluZzsKICAgICAgY29uZmlnIGZhbHNlOwogICAgICBkZXNjcmlwdGlvbiAiQWRkaXRpb25hbCB0ZXh0dWFsIHF1YWxpZmljYXRpb24gb2YgdGhlIHN0YXRlcwogICAgICAgICdGSU5JU0hFRCcsICdGQUlMRUQnLCAnUEFSVElBTExZX0ZBSUxFRCBhbmQgJ0NBTkNFTExFRCcuCiAgICAgICAgRm9yIGV4YW1wbGUsIGluIHRoZSAnRkFJTEVEJyBvciAnUEFSVElBTExZX0ZBSUxFRCcgc3RhdGUgdGhpcwogICAgICAgIGF0dHJpYnV0ZSBtYXkgYmUgdXNlZCB0byBwcm92aWRlIGVycm9yIHJlYXNvbnMuCgogICAgICAgIFRoaXMgYXR0cmlidXRlIHNoYWxsIG5vdCBiZSB1c2VkIHRvIG1ha2UgdGhlIG91dGNvbWUgb2YgdGhlIHByb2Nlc3MKICAgICAgICBhdmFpbGFibGUgZm9yIHJldHJpZXZhbCwgaWYgYW55LiBGb3IgdGhpcyBwdXJwb3NlLCBkZWRpY2F0ZWQKICAgICAgICBhdHRyaWJ1dGVzIHNoYWxsIGJlIHNwZWNpZmllZCB3aGVuIHNwZWNpZnlpbmcgdGhlIHJlcHJlc2VudGF0aW9uIG9mCiAgICAgICAgYSBzcGVjaWZpYyBwcm9jZXNzLgoKICAgICAgICBGb3Igc3BlY2lmaWMgcHJvY2Vzc2VzLCBzcGVjaWZpYyB3ZWxsLWRlZmluZWQgc3RyaW5ncyAoZS5nLiBzdHJpbmcKICAgICAgICBwYXR0ZXJucyBvciBlbnVtcykgbWF5IGJlIGRlZmluZWQgYXMgYSBzcGVjaWFsaXNhdGlvbi4iOwogICAgfQoKICAgIGxlYWYgc3RhcnRUaW1lIHsKICAgICAgdHlwZSB5YW5nOmRhdGUtYW5kLXRpbWU7CiAgICAgIGNvbmZpZyBmYWxzZTsKICAgICAgZGVzY3JpcHRpb24gIlN0YXJ0IHRpbWUgb2YgdGhlIGFzc29jaWF0ZWQgcHJvY2VzcywgaS5lLiB0aGUgdGltZSB3aGVuIHRoZQogICAgICAgIHN0YXR1cyBjaGFuZ2VkIGZyb20gJ05PVF9TVEFSVEVEJyB0byAnUlVOTklORycuIjsKICAgIH0KCiAgICBsZWFmIGVuZFRpbWUgewogICAgICB0eXBlIHlhbmc6ZGF0ZS1hbmQtdGltZTsKICAgICAgY29uZmlnIGZhbHNlOwogICAgICBkZXNjcmlwdGlvbiAiRGF0ZSBhbmQgdGltZSB3aGVuIHN0YXR1cyBjaGFuZ2VkIHRvICdTVUNDRVNTJywgJ0NBTkNFTExFRCcsCiAgICAgICAgJ0ZBSUxFRCcgb3IgJ1BBUlRJQUxMWV9GQUlMRUQnLgoKICAgICAgICBJZiB0aGUgdGltZSBpcyBpbiB0aGUgZnV0dXJlLCBpdCBpcyB0aGUgZXN0aW1hdGVkIHRpbWUKICAgICAgICB0aGUgcHJvY2VzcyB3aWxsIGVuZC4iOwogICAgfQoKICAgIGxlYWYgdGltZXIgewogICAgICB0eXBlIHVpbnQzMjsKICAgICAgdW5pdHMgbWludXRlczsKICAgICAgZGVzY3JpcHRpb24gIlRpbWUgdW50aWwgdGhlIGFzc29jaWF0ZWQgcHJvY2VzcyBpcyBhdXRvbWF0aWNhbGx5IGNhbmNlbGxlZC4KICAgICAgICBJZiBzZXQsIHRoZSBzeXN0ZW0gZGVjcmVhc2VzIHRoZSB0aW1lciB3aXRoIHRpbWUuIFdoZW4gaXQgcmVhY2hlcyB6ZXJvCiAgICAgICAgdGhlIGNhbmNlbGxhdGlvbiBvZiB0aGUgYXNzb2NpYXRlZCBwcm9jZXNzIGlzIGluaXRpYXRlZCBieSB0aGUKICAgICAgICBNblNfUHJvZHVjZXIuCiAgICAgICAgSWYgbm90IHNldCwgdGhlcmUgaXMgbm8gdGltZSBsaW1pdCBmb3IgdGhlIHByb2Nlc3MuCgogICAgICAgIE9uY2UgdGhlIHRpbWVyIGlzIHNldCwgdGhlIGNvbnN1bWVyIGNhbiBub3QgY2hhbmdlIGl0IGFueW1vcmUuCiAgICAgICAgSWYgdGhlIGNvbnN1bWVyIGhhcyBub3Qgc2V0IHRoZSB0aW1lciB0aGUgTW5TIFByb2R1Y2VyIG1heSBzZXQgaXQuIjsKICAgICAgeWV4dDNncHA6bm90Tm90aWZ5YWJsZTsKICAgIH0KICB9CgogIHR5cGVkZWYgVGVudGhPZkRlZ3JlZXMgewogICAgdHlwZSB1aW50MTYgewogICAgICByYW5nZSAwLi4zNjAwOwogICAgfQogICAgdW5pdHMgIjAuMSBkZWdyZWVzIjsKICAgIGRlc2NyaXB0aW9uICJBIHNpbmdsZSBpbnRlZ3JhbCB2YWx1ZSBjb3JyZXNwb25kaW5nIHRvIGFuIGFuZ2xlIGluIGRlZ3JlZXMKICAgICAgYmV0d2VlbiAwIGFuZCAzNjAgd2l0aCBhIHJlc29sdXRpb24gb2YgMC4xIGRlZ3JlZXMuIjsKICB9CgogIHR5cGVkZWYgTGF0aXR1ZGUgewogICAgdHlwZSBkZWNpbWFsNjQgewogICAgICBmcmFjdGlvbi1kaWdpdHMgNDsKICAgICAgcmFuZ2UgIi05MC4wMDAwLi4rOTAuMDAwMCI7CiAgICB9CiAgICBkZXNjcmlwdGlvbiAiTGF0aXR1ZGUgdmFsdWVzIjsKICB9CgogIHR5cGVkZWYgTG9uZ2l0dWRlIHsKICAgIHR5cGUgZGVjaW1hbDY0IHsKICAgICAgZnJhY3Rpb24tZGlnaXRzIDQ7CiAgICAgIHJhbmdlICItMTgwLjAwMDAuLisxODAuMDAwMCI7CiAgICB9CiAgICBkZXNjcmlwdGlvbiAiTG9uZ2l0dWRlIHZhbHVlcyI7CiAgfQoKICB0eXBlZGVmIEFsdGl0dWRlICB7CiAgICB0eXBlIGRlY2ltYWw2NCB7CiAgICAgIGZyYWN0aW9uLWRpZ2l0cyA2OwogICAgfQogICAgdW5pdHMgIm1ldGVycyI7CiAgICBkZXNjcmlwdGlvbgogICAgICAiSGVpZ2h0IGZyb20gYSByZWZlcmVuY2UgMCB2YWx1ZS4iOwogIH0KCiAgZ3JvdXBpbmcgR2VvZ3JhcGhpY2FsQ29vcmRpbmF0ZXMgewogICAgZGVzY3JpcHRpb24gIlRoaXMgZGF0YXR5cGUgcmVwcmVzZW50cyB0aGUgZ2VvZ3JhcGhpY2FsIGNvb3JkaW5hdGVzIjsKICAgIHJlZmVyZW5jZSAiI0dQUCBUUyAyOC41NTggY2xhdXNlIDYuMy44IjsKCiAgICBsZWFmIGxhdGl0dWRlIHsKICAgICAgdHlwZSBMYXRpdHVkZTsKICAgICAgbWFuZGF0b3J5IHRydWU7CiAgICB9CgogICAgbGVhZiBsb25naXR1ZGUgewogICAgICB0eXBlIExvbmdpdHVkZTsKICAgICAgbWFuZGF0b3J5IHRydWU7CiAgICB9CgogICAgbGVhZiBhbHRpdHVkZSB7CiAgICAgIHR5cGUgQWx0aXR1ZGU7CiAgICB9CgogIH0KCiAgdHlwZWRlZiBPbk9mZiB7CiAgICB0eXBlIGVudW1lcmF0aW9uIHsKICAgICAgZW51bSBPTjsKICAgICAgZW51bSBPRkY7CiAgICB9CiAgfQoKICAvLyBncm91cGluZyBNYW5hZ2VkTkZQcm9maWxlIHdpbGwgYmUgcmVtb3ZlZCBhcyBpdCBpcwogIC8vICBiZWluZyBtb3ZlZCB0byBfM2dwcC01Z2MtbnJtLW5mcHJvZmlsZQogIGdyb3VwaW5nIE1hbmFnZWRORlByb2ZpbGUgewogICAgZGVzY3JpcHRpb24gIkRlZmluZXMgcHJvZmlsZSBmb3IgbWFuYWdlZCBORiI7CiAgICByZWZlcmVuY2UgIjNHUFAgVFMgMjMuNTAxIjsKCiAgICBsZWFmIGlkeCB7IHR5cGUgdWludDMyIDsgfQoKICAgIGxlYWYgbmZJbnN0YW5jZUlEIHsKICAgICAgY29uZmlnIGZhbHNlOwogICAgICBtYW5kYXRvcnkgdHJ1ZTsKICAgICAgdHlwZSB5YW5nOnV1aWQgOwogICAgICBkZXNjcmlwdGlvbiAiVGhpcyBwYXJhbWV0ZXIgZGVmaW5lcyBwcm9maWxlIGZvciBtYW5hZ2VkIE5GLgogICAgICAgIFRoZSBmb3JtYXQgb2YgdGhlIE5GIEluc3RhbmNlIElEIHNoYWxsIGJlIGEKICAgICAgICBVbml2ZXJzYWxseSBVbmlxdWUgSWRlbnRpZmllciAoVVVJRCkgdmVyc2lvbiA0LAogICAgICAgIGFzIGRlc2NyaWJlZCBpbiBJRVRGIFJGQyA0MTIyICIgOwogICAgICB5ZXh0M2dwcDppblZhcmlhbnQ7CiAgICB9CgogICAgbGVhZi1saXN0IG5mVHlwZSB7CiAgICAgIGNvbmZpZyBmYWxzZTsKICAgICAgbWluLWVsZW1lbnRzIDE7CiAgICAgIHR5cGUgTmZUeXBlOwogICAgICBkZXNjcmlwdGlvbiAiVHlwZSBvZiB0aGUgTmV0d29yayBGdW5jdGlvbiIgOwogICAgfQoKICAgIGxlYWYgaG9zdEFkZHIgewogICAgICBtYW5kYXRvcnkgdHJ1ZTsKICAgICAgdHlwZSBpbmV0Omhvc3QgOwogICAgICBkZXNjcmlwdGlvbiAiSG9zdCBhZGRyZXNzIG9mIGEgTkYiOwogICAgfQoKICAgIGxlYWYgYXV0aHpJbmZvIHsKICAgICAgdHlwZSBzdHJpbmcgOwogICAgICBkZXNjcmlwdGlvbiAiVGhpcyBwYXJhbWV0ZXIgZGVmaW5lcyBORiBTcGVjaWZpYyBTZXJ2aWNlIGF1dGhvcml6YXRpb24KICAgICAgICBpbmZvcm1hdGlvbi4gSXQgc2hhbGwgaW5jbHVkZSB0aGUgTkYgdHlwZSAocykgYW5kIE5GIHJlYWxtcy9vcmlnaW5zCiAgICAgICAgYWxsb3dlZCB0byBjb25zdW1lIE5GIFNlcnZpY2Uocykgb2YgTkYgU2VydmljZSBQcm9kdWNlci4iOwogICAgICByZWZlcmVuY2UgIlNlZSBUUyAyMy41MDEiIDsKICAgIH0KCiAgICBsZWFmIGxvY2F0aW9uIHsKICAgICAgdHlwZSBzdHJpbmcgOwogICAgICBkZXNjcmlwdGlvbiAiSW5mb3JtYXRpb24gYWJvdXQgdGhlIGxvY2F0aW9uIG9mIHRoZSBORiBpbnN0YW5jZQogICAgICAgIChlLmcuIGdlb2dyYXBoaWMgbG9jYXRpb24sIGRhdGEgY2VudGVyKSBkZWZpbmVkIGJ5IG9wZXJhdG9yIjsKICAgICAgcmVmZXJlbmNlICJUUyAyOS41MTAiIDsKICAgIH0KCiAgICBsZWFmIGNhcGFjaXR5IHsKICAgICAgbWFuZGF0b3J5IHRydWU7CiAgICAgIHR5cGUgdWludDE2IDsKICAgICAgZGVzY3JpcHRpb24gIlRoaXMgcGFyYW1ldGVyIGRlZmluZXMgc3RhdGljIGNhcGFjaXR5IGluZm9ybWF0aW9uCiAgICAgICAgaW4gdGhlIHJhbmdlIG9mIDAtNjU1MzUsIGV4cHJlc3NlZCBhcyBhIHdlaWdodCByZWxhdGl2ZSB0byBvdGhlcgogICAgICAgIE5GIGluc3RhbmNlcyBvZiB0aGUgc2FtZSB0eXBlOyBpZiBjYXBhY2l0eSBpcyBhbHNvIHByZXNlbnQgaW4gdGhlCiAgICAgICAgbmZTZXJ2aWNlTGlzdCBwYXJhbWV0ZXJzLCB0aG9zZSB3aWxsIGhhdmUgcHJlY2VkZW5jZSBvdmVyIHRoaXMgdmFsdWUuIjsKICAgICAgcmVmZXJlbmNlICJUUyAyOS41MTAiIDsKICAgIH0KCiAgICBsZWFmIG5GU3J2R3JvdXBJZCB7CiAgICAgIHR5cGUgc3RyaW5nIDsKICAgICAgZGVzY3JpcHRpb24gIlRoaXMgcGFyYW1ldGVyIGRlZmluZXMgaWRlbnRpdHkgb2YgdGhlIGdyb3VwIHRoYXQgaXMKICAgICAgICBzZXJ2ZWQgYnkgdGhlIE5GIGluc3RhbmNlLgogICAgICAgIE1heSBiZSBjb25maWcgZmFsc2Ugb3IgdHJ1ZSBkZXBlbmRpbmcgb24gdGhlIE1hbmFnZWRGdW5jdGlvbi4KICAgICAgICBDb25maWc9dHJ1ZSBmb3IgVWRyaW5mby4gQ29uZmlnPWZhbHNlIGZvciBVZG1JbmZvIGFuZCBBdXNmSW5mby4KICAgICAgICBTaGFsbCBiZSBwcmVzZW50IGlmIC4uL25mVHlwZSA9IFVETSBvciBBVVNGIG9yIFVEUi4gIjsKICAgICAgcmVmZXJlbmNlICJUUyAyOS41MTAiIDsKICAgIH0KCiAgICBsZWFmLWxpc3Qgc3VwcG9ydGVkRGF0YVNldElkcyB7CiAgICAgIHR5cGUgZW51bWVyYXRpb24gewogICAgICAgIGVudW0gU1VCU0NSSVBUSU9OOwogICAgICAgIGVudW0gUE9MSUNZOwogICAgICAgIGVudW0gRVhQT1NVUkU7CiAgICAgICAgZW51bSBBUFBMSUNBVElPTjsKICAgICAgfQogICAgICBkZXNjcmlwdGlvbiAiTGlzdCBvZiBzdXBwb3J0ZWQgZGF0YSBzZXRzIGluIHRoZSBVRFIgaW5zdGFuY2UuCiAgICAgICAgTWF5IGJlIHByZXNlbnQgaWYgLi4vbmZUeXBlID0gVURSIjsKICAgICAgcmVmZXJlbmNlICJUUyAyOS41MTAiIDsKICAgIH0KCiAgICBsZWFmLWxpc3Qgc21mU2VydmluZ0FyZWFzIHsKICAgICAgdHlwZSBzdHJpbmcgOwogICAgICBkZXNjcmlwdGlvbiAiRGVmaW5lcyB0aGUgU01GIHNlcnZpY2UgYXJlYShzKSB0aGUgVVBGIGNhbiBzZXJ2ZS4KICAgICAgICBTaGFsbCBiZSBwcmVzZW50IGlmIC4uL25mVHlwZSA9IFVQRiI7CiAgICAgIHJlZmVyZW5jZSAiVFMgMjkuNTEwIiA7CiAgICB9CgogICAgbGVhZiBwcmlvcml0eSB7CiAgICAgIHR5cGUgdWludDE2OwogICAgICBkZXNjcmlwdGlvbiAiVGhpcyBwYXJhbWV0ZXIgZGVmaW5lcyBQcmlvcml0eSAocmVsYXRpdmUgdG8gb3RoZXIgTkZzCiAgICAgICAgb2YgdGhlIHNhbWUgdHlwZSkgaW4gdGhlIHJhbmdlIG9mIDAtNjU1MzUsIHRvIGJlIHVzZWQgZm9yIE5GIHNlbGVjdGlvbjsKICAgICAgICBsb3dlciB2YWx1ZXMgaW5kaWNhdGUgYSBoaWdoZXIgcHJpb3JpdHkuIElmIHByaW9yaXR5IGlzIGFsc28gcHJlc2VudAogICAgICAgIGluIHRoZSBuZlNlcnZpY2VMaXN0IHBhcmFtZXRlcnMsIHRob3NlIHdpbGwgaGF2ZSBwcmVjZWRlbmNlIG92ZXIKICAgICAgICB0aGlzIHZhbHVlLiBTaGFsbCBiZSBwcmVzZW50IGlmIC4uL25mVHlwZSA9IEFNRiAiOwogICAgICByZWZlcmVuY2UgIlRTIDI5LjUxMCIgOwogICAgfQogIH0KCiAgdHlwZWRlZiB1c2FnZVN0YXRlIHsKICAgIHR5cGUgZW51bWVyYXRpb24gewogICAgICBlbnVtIElETEU7CiAgICAgIGVudW0gQUNUSVZFOwogICAgICBlbnVtIEJVU1k7CiAgICB9CiAgICBkZXNjcmlwdGlvbiAiSXQgZGVzY3JpYmVzIHdoZXRoZXIgb3Igbm90IHRoZSByZXNvdXJjZSBpcyBhY3RpdmVseSBpbgogICAgICB1c2UgYXQgYSBzcGVjaWZpYyBpbnN0YW50LCBhbmQgaWYgc28sIHdoZXRoZXIgb3Igbm90IGl0IGhhcyBzcGFyZQogICAgICBjYXBhY2l0eSBmb3IgYWRkaXRpb25hbCB1c2VycyBhdCB0aGF0IGluc3RhbnQuIFRoZSB2YWx1ZSBpcyBSRUFELU9OTFkuIjsKICAgIHJlZmVyZW5jZSAiSVRVIFQgUmVjb21tZW5kYXRpb24gWC43MzEiOwogIH0KCiAgZ3JvdXBpbmcgU0FQR3JwIHsKICAgIGxlYWYgaG9zdCB7CiAgICAgIHR5cGUgaW5ldDpob3N0OwogICAgICBtYW5kYXRvcnkgdHJ1ZTsKICAgIH0KICAgIGxlYWYgcG9ydCB7CiAgICAgIHR5cGUgaW5ldDpwb3J0LW51bWJlcjsKICAgICAgbWFuZGF0b3J5IHRydWU7CiAgICB9CiAgICBkZXNjcmlwdGlvbiAiU2VydmljZSBhY2Nlc3MgcG9pbnQuIjsKICAgIHJlZmVyZW5jZSAiVFMgMjguNjIyIjsKICB9CgogIHR5cGVkZWYgTWNjIHsKICAgIGRlc2NyaXB0aW9uICJUaGUgbW9iaWxlIGNvdW50cnkgY29kZSBjb25zaXN0cyBvZiB0aHJlZSBkZWNpbWFsIGRpZ2l0cywKICAgICAgVGhlIGZpcnN0IGRpZ2l0IG9mIHRoZSBtb2JpbGUgY291bnRyeSBjb2RlIGlkZW50aWZpZXMgdGhlIGdlb2dyYXBoaWMKICAgICAgcmVnaW9uICh0aGUgZGlnaXRzIDEgYW5kIDggYXJlIG5vdCB1c2VkKToiOwogICAgdHlwZSBzdHJpbmcgewogICAgICBwYXR0ZXJuICdbMDItNzldWzAtOV1bMC05XSc7CiAgICB9CiAgICByZWZlcmVuY2UgIjNHUFAgVFMgMjMuMDAzIHN1YmNsYXVzZSAyLjIgYW5kIDEyLjEiOwogIH0KCiAgdHlwZWRlZiBNbmMgewogICAgZGVzY3JpcHRpb24gIlRoZSBtb2JpbGUgbmV0d29yayBjb2RlIGNvbnNpc3RzIG9mIHR3byBvciB0aHJlZQogICAgICBkZWNpbWFsIGRpZ2l0cyAoZm9yIGV4YW1wbGU6IE1OQyBvZiAwMDEgaXMgbm90IHRoZSBzYW1lIGFzIE1OQyBvZiAwMSkiOwogICAgdHlwZSBzdHJpbmcgewogICAgICBwYXR0ZXJuICdbMC05XVswLTldWzAtOV18WzAtOV1bMC05XSc7CiAgICB9CiAgICByZWZlcmVuY2UgIjNHUFAgVFMgMjMuMDAzIHN1YmNsYXVzZSAyLjIgYW5kIDEyLjEiOwogIH0KCiAgZ3JvdXBpbmcgUExNTklkIHsKICAgIGxlYWYgbWNjIHsKICAgICAgbWFuZGF0b3J5IHRydWU7CiAgICAgIHR5cGUgTWNjOwogICAgfQogICAgbGVhZiBtbmMgewogICAgICBtYW5kYXRvcnkgdHJ1ZTsKICAgICAgdHlwZSBNbmM7CiAgICB9CiAgICByZWZlcmVuY2UgIlRTIDM4LjQxMyBjbGF1c2UgOS4zLjMuNSI7CiAgfQoKICB0eXBlZGVmIE5jaSB7CiAgICBkZXNjcmlwdGlvbiAiTlIgQ2VsbCBJZGVudGl0eS4gVGhlIE5DSSBzaGFsbCBiZSBvZiBmaXhlZCBsZW5ndGggb2YgMzYgYml0cwogICAgICBhbmQgc2hhbGwgYmUgY29kZWQgdXNpbmcgZnVsbCBoZXhhZGVjaW1hbCByZXByZXNlbnRhdGlvbi4KICAgICAgVGhlIGV4YWN0IGNvZGluZyBvZiB0aGUgTkNJIGlzIHRoZSByZXNwb25zaWJpbGl0eSBvZiBlYWNoIFBMTU4gb3BlcmF0b3IiOwogICAgcmVmZXJlbmNlICJUUyAyMy4wMDMiOwogICAgdHlwZSB1bmlvbiB7CiAgICAgIHR5cGUgc3RyaW5nIHsKICAgICAgICBsZW5ndGggMzY7CiAgICAgICAgcGF0dGVybiAnWzAxXSsnOwogICAgICB9CiAgICAgIHR5cGUgc3RyaW5nIHsKICAgICAgICBsZW5ndGggOTsKICAgICAgICBwYXR0ZXJuICdbYS1mQS1GMC05XSonOwogICAgICB9CiAgICB9CiAgfQoKICB0eXBlZGVmIE9wZXJhdGlvbmFsU3RhdGUgewogICAgcmVmZXJlbmNlICIzR1BQIFRTIDI4LjYyNSBhbmQgSVRVLVQgWC43MzEiOwogICAgdHlwZSBlbnVtZXJhdGlvbiB7CiAgICAgIGVudW0gRElTQUJMRUQgewogICAgICAgIHZhbHVlIDA7CiAgICAgICAgZGVzY3JpcHRpb24gIlRoZSByZXNvdXJjZSBpcyB0b3RhbGx5IGlub3BlcmFibGUuIjsKICAgICAgfQoKICAgICAgZW51bSBFTkFCTEVEIHsKICAgICAgICB2YWx1ZSAxOwogICAgICAgIGRlc2NyaXB0aW9uICJUaGUgcmVzb3VyY2UgaXMgcGFydGlhbGx5IG9yIGZ1bGx5IG9wZXJhYmxlLiI7CiAgICAgIH0KCiAgICB9CiAgfQoKICB0eXBlZGVmIEJhc2ljQWRtaW5pc3RyYXRpdmVTdGF0ZSB7CiAgICByZWZlcmVuY2UgIjNHUFAgVFMgMjguNjI1IGFuZCBJVFUtVCBYLjczMSI7CiAgICB0eXBlIGVudW1lcmF0aW9uIHsKICAgICAgZW51bSBMT0NLRUQgewogICAgICAgIHZhbHVlIDA7CiAgICAgICAgZGVzY3JpcHRpb24gIlRoZSByZXNvdXJjZSBpcyBhZG1pbmlzdHJhdGl2ZWx5IHByb2hpYml0ZWQgZnJvbSBwZXJmb3JtaW5nCiAgICAgICAgICAgICAgICAgc2VydmljZXMgZm9yIGl0cyB1c2Vycy4iOwogICAgICB9CgogICAgICBlbnVtIFVOTE9DS0VEIHsKICAgICAgICB2YWx1ZSAxOwogICAgICAgIGRlc2NyaXB0aW9uICJUaGUgcmVzb3VyY2UgaXMgYWRtaW5pc3RyYXRpdmVseSBwZXJtaXR0ZWQgdG8gcGVyZm9ybQogICAgICAgICAgc2VydmljZXMgZm9yIGl0cyB1c2Vycy4gVGhpcyBpcyBpbmRlcGVuZGVudCBvZiBpdHMgaW5oZXJlbnQKICAgICAgICAgIG9wZXJhYmlsaXR5LiI7CiAgICAgIH0KICAgIH0KICB9CgogIHR5cGVkZWYgQWRtaW5pc3RyYXRpdmVTdGF0ZSB7CiAgICByZWZlcmVuY2UgIjNHUFAgVFMgMjguNjI1IGFuZCBJVFUtVCBYLjczMSI7CiAgICB0eXBlIGVudW1lcmF0aW9uIHsKICAgICAgZW51bSBMT0NLRUQgewogICAgICAgIHZhbHVlIDA7CiAgICAgICAgZGVzY3JpcHRpb24gIlRoZSByZXNvdXJjZSBpcyBhZG1pbmlzdHJhdGl2ZWx5IHByb2hpYml0ZWQgZnJvbSBwZXJmb3JtaW5nCiAgICAgICAgICAgICAgICAgc2VydmljZXMgZm9yIGl0cyB1c2Vycy4iOwogICAgICB9CgogICAgICBlbnVtIFVOTE9DS0VEIHsKICAgICAgICB2YWx1ZSAxOwogICAgICAgIGRlc2NyaXB0aW9uICJUaGUgcmVzb3VyY2UgaXMgYWRtaW5pc3RyYXRpdmVseSBwZXJtaXR0ZWQgdG8gcGVyZm9ybQogICAgICAgICAgc2VydmljZXMgZm9yIGl0cyB1c2Vycy4gVGhpcyBpcyBpbmRlcGVuZGVudCBvZiBpdHMgaW5oZXJlbnQKICAgICAgICAgIG9wZXJhYmlsaXR5LiI7CiAgICAgIH0KCiAgICAgIGVudW0gU0hVVFRJTkdET1dOIHsKICAgICAgICB2YWx1ZSAyOwogICAgICAgIGRlc2NyaXB0aW9uICJVc2Ugb2YgdGhlIHJlc291cmNlIGlzIGFkbWluaXN0cmF0aXZlbHkgcGVybWl0dGVkIHRvCiAgICAgICAgICBleGlzdGluZyBpbnN0YW5jZXMgb2YgdXNlIG9ubHkuIFdoaWxlIHRoZSBzeXN0ZW0gcmVtYWlucyBpbgogICAgICAgICAgdGhlIHNodXR0aW5nIGRvd24gc3RhdGUgdGhlIG1hbmFnZXIgb3IgdGhlIG1hbmFnZWQgZWxlbWVudAogICAgICAgICAgbWF5IGF0IGFueSB0aW1lIGNhdXNlIHRoZSByZXNvdXJjZSB0byB0cmFuc2l0aW9uIHRvIHRoZQogICAgICAgICAgbG9ja2VkIHN0YXRlLiI7CiAgICAgIH0KICAgIH0KICB9CgogIHR5cGVkZWYgQXZhaWxhYmlsaXR5U3RhdHVzIHsKICAgICAgdHlwZSBlbnVtZXJhdGlvbiB7CiAgICAgICAgICBlbnVtIElOX1RFU1Q7CiAgICAgICAgICBlbnVtIEZBSUxFRDsKICAgICAgICAgIGVudW0gUE9XRVJfT0ZGOwogICAgICAgICAgZW51bSBPRkZfTElORTsKICAgICAgICAgIGVudW0gT0ZGX0RVVFk7CiAgICAgICAgICBlbnVtIERFUEVOREVOQ1k7CiAgICAgICAgICBlbnVtIERFR1JBREVEOwogICAgICAgICAgZW51bSBOT1RfSU5TVEFMTEVEOwogICAgICAgICAgZW51bSBMT0dfRlVMTDsKICAgICAgIH0KICB9CgogIHR5cGVkZWYgQ2VsbFN0YXRlIHsKICAgICAgdHlwZSBlbnVtZXJhdGlvbiB7CiAgICAgICAgZW51bSBJRExFOwogICAgICAgIGVudW0gSU5BQ1RJVkU7CiAgICAgICAgZW51bSBBQ1RJVkU7CiAgICAgfQogIH0KCiAgdHlwZWRlZiBOcnBjaSB7CiAgICB0eXBlIHVpbnQzMjsKICAgIGRlc2NyaXB0aW9uICJQaHlzaWNhbCBDZWxsIElkZW50aXR5IChQQ0kpIG9mIHRoZSBOUiBjZWxsLiI7CiAgICByZWZlcmVuY2UgIlRTIDM2LjIxMSBzdWJjbGF1c2UgNi4xMSI7CiAgfQoKICB0eXBlZGVmIFRhYyB7CiAgICB0eXBlIGludDMyIHsKICAgICAgcmFuZ2UgMC4uMTY3NzcyMTUgOwogICAgfQogICAgZGVzY3JpcHRpb24gIlRyYWNraW5nIEFyZWEgQ29kZSI7CiAgICByZWZlcmVuY2UgIlRTIDIzLjAwMyBjbGF1c2UgMTkuNC4yLjMiOwogIH0KCiAgZ3JvdXBpbmcgVGFpR3JwIHsKICAgIGRlc2NyaXB0aW9uICJUaGlzIDw8ZGF0YVR5cGU+PiBkZWZpbmVzIGEgVHJhY2tpbmcgQXJlYSBJZGVudGl0eSAoVEFJKQogICAgICBhcyBzcGVjaWZpZWQgaW4gY2xhdXNlIDI4LjYgb2YgVFMgMjMuMDAzLCBjbGF1c2UgOC4yIG9mIFRTIDM4LjMwMAogICAgICBhbmQgY2xhdXNlIDkuMy4zLjExIG9mIFRTIDM4LjQxMy4gSXQgaXMgY29tcG9zZWQgb2YgdGhlIFBMTU4KICAgICAgaWRlbnRpZmllciAoUExNTi1JZCwgd2hpY2ggaXMgY29tcG9zZWQgb2YgdGhlIE1DQyBhbmQgTU5DKSBhbmQKICAgICAgdGhlIFRyYWNraW5nIEFyZWEgQ29kZSAoVEFDKS4gIjsKICAgIGxpc3QgcGxtbklkIHsKICAgICAgZGVzY3JpcHRpb24gIlBMTU4gSWRlbnRpdHkuIjsKICAgICAgbWluLWVsZW1lbnRzIDE7CiAgICAgIG1heC1lbGVtZW50cyAxOwogICAgICBrZXkgIm1jYyBtbmMiOwogICAgICB1c2VzIHR5cGVzM2dwcDpQTE1OSWQ7CiAgICB9CgogICAgbGVhZiB0YWMgeyB0eXBlIFRhYzsgfQogIH0KCiAgZ3JvdXBpbmcgR2VvQ29vcmRpbmF0ZUdycCB7CiAgICBkZXNjcmlwdGlvbiAiR2VvZ3JhcGhpY2FsIGxvY2F0aW9uIG9uIGVhcnRoIjsKICAgIGxlYWYgbGF0aXR1ZGUgewogICAgICB0eXBlIGRlY2ltYWw2NCB7CiAgICAgICAgZnJhY3Rpb24tZGlnaXRzIDQ7CiAgICAgICAgcmFuZ2UgLTkwLi45MCA7CiAgICAgIH0KICAgICAgbWFuZGF0b3J5IHRydWU7CiAgICAgIGRlc2NyaXB0aW9uICJMYXRpdHVkZSBiYXNlZCBvbiBXb3JsZCBHZW9kZXRpYyBTeXN0ZW0gKDE5ODQgdmVyc2lvbikKICAgICAgICBnbG9iYWwgcmVmZXJlbmNlIGZyYW1lIChXR1MgODQpLiBQb3NpdGl2ZSB2YWx1ZXMgY29ycmVzcG9uZCB0byB0aGUKICAgICAgICBub3J0aGVybiBoZW1pc3BoZXJlLiI7CiAgICAgIH0KCiAgICBsZWFmIGxvbmdpdHVkZSB7CiAgICAgIHR5cGUgZGVjaW1hbDY0IHsKICAgICAgICBmcmFjdGlvbi1kaWdpdHMgNDsKICAgICAgICByYW5nZSAtMTgwLi4xODAgOwogICAgICB9CiAgICAgIG1hbmRhdG9yeSB0cnVlOwogICAgICBkZXNjcmlwdGlvbiAiTG9uZ2l0dWRlIGJhc2VkIG9uIFdvcmxkIEdlb2RldGljIFN5c3RlbSAoMTk4NCB2ZXJzaW9uKQogICAgICAgIGdsb2JhbCByZWZlcmVuY2UgZnJhbWUgKFdHUyA4NCkuIFBvc2l0aXZlIHZhbHVlcyBjb3JyZXNwb25kIHRvCiAgICAgICAgZGVncmVlcyBlYXN0IG9mIDAgZGVncmVlcyBsb25naXR1ZGUuIjsKICAgIH0KICB9CgogIGdyb3VwaW5nIEdlb0FyZWFHcnAgewogICAgZGVzY3JpcHRpb24gIlRoaXMgZGF0YSB0eXBlIGRlZmluZXMgYSBnZW9ncmFwaGljYWwgYXJlYS4KICAgICAgVGhlIGdlby1hcmVhIGlzIGRlZmluZWQgdXNpbmcgYSBjb252ZXggcG9seWdvbiBpbiB0aGUgYXR0cmlidXRlCiAgICAgICdjb252ZXhHZW9Qb2x5Z29uJy4iOwoKICAgIGxpc3QgY29udmV4R2VvUG9seWdvbiB7CiAgICAgIGRlc2NyaXB0aW9uICJTcGVjaWZpZXMgdGhlIGdlb2dyYXBoaWNhbCBhcmVhIHdpdGggYSBjb252ZXggcG9seWdvbi4KICAgICAgICBUaGUgY29udmV4IHBvbHlnb24gaXMgc3BlY2lmaWVkIGJ5IGl0cyBjb3JuZXJzLiI7CiAgICAgICAga2V5ICJsYXRpdHVkZSBsb25naXR1ZGUiOwogICAgICBtaW4tZWxlbWVudHMgMzsKICAgICAgb3JkZXJlZC1ieSB1c2VyOwoKICAgICAgdXNlcyBHZW9Db29yZGluYXRlR3JwOwogICAgfQogIH0KCiAgdHlwZWRlZiBBbWZSZWdpb25JZCB7CiAgICB0eXBlIHVuaW9uIHsKICAgICAgdHlwZSB1aW50OCA7CiAgICAgIHR5cGUgc3RyaW5nIHsKICAgICAgICBsZW5ndGggODsKICAgICAgICBwYXR0ZXJuICdbMDFdKic7CiAgICAgIH0KICAgIH0KICAgIHJlZmVyZW5jZSAiY2xhdXNlIDIuMTAuMSBvZiAzR1BQIFRTIDIzLjAwMyI7CiAgfQoKICB0eXBlZGVmIEFtZlNldElkIHsKICAgIHR5cGUgdW5pb24gewogICAgICB0eXBlIHVpbnQxNiB7CiAgICAgICAgcmFuZ2UgJzAuLjEwMjMnOwogICAgICB9CiAgICAgIHR5cGUgc3RyaW5nIHsKICAgICAgICBsZW5ndGggODsKICAgICAgICBwYXR0ZXJuICdbMDFdKic7CiAgICAgIH0KICAgIH0KICAgIHJlZmVyZW5jZSAiY2xhdXNlIDIuMTAuMSBvZiAzR1BQIFRTIDIzLjAwMyI7CiAgfQoKICB0eXBlZGVmIEFtZlBvaW50ZXIgewogICAgdHlwZSB1bmlvbiB7CiAgICAgIHR5cGUgdWludDggewogICAgICAgIHJhbmdlICcwLi42Myc7CiAgICAgIH0KICAgICAgdHlwZSBzdHJpbmcgewogICAgICAgIGxlbmd0aCA2OwogICAgICAgIHBhdHRlcm4gJ1swMV0qJzsKICAgICAgfQogICAgfQogICAgcmVmZXJlbmNlICJjbGF1c2UgMi4xMC4xIG9mIDNHUFAgVFMgMjMuMDAzIjsKICB9CgogIGdyb3VwaW5nIEFtZklkZW50aWZpZXIgewogICAgbGVhZiBhbWZSZWdpb25JZCB7CiAgICAgIHR5cGUgQW1mUmVnaW9uSWQ7CiAgICB9CiAgICBsZWFmIGFtZlNldElkIHsKICAgICAgdHlwZSBBbWZTZXRJZDsKICAgIH0KICAgIGxlYWYgYW1mUG9pbnRlciB7CiAgICAgIHR5cGUgQW1mUG9pbnRlcjsKICAgIH0KICAgIGRlc2NyaXB0aW9uICJUaGUgQU1GSSBpcyBjb25zdHJ1Y3RlZCBmcm9tIGFuIEFNRiBSZWdpb24gSUQsCiAgICAgIGFuIEFNRiBTZXQgSUQgYW5kIGFuIEFNRiBQb2ludGVyLgogICAgICBUaGUgQU1GIFJlZ2lvbiBJRCBpZGVudGlmaWVzIHRoZSByZWdpb24sCiAgICAgIHRoZSBBTUYgU2V0IElEIHVuaXF1ZWx5IGlkZW50aWZpZXMgdGhlIEFNRiBTZXQgd2l0aGluIHRoZSBBTUYgUmVnaW9uLCBhbmQKICAgICAgdGhlIEFNRiBQb2ludGVyIHVuaXF1ZWx5IGlkZW50aWZpZXMgdGhlIEFNRiB3aXRoaW4gdGhlIEFNRiBTZXQuICI7CiAgfQoKLy8gdHlwZSBkZWZpbml0aW9ucyBlc3BlY2lhbGx5IGZvciBjb3JlIE5GcwoKICB0eXBlZGVmIE5mVHlwZSB7CiAgICB0eXBlIGVudW1lcmF0aW9uIHsKICAgICAgZW51bSBOUkY7CiAgICAgIGVudW0gVURNOwogICAgICBlbnVtIEFNRjsKICAgICAgZW51bSBTTUY7CiAgICAgIGVudW0gQVVTRjsKICAgICAgZW51bSBORUY7CiAgICAgIGVudW0gUENGOwogICAgICBlbnVtIFNNU0Y7CiAgICAgIGVudW0gTlNTRjsKICAgICAgZW51bSBVRFI7CiAgICAgIGVudW0gTE1GOwogICAgICBlbnVtIEdNTEM7CiAgICAgIGVudW0gNUdfRUlSOwogICAgICBlbnVtIFNFUFA7CiAgICAgIGVudW0gVVBGOwogICAgICBlbnVtIE4zSVdGOwogICAgICBlbnVtIEFGOwogICAgICBlbnVtIFVEU0Y7CiAgICAgIGVudW0gQlNGOwogICAgICBlbnVtIENIRjsKICAgIH0KICB9CgogIHR5cGVkZWYgTm90aWZpY2F0aW9uVHlwZSB7CiAgICB0eXBlIGVudW1lcmF0aW9uIHsKICAgICAgZW51bSBOMV9NRVNTQUdFUzsKICAgICAgZW51bSBOMl9JTkZPUk1BVElPTjsKICAgICAgZW51bSBMT0NBVElPTl9OT1RJRklDQVRJT047CiAgICB9CiAgfQoKICB0eXBlZGVmIExvYWQgewogICAgZGVzY3JpcHRpb24gIkxhdGVzdCBrbm93biBsb2FkIGluZm9ybWF0aW9uIG9mIHRoZSBORiwgcGVyY2VudGFnZSAiOwogICAgdHlwZSB1aW50OCB7CiAgICAgIHJhbmdlIDAuLjEwMDsKICAgIH0KICB9CgogIHR5cGVkZWYgTjFNZXNzYWdlQ2xhc3MgewogICAgdHlwZSBlbnVtZXJhdGlvbiB7CiAgICAgIGVudW0gNUdNTTsKICAgICAgZW51bSBTTTsKICAgICAgZW51bSBMUFA7CiAgICAgIGVudW0gU01TOwogICAgfQogIH0KCiAgdHlwZWRlZiBOMkluZm9ybWF0aW9uQ2xhc3MgewogICAgdHlwZSBlbnVtZXJhdGlvbiB7CiAgICAgIGVudW0gU007CiAgICAgIGVudW0gTlJQUEE7CiAgICAgIGVudW0gUFdTOwogICAgICBlbnVtIFBXU19CQ0FMOwogICAgICBlbnVtIFBXU19SRjsKICAgIH0KICB9CgogIGdyb3VwaW5nIERlZmF1bHROb3RpZmljYXRpb25TdWJzY3JpcHRpb24gewoKICAgIGxlYWYgbm90aWZpY2F0aW9uVHlwZSB7CiAgICAgIHR5cGUgTm90aWZpY2F0aW9uVHlwZTsKICAgIH0KCiAgICBsZWFmIGNhbGxiYWNrVXJpIHsKICAgICAgdHlwZSBpbmV0OnVyaTsKICAgIH0KCiAgICBsZWFmIG4xTWVzc2FnZUNsYXNzIHsKICAgICAgdHlwZSBOMU1lc3NhZ2VDbGFzczsKICAgIH0KCiAgICBsZWFmIG4ySW5mb3JtYXRpb25DbGFzcyB7CiAgICAgIHR5cGUgTjJJbmZvcm1hdGlvbkNsYXNzOwogICAgfQogIH0KCiAgZ3JvdXBpbmcgSXB2NEFkZHJlc3NSYW5nZSB7CiAgbGVhZiBzdGFydCB7CiAgICB0eXBlIGluZXQ6aXB2NC1hZGRyZXNzOwogICAgfQogIGxlYWYgZW5kIHsKICAgIHR5cGUgaW5ldDppcHY0LWFkZHJlc3M7CiAgICB9CiAgfQoKICBncm91cGluZyBJcHY2UHJlZml4UmFuZ2UgewogIGxlYWYgc3RhcnQgewogICAgdHlwZSBpbmV0OmlwdjYtcHJlZml4OwogICAgfQogIGxlYWYgZW5kIHsKICAgIHR5cGUgaW5ldDppcHY2LXByZWZpeDsKICAgIH0KICB9CgogIHR5cGVkZWYgTnNpSWQgewogICAgdHlwZSBzdHJpbmc7CiAgfQoKICB0eXBlZGVmIFVlTW9iaWxpdHlMZXZlbCB7CiAgICB0eXBlIGVudW1lcmF0aW9uIHsKICAgICAgZW51bSBTVEFUSU9OQVJZOwogICAgICBlbnVtIE5PTUFESUM7CiAgICAgIGVudW0gUkVTVFJJQ1RFRF9NT0JJTElUWTsKICAgICAgZW51bSBGVUxMWV9NT0JJTElUWTsKICAgIH0KICB9CgogIHR5cGVkZWYgUmVzb3VyY2VTaGFyaW5nTGV2ZWwgewogICAgICB0eXBlIGVudW1lcmF0aW9uIHsKICAgICAgICBlbnVtIFNIQVJFRDsKICAgICAgICBlbnVtIE5PVF9TSEFSRUQ7CiAgICAgIH0KICB9CgogIHR5cGVkZWYgVHhEaXJlY3Rpb24gewogICAgICB0eXBlIGVudW1lcmF0aW9uIHsKICAgICAgICBlbnVtIERMOwogICAgICAgIGVudW0gVUw7CiAgICAgICAgZW51bSBETF9BTkRfVUw7CiAgICAgIH0KICB9CgogIGdyb3VwaW5nIEFkZHJlc3NXaXRoVmxhbiB7CiAgICBsZWFmIGlwQWRkcmVzcyB7CiAgICAgIHR5cGUgaW5ldDppcC1hZGRyZXNzOwogICAgfQogICAgbGVhZiB2bGFuSWQgewogICAgICAgdHlwZSB1aW50MTY7CiAgICB9CiAgfQoKICAvKiBEaXN0aW5ndWlzaGVkTmFtZSBwYXR0ZXJuIGlzIGJ1aWx0IHVwIGJhc2VkIG9uIHRoZQogICAgRUJORiBpbiAzMi4zMDAgY2xhdXNlIDcuMyAgRUJORiBvZiBETiBTdHJpbmcgUmVwcmVzZW50YXRpb24KCiAgICBsZWFmIEROIHsgdHlwZSBzdHJpbmcgeyAgIC8vICBTYW1lIHBhdHRlcm4gYXMgTG9jYWxETgogICAgICBwYXR0ZXJuICdbQS1aXVteLD0rPD4jO1xcIlxyXG4qLl0qPShbXiw9Kzw+IztcXCJcclxuKiBdfChcXFthLWZBLUYwLTldezJ9KSkoKFteLD0rPD4jO1xcIlxyXG4qXXwoXFxbYS1mQS1GMC05XXsyfSkpKihbXiw9Kzw+IztcXCJcclxuKiBdfChcXFthLWZBLUYwLTldezJ9KSkpPygsW0EtWl1bXiw9Kzw+IztcXCJcclxuKi5dKj0oW14sPSs8PiM7XFwiXHJcbiogXXwoXFxbYS1mQS1GMC05XXsyfSkpKChbXiw9Kzw+IztcXCJcclxuKl18KFxcW2EtZkEtRjAtOV17Mn0pKSooW14sPSs8PiM7XFwiXHJcbiogXXwoXFxbYS1mQS1GMC05XXsyfSkpKT8pKic7CiAgICB9IH0KCiAgICBsZWFmIGZ1bGxMb2NhbEROIHsgdHlwZSBzdHJpbmcgeyAgIC8vIExvY2FsUkROICwgeyBSRE5TZXBhcmF0b3IgLCBMb2NhbFJETiB9ICAgIFJETlNlcGFyYXRvciBpcyBhIHNpbmdsZSAsIG5vIHNwYWNlIG9yIFxSIGFsbG93ZWQgICBNZS5teWtleT0xIGFsbG93ZWQKICAgICAgLy8gIChmdWxsTG9jYWxSRE4pKCwoZnVsbExvY2FsUkROKSkqCiAgICAgIHBhdHRlcm4gJygoW0EtWl1bXiw9Kzw+IztcXCJcclxuKi5dKnwoW0EtWl1bXiw9Kzw+IztcXCJcclxuKi5dKlwuW2Etel1bXiw9Kzw+IztcXCJcclxuKi5dKikpPSgoW14sPSs8PiM7XFwiXHJcbiogXXwoXFxbYS1mQS1GMC05XXsyfSkpKChbXiw9Kzw+IztcXCJcclxuKl18KFxcW2EtZkEtRjAtOV17Mn0pKSooW14sPSs8PiM7XFwiXHJcbiogXXwoXFxbYS1mQS1GMC05XXsyfSkpKT8pKSgsKChbQS1aXVteLD0rPD4jO1xcIlxyXG4qLl0qfChbQS1aXVteLD0rPD4jO1xcIlxyXG4qLl0qXC5bYS16XVteLD0rPD4jO1xcIlxyXG4qLl0qKSk9KChbXiw9Kzw+IztcXCJcclxuKiBdfChcXFthLWZBLUYwLTldezJ9KSkoKFteLD0rPD4jO1xcIlxyXG4qXXwoXFxbYS1mQS1GMC05XXsyfSkpKihbXiw9Kzw+IztcXCJcclxuKiBdfChcXFthLWZBLUYwLTldezJ9KSkpPykpKSonOwogICAgfSB9CgogICAgbGVhZiBMb2NhbEROIHsgdHlwZSBzdHJpbmcgeyAgIC8vIExvY2FsUkROICwgeyBSRE5TZXBhcmF0b3IgLCBMb2NhbFJETiB9ICAgIFJETlNlcGFyYXRvciBpcyBhIHNpbmdsZSAsIG5vIHNwYWNlIG9yIFxSIGFsbG93ZWQKICAgICAgLy8gIExvY2FsUkROKCxMb2NhbFJETikqCiAgICAgIHBhdHRlcm4gJ1tBLVpdW14sPSs8PiM7XFwiXHJcbiouXSo9KFteLD0rPD4jO1xcIlxyXG4qIF18KFxcW2EtZkEtRjAtOV17Mn0pKSgoW14sPSs8PiM7XFwiXHJcbipdfChcXFthLWZBLUYwLTldezJ9KSkqKFteLD0rPD4jO1xcIlxyXG4qIF18KFxcW2EtZkEtRjAtOV17Mn0pKSk/KCxbQS1aXVteLD0rPD4jO1xcIlxyXG4qLl0qPShbXiw9Kzw+IztcXCJcclxuKiBdfChcXFthLWZBLUYwLTldezJ9KSkoKFteLD0rPD4jO1xcIlxyXG4qXXwoXFxbYS1mQS1GMC05XXsyfSkpKihbXiw9Kzw+IztcXCJcclxuKiBdfChcXFthLWZBLUYwLTldezJ9KSkpPykqJzsKICAgIH0gfQoKICAgIGxlYWYgZnVsbExvY2FsUkROIHsgdHlwZSBzdHJpbmcgeyAgIC8vIHNhbWUgYXMgZnVsbExvY2FsRE5BdHRyaWJ1dGVUeXBlQW5kVmFsdWUKICAgICAgcGF0dGVybiAnKFtBLVpdW14sPSs8PiM7XFwiXHJcbiouXSp8KFtBLVpdW14sPSs8PiM7XFwiXHJcbiouXSpcLlthLXpdW14sPSs8PiM7XFwiXHJcbiouXSopKT0oKFteLD0rPD4jO1xcIlxyXG4qIF18KFxcW2EtZkEtRjAtOV17Mn0pKSgoW14sPSs8PiM7XFwiXHJcbipdfChcXFthLWZBLUYwLTldezJ9KSkqKFteLD0rPD4jO1xcIlxyXG4qIF18KFxcW2EtZkEtRjAtOV17Mn0pKSk/KSc7CiAgICB9IH0KCiAgICBsZWFmIExvY2FsUkROIHsgdHlwZSBzdHJpbmcgeyAgIC8vIHNhbWUgYXMgTG9jYWxETkF0dHJpYnV0ZVR5cGVBbmRWYWx1ZQogICAgICBwYXR0ZXJuICdbQS1aXVteLD0rPD4jO1xcIlxyXG4qLl0qPShbXiw9Kzw+IztcXCJcclxuKiBdfChcXFthLWZBLUYwLTldezJ9KSkoKFteLD0rPD4jO1xcIlxyXG4qXXwoXFxbYS1mQS1GMC05XXsyfSkpKihbXiw9Kzw+IztcXCJcclxuKiBdfChcXFthLWZBLUYwLTldezJ9KSkpPyc7CiAgICB9IH0KCiAgICBsZWFmIGZ1bGxMb2NhbEROQXR0cmlidXRlVHlwZUFuZFZhbHVlIHsgdHlwZSBzdHJpbmcgeyAvLyBMb2NhbEROQXR0cmlidXRlVHlwZSAsIEF0dHJpYnV0ZVR5cGVBbmRWYWx1ZVNlcGFyYXRvciAsIFJlZ3VsYXJBdHRyaWJ1dGVWYWx1ZQogICAgICAvLyBwYXR0ZXJuIExvY2FsRE5BdHRyaWJ1dGVUeXBlPVJlZ3VsYXJBdHRyaWJ1dGVWYWx1ZQogICAgICBwYXR0ZXJuICcoW0EtWl1bXiw9Kzw+IztcXCJcclxuKi5dKnwoW0EtWl1bXiw9Kzw+IztcXCJcclxuKi5dKlwuW2Etel1bXiw9Kzw+IztcXCJcclxuKi5dKikpPSgoW14sPSs8PiM7XFwiXHJcbiogXXwoXFxbYS1mQS1GMC05XXsyfSkpKChbXiw9Kzw+IztcXCJcclxuKl18KFxcW2EtZkEtRjAtOV17Mn0pKSooW14sPSs8PiM7XFwiXHJcbiogXXwoXFxbYS1mQS1GMC05XXsyfSkpKT8pJzsKICAgIH0gfQoKICAgICAgLy8gbGltaXRhdGlvbjogTmFtZXNPZkNsYXNzQW5kTmFtaW5nQXR0cmlidXRlbm90IHN1cHBvcnRlZCBNZS5teWtleT0xCiAgICBsZWFmIExvY2FsRE5BdHRyaWJ1dGVUeXBlQW5kVmFsdWUgeyB0eXBlIHN0cmluZyB7CiAgICAgIC8vIGVibmYxICAgICAgICAgIExvY2FsRE5BdHRyaWJ1dGVUeXBlICwgQXR0cmlidXRlVHlwZUFuZFZhbHVlU2VwYXJhdG9yICwgUmVndWxhckF0dHJpYnV0ZVZhbHVlCiAgICAgIC8vIGVibmYyLWxpbWl0ZWQgIE5hbWVPZkNsYXNzV2l0aElkQXR0cmlidXRlICwgQXR0cmlidXRlVHlwZUFuZFZhbHVlU2VwYXJhdG9yICwgUmVndWxhckF0dHJpYnV0ZVZhbHVlCiAgICAgIC8vIHBhdHRlcm4gICAgICAgIE5hbWVPZkNsYXNzV2l0aElkQXR0cmlidXRlPVJlZ3VsYXJBdHRyaWJ1dGVWYWx1ZQogICAgICBwYXR0ZXJuICdbQS1aXVteLD0rPD4jO1xcIlxyXG4qLl0qPShbXiw9Kzw+IztcXCJcclxuKiBdfChcXFthLWZBLUYwLTldezJ9KSkoKFteLD0rPD4jO1xcIlxyXG4qXXwoXFxbYS1mQS1GMC05XXsyfSkpKihbXiw9Kzw+IztcXCJcclxuKiBdfChcXFthLWZBLUYwLTldezJ9KSkpPyc7CiAgICB9IH0KCiAgICBsZWFmIExvY2FsRE5BdHRyaWJ1dGVUeXBlIHsgdHlwZSBzdHJpbmcgeyAgIC8vIE5hbWVPZkNsYXNzV2l0aElkQXR0cmlidXRlIHwgTmFtZXNPZkNsYXNzQW5kTmFtaW5nQXR0cmlidXRlICBSRE5TZXBhcmF0b3IgaXMgYSBzaW5nbGUgLCBubyBzcGFjZSBvciBcUiBhbGxvd2VkCiAgICAgIC8vICBOYW1lT2ZDbGFzc1dpdGhJZEF0dHJpYnV0ZXxOYW1lc09mQ2xhc3NBbmROYW1pbmdBdHRyaWJ1dGUKICAgICAgcGF0dGVybiAnW0EtWl1bXiw9Kzw+IztcXCJcclxuKi5dKnwoW0EtWl1bXiw9Kzw+IztcXCJcclxuKi5dKlwuW2Etel1bXiw9Kzw+IztcXCJcclxuKi5dKiknOwogICAgfSB9CgogICAgbGVhZiBSZWd1bGFyQXR0cmlidXRlVmFsdWUgeyB0eXBlIHN0cmluZyB7ICAgICAgIC8vICggQXR0cmlidXRlVmFsdWVDaGFyIC0gU3BhY2VDaGFyICkgLCBbIHsgQXR0cmlidXRlVmFsdWVDaGFyIH0gLCAoIEF0dHJpYnV0ZVZhbHVlQ2hhciAtIFNwYWNlQ2hhciApIF0KICAgICAgcGF0dGVybiAnKFteLD0rPD4jO1xcIlxyXG4qIF18KFxcW2EtZkEtRjAtOV17Mn0pKSgoW14sPSs8PiM7XFwiXHJcbipdfChcXFthLWZBLUYwLTldezJ9KSkqKFteLD0rPD4jO1xcIlxyXG4qIF18KFxcW2EtZkEtRjAtOV17Mn0pKSk/JyA7CiAgICB9IH0KCiAgICBsZWFmIE5hbWVzT2ZDbGFzc0FuZE5hbWluZ0F0dHJpYnV0ZSAgeyB0eXBlIHN0cmluZyB7ICAvLyBDbGFzc05hbWUgLCBDbGFzc05hbWluZ0F0dHJpYnV0ZVNlcGFyYXRvciAsIE5hbWluZ0F0dHJpYnV0ZU5hbWUKICAgICAgLy8gcGF0dGVybjogQ2xhc3NOYW1lXC5OYW1pbmdBdHRyaWJ1dGVOYW1lCiAgICAgIHBhdHRlcm4gJ1tBLVpdW14sPSs8PiM7XFwiXHJcbiouXSpcLlthLXpdW14sPSs8PiM7XFwiXHJcbiouXSonIDsKICAgIH0gfQoKICAgIGxlYWYgcmVzdHJpY3RpdmVDbGFzc05hbWUgeyB0eXBlIHN0cmluZyB7ICAgICAvLwogICAgICBwYXR0ZXJuICdbYS16QS1aXVthLXpBLVowLTktX10qJyA7CiAgICB9IH0KCiAgICBsZWFmIENsYXNzTmFtZSB7IHR5cGUgc3RyaW5nIHsgICAgIC8vIENhcGl0YWxMZXR0ZXJDaGFyICwgeyBMb2NhbEROQXR0cmlidXRlVHlwZUNoYXIgfQogICAgICBwYXR0ZXJuICdbQS1aXVteLD0rPD4jO1xcIlxyXG4qLl0qJyA7CiAgICB9IH0KCiAgICBsZWFmIE5hbWluZ0F0dHJpYnV0ZU5hbWUgeyB0eXBlIHN0cmluZyB7ICAgLy8gU21hbGxMZXR0ZXJDaGFyICwgeyBMb2NhbEROQXR0cmlidXRlVHlwZUNoYXIgfQogICAgICBwYXR0ZXJuICdbYS16XVteLD0rPD4jO1xcIlxyXG4qLl0qJyA7CiAgICB9IH0KCiAgKi8KICB0eXBlZGVmIERpc3Rpbmd1aXNoZWROYW1lIHsKICAgIHR5cGUgc3RyaW5nIHsKICAgICAgcGF0dGVybiAnW0EtWl1bXiw9Kzw+IztcXCJcclxuKi5dKj0oW14sPSs8PiM7XFwiXHJcbiogXXwnCiAgICAgICsgJyhcXFthLWZBLUYwLTldezJ9KSkoKFteLD0rPD4jO1xcIlxyXG4qXXwoXFxbYS1mQS1GMC05XXsyfSkpKicKICAgICAgKyAnKFteLD0rPD4jO1xcIlxyXG4qIF18KFxcW2EtZkEtRjAtOV17Mn0pKSk/JwogICAgICArICcoLFtBLVpdW14sPSs8PiM7XFwiXHJcbiouXSo9KFteLD0rPD4jO1xcIlxyXG4qIF18KFxcW2EtZkEtRjAtOV17Mn0pKScKICAgICAgKyAnKChbXiw9Kzw+IztcXCJcclxuKl18KFxcW2EtZkEtRjAtOV17Mn0pKSonCiAgICAgICsgJyhbXiw9Kzw+IztcXCJcclxuKiBdfChcXFthLWZBLUYwLTldezJ9KSkpPykqJzsKICAgIH0KICAgIGRlc2NyaXB0aW9uICJSZXByZXNlbnRzIHRoZSAzR1BQIHN0YW5kYXJkIGZvciBEaXN0aW5ndWlzaGVkTmFtZS4KCiAgICAgIExpbWl0YXRpb25zOgogICAgICAtIFJETlNlcGFyYXRvcjogZG9uJ3QgYWxsb3cgU3BhY2VDaGFyIG9yIENhcnJpYWdlUmV0dXJuQ2hhcgogICAgICAtIE51bGxETjogRGlzYWxsb3cgbnVsbEROIHRoYXQgaXMgdGhlIHNhbWUgYXMgbm90IHByb3ZpZGluZyBhIEROCiAgICAgIC0gTmFtZXNPZkNsYXNzQW5kTmFtaW5nQXR0cmlidXRlIGZvcm1hdCBub3QgYWxsb3dlZAogICAgICAgIChlZy4gTWFuYWdlZEVsZW1lbnQubXlrZXk9MzQ1NDM2KSI7CiAgICByZWZlcmVuY2UgICIzR1BQIFRTIDMyLjMwMCI7CiAgfQoKICB0eXBlZGVmIFFPZmZzZXRSYW5nZSAgewogICAgdHlwZSBpbnQ4IHsKICAgICAgcmFuZ2UgIi0yNCB8IC0yMiB8IC0yMCB8IC0xOCB8IC0xNiB8IC0xNCB8IC0xMiB8IC0xMCB8IC04IHwgLTYgfCAiICsKICAgICAgICAiIC01IHwgLTQgfCAtMyB8IC0yIHwgLTEgfCAwIHwgMSB8IDIgfCAzIHwgNCB8IDUgfCA2IHwgOCB8IDEwIHwgIiArCiAgICAgICAgIiAxMiB8IDE0IHwgMTYgfCAxOCB8IDIwIHwgMjIgfCAyNCI7CiAgICB9CiAgICB1bml0cyBkQjsKICB9CgogIGdyb3VwaW5nIFJlcG9ydGluZ0N0cmwgewogICAgY2hvaWNlIHJlcG9ydGluZ0N0cmwgewogICAgICBtYW5kYXRvcnkgdHJ1ZTsKICAgICAgZGVzY3JpcHRpb24gIgogICAgICAgIFRoaXMgY2hvaWNlIGRlZmluZXMgdGhlIG1ldGhvZCBmb3IgcmVwb3J0aW5nIGNvbGxlY3RlZCBwZXJmb3JtYW5jZQogICAgICAgIG1ldHJpY3MgdG8gTW5TIGNvbnN1bWVycyBhcyB3ZWxsIGFzIHRoZSBwYXJhbWV0ZXJzIGZvciBjb25maWd1cmluZyB0aGUKICAgICAgICByZXBvcnRpbmcgZnVuY3Rpb24uIEl0IGlzIGEgY2hvaWNlIGJldHdlZW4gdGhlIGNvbnRyb2wgcGFyYW1ldGVyCiAgICAgICAgcmVxdWlyZWQgZm9yIHRoZSByZXBvcnRpbmcgbWV0aG9kcywgd2hvc2UgcHJlc2VuY2Ugc2VsZWN0cyB0aGUKICAgICAgICByZXBvcnRpbmcgbWV0aG9kIGFzIGZvbGxvd3M6CgogICAgICAgIC0gV2hlbiBvbmx5IHRoZSBmaWxlUmVwb3J0aW5nUGVyaW9kIGF0dHJpYnV0ZSBpcyBwcmVzZW50LCB0aGUgTW5TCiAgICAgICAgcHJvZHVjZXIgc2hhbGwgc3RvcmUgZmlsZXMgb24gdGhlIE1uUyBwcm9kdWNlciBhdCBhIGxvY2F0aW9uIHNlbGVjdGVkCiAgICAgICAgYnkgdGhlIE1uUyBwcm9kdWNlciBhbmQsIG9uIGNvbmRpdGlvbiB0aGF0IGFuIGFwcHJvcHJpYXRlIHN1YnNjcmlwdGlvbgogICAgICAgIGlzIGluIHBsYWNlLCBpbmZvcm0gdGhlIE1uUyBjb25zdW1lciBhYm91dCB0aGUgYXZhaWxhYmlsaXR5IG9mIG5ldwogICAgICAgIGZpbGVzIGFuZCB0aGUgZmlsZSBsb2NhdGlvbiB1c2luZyB0aGUgbm90aWZ5RmlsZVJlYWR5IG5vdGlmaWNhdGlvbi4KICAgICAgICBJbiBjYXNlIHRoZSBwcmVwYXJhdGlvbiBvZiBhIGZpbGUgZmFpbHMsICdub3RpZnlGaWxlUHJlcGFyYXRpb25FcnJvcicKICAgICAgICBzaGFsbCBiZSBzZW50IGluc3RlYWQuCgogICAgICAgIC0gV2hlbiB0aGUgJ2ZpbGVSZXBvcnRpbmdQZXJpb2QnIGFuZCAnbm90aWZpY2F0aW9uUmVjaXBpZW50QWRkcmVzcycKICAgICAgICBhdHRyaWJ1dGVzIGFyZSBwcmVzZW50LCB0aGVuIHRoZSBNblMgcHJvZHVjZXIgc2hhbGwgYmVoYXZlIGxpa2UKICAgICAgICBkZXNjcmliZWQgZm9yIHRoZSBjYXNlIHRoYXQgb25seSB0aGUgJ2ZpbGVSZXBvcnRpbmdQZXJpb2QnIGlzIHByZXNlbnQuCiAgICAgICAgSW4gYWRkaXRpb24sIHRoZSBNblMgcHJvZHVjZXIgc2hhbGwgY3JlYXRlIG9uIGJlaGFsZiBvZiB0aGUgTW5TCiAgICAgICAgY29uc3VtZXIgYSBzdWJzY3JpcHRpb24sIHVzaW5nICdOdGZTdWJzY3JpcHRpb25Db250cm9sJywgZm9yIHRoZQogICAgICAgIG5vdGlmaWNhdGlvbiB0eXBlcyAnbm90aWZ5TU9JQ3JlYXRpb24nIGFuZCAnbm90aWZ5TU9JRGVsZXRpb24nIHJlbGF0ZWQKICAgICAgICB0byB0aGUgJ0ZpbGUnIGluc3RhbmNlcyB0aGF0IHdpbGwgYmUgcHJvZHVjZWQgbGF0ZXIuIEluIGNhc2UgYW4gZXhpc3RpbmcKICAgICAgICBzdWJzY3JpcHRpb24gZG9lcyBhbHJlYWR5IGluY2x1ZGUgdGhlICdGaWxlJyBpbnN0YW5jZXMgdG8gYmUgcHJvZHVjZWQsCiAgICAgICAgbm8gbmV3IHN1YnNjcmlwdGlvbiBzaGFsbCBiZSBjcmVhdGVkLiBUaGUKICAgICAgICAnbm90aWZpY2F0aW9uUmVjaXBpZW50QWRkcmVzcycgYXR0cmlidXRlIGluIHRoZSBjcmVhdGVkCiAgICAgICAgJ050ZlN1YnNjcmlwdGlvbkNvbnRyb2wnIGluc3RhbmNlIHNoYWxsIGJlIHNldCB0byB0aGUgdmFsdWUgb2YgdGhlCiAgICAgICAgJ25vdGlmaWNhdGlvblJlY2lwaWVudEFkZHJlc3MnIGluIHRoZSByZWxhdGVkICdQZXJmTWV0cmljSm9iJy4gVGhpcwogICAgICAgIGZlYXR1cmUgaXMgY2FsbGVkIGltcGxpY2l0IG5vdGlmaWNhdGlvbiBzdWJzY3JpcHRpb24sIGFzIG9wcG9zZWQgdG8gdGhlCiAgICAgICAgY2FzZSB3aGVyZSB0aGUgTW5TIGNvbnN1bWVyIGNyZWF0ZXMgdGhlIHN1YnNjcmlwdGlvbiAoZXhwbGljaXQKICAgICAgICBub3RpZmljYXRpb24gc3Vic2NyaXB0aW9uKS4gV2hlbiB0aGUgcmVsYXRlZCAnUGVyZk1ldHJpY0pvYicgaXMKICAgICAgICBkZWxldGVkLCB0aGUgJ050ZlN1YnNjcmlwdGlvbkNvbnRyb2wnIGluc3RhbmNlIGNyZWF0ZWQgZHVlIHRvIHRoZQogICAgICAgIHJlcXVlc3QgZm9yIGltcGxpY2l0IHN1YnNjcmlwdGlvbiBzaGFsbCBiZSBkZWxldGVkIGFzIHdlbGwuCgogICAgICAgIC0gV2hlbiBvbmx5IHRoZSBmaWxlUmVwb3J0aW5nUGVyaW9kIGFuZCBmaWxlTG9jYXRpb24gYXR0cmlidXRlcyBhcmUKICAgICAgICBwcmVzZW50LCB0aGUgTW5TIHByb2R1Y2VyIHNoYWxsIHN0b3JlIHRoZSBmaWxlcyBvbiBhIE1uUyBjb25zdW1lciwgdGhhdAogICAgICAgIGNhbiBiZSBhbnkgZW50aXR5IHN1Y2ggYXMgYSBmaWxlIHNlcnZlciwgYXQgdGhlIGxvY2F0aW9uIHNwZWNpZmllZCBieQogICAgICAgIGZpbGVMb2NhdGlvbi4gTm8gbm90aWZpY2F0aW9uIGlzIGVtaXR0ZWQgYnkgdGhlIE1uUyBwcm9kdWNlci4KCiAgICAgICAgLSBXaGVuIG9ubHkgdGhlIHN0cmVhbVRhcmdldCBhdHRyaWJ1dGUgaXMgcHJlc2VudCwgdGhlIE1uUyBwcm9kdWNlcgogICAgICAgIHNoYWxsIHN0cmVhbSB0aGUgZGF0YSB0byB0aGUgbG9jYXRpb24gc3BlY2lmaWVkIGJ5IHN0cmVhbVRhcmdldC4KCiAgICAgICAgRm9yIHRoZSBmaWxlLWJhc2VkIHJlcG9ydGluZyBtZXRob2RzIHRoZSBmaWxlUmVwb3J0aW5nUGVyaW9kIGF0dHJpYnV0ZQogICAgICAgIHNwZWNpZmllcyB0aGUgdGltZSB3aW5kb3cgZHVyaW5nIHdoaWNoIGNvbGxlY3RlZCBtZWFzdXJlbWVudHMgYXJlCiAgICAgICAgc3RvcmVkIGludG8gdGhlIHNhbWUgZmlsZSBiZWZvcmUgdGhlIGZpbGUgaXMgY2xvc2VkIGFuZCBhIG5ldyBmaWxlIGlzCiAgICAgICAgb3BlbmVkLiI7CgogICAgICBjYXNlIGZpbGUtYmFzZWQtcmVwb3J0aW5nIHsKICAgICAgICBsZWFmIGZpbGVSZXBvcnRpbmdQZXJpb2QgewogICAgICAgICAgdHlwZSB1aW50MzIgewogICAgICAgICAgICByYW5nZSAxLi5tYXg7CiAgICAgICAgICB9CiAgICAgICAgICB1bml0cyBtaW51dGVzOwogICAgICAgICAgbWFuZGF0b3J5IHRydWU7CiAgICAgICAgICBkZXNjcmlwdGlvbiAiRm9yIHRoZSBmaWxlLWJhc2VkIHJlcG9ydGluZyBtZXRob2QgdGhpcyBpcyB0aGUgdGltZQogICAgICAgICAgICB3aW5kb3cgZHVyaW5nIHdoaWNoIGNvbGxlY3RlZCBtZWFzdXJlbWVudHMgYXJlIHN0b3JlZCBpbnRvIHRoZSBzYW1lCiAgICAgICAgICAgIGZpbGUgYmVmb3JlIHRoZSBmaWxlIGlzIGNsb3NlZCBhbmQgYSBuZXcgZmlsZSBpcyBvcGVuZWQuCiAgICAgICAgICAgIFRoZSB0aW1lLXBlcmlvZCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgdGhlIGdyYW51bGFyaXR5UGVyaW9kLgoKICAgICAgICAgICAgQXBwbGljYWJsZSB3aGVuIHRoZSBmaWxlLWJhc2VkIHJlcG9ydGluZyBtZXRob2QgaXMgc3VwcG9ydGVkLiI7CiAgICAgICAgfQogICAgICAgIGNob2ljZSByZXBvcnRpbmctdGFyZ2V0IHsKICAgICAgICAgIGNhc2UgZmlsZS10YXJnZXQgewogICAgICAgICAgICBsZWFmIGZpbGVMb2NhdGlvbiB7CiAgICAgICAgICAgIHR5cGUgc3RyaW5nIDsKICAgICAgICAgICAgZGVzY3JpcHRpb24gIkFwcGxpY2FibGUgYW5kIG11c3QgYmUgcHJlc2VudCB3aGVuIHRoZSBmaWxlLWJhc2VkCiAgICAgICAgICAgICAgcmVwb3J0aW5nIG1ldGhvZCBpcyBzdXBwb3J0ZWQsIGFuZCB0aGUgZmlsZXMgYXJlIHN0b3JlZCBvbiB0aGUgTW5TCiAgICAgICAgICAgICAgY29uc3VtZXIuIjsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgY2FzZSBub3RpZmljYXRpb24tdGFyZ2V0IHsKICAgICAgICAgICAgbGVhZiBub3RpZmljYXRpb25SZWNpcGllbnRBZGRyZXNzIHsKICAgICAgICAgICAgdHlwZSBzdHJpbmc7CiAgICAgICAgICAgIGRlc2NyaXB0aW9uICJNdXN0IGJlIHByZXNlbnQgd2hlbiB0aGUgbm90aWZpY2F0aW9uLWJhc2VkIHJlcG9ydGluZwogICAgICAgICAgICAgIG1ldGhvZCBpcyBzdXBwb3J0ZWQsIGFuZCB0aGUgdGhlIGZpbGVzIGFyZSBhdmFpbGFibGUgYXMKICAgICAgICAgICAgICBub3RpZmljYXRpb25zIGZvciB0aGUgTW5TIGNvbnN1bWVyIHRvIHN1YnNjcmliZSB0by4iOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgZGVzY3JpcHRpb24gIldoZW4gbmV0aWhlciBmaWxlTG9jYXRpb24gb3Igbm90aWZpY2F0aW9uUmVjaXBpZW50QWRkcmVzcwogICAgICAgICAgYXJlIHByZXNlbnQsIHRoZSBmaWxlcyBhcmUgc3RvcmVkIGFuZCBhdmFpbGFibGUgdG8gdGhlIE1uUyBjb25zdW1lcgogICAgICAgICAgaWYgdGhlIE1uUyBzdWJzY3JpYmVzIHRvIHRoZSBub3RpZnlGaWxlUmVhZHkgbm90aWZpY2F0aW9uLiI7CiAgICAgICAgfQogICAgICB9CgogICAgICBjYXNlIHN0cmVhbS1iYXNlZC1yZXBvcnRpbmcgewogICAgICAgIGxlYWYgc3RyZWFtVGFyZ2V0IHsKICAgICAgICAgIHR5cGUgc3RyaW5nOwogICAgICAgICAgbWFuZGF0b3J5IHRydWU7CiAgICAgICAgICBkZXNjcmlwdGlvbiAiQXBwbGljYWJsZSB3aGVuIHN0cmVhbS1iYXNlZCByZXBvcnRpbmcgbWV0aG9kIGlzCiAgICAgICAgICAgIHN1cHBvcnRlZC4iOwogICAgICAgIH0KICAgICAgfQogICAgfQogIH0KfQo=
+ietf-geo-location	urn:ietf:params:xml:ns:yang:ietf-geo-location	\N	[]	2022-02-11	bW9kdWxlIGlldGYtZ2VvLWxvY2F0aW9uIHsKICAgIHlhbmctdmVyc2lvbiAxLjE7CiAgICBuYW1lc3BhY2UgInVybjppZXRmOnBhcmFtczp4bWw6bnM6eWFuZzppZXRmLWdlby1sb2NhdGlvbiI7CiAgICBwcmVmaXggZ2VvOwogICAgaW1wb3J0IGlldGYteWFuZy10eXBlcyB7CiAgICBwcmVmaXggeWFuZzsKICAgIHJlZmVyZW5jZSAiUkZDIDY5OTE6IENvbW1vbiBZQU5HIERhdGEgVHlwZXMiOwogICAgfQoKICAgIG9yZ2FuaXphdGlvbgogICAgIklFVEYgTkVUTU9EIFdvcmtpbmcgR3JvdXAgKE5FVE1PRCkiOwogICAgY29udGFjdAogICAgIldHIFdlYjogICA8aHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy93Zy9uZXRtb2QvPgogICAgV0cgTGlzdDogIDxtYWlsdG86bmV0bW9kQGlldGYub3JnPgoKICAgIEVkaXRvcjogICBDaHJpc3RpYW4gSG9wcHMKICAgICAgICAgICAgICAgIDxtYWlsdG86Y2hvcHBzQGNob3Bwcy5vcmc+IjsKCiAgICBkZXNjcmlwdGlvbgogICAgIlRoaXMgbW9kdWxlIGRlZmluZXMgYSBncm91cGluZyBvZiBhIGNvbnRhaW5lciBvYmplY3QgZm9yCiAgICBzcGVjaWZ5aW5nIGEgbG9jYXRpb24gb24gb3IgYXJvdW5kIGFuIGFzdHJvbm9taWNhbCBvYmplY3QgKGUuZy4sCiAgICAnZWFydGgnKS4KCiAgICBUaGUga2V5IHdvcmRzICdNVVNUJywgJ01VU1QgTk9UJywgJ1JFUVVJUkVEJywgJ1NIQUxMJywgJ1NIQUxMCiAgICBOT1QnLCAnU0hPVUxEJywgJ1NIT1VMRCBOT1QnLCAnUkVDT01NRU5ERUQnLCAnTk9UIFJFQ09NTUVOREVEJywKICAgICdNQVknLCBhbmQgJ09QVElPTkFMJyBpbiB0aGlzIGRvY3VtZW50IGFyZSB0byBiZSBpbnRlcnByZXRlZCBhcwogICAgZGVzY3JpYmVkIGluIEJDUCAxNCAoUkZDIDIxMTkpIChSRkMgODE3NCkgd2hlbiwgYW5kIG9ubHkgd2hlbiwKICAgIHRoZXkgYXBwZWFyIGluIGFsbCBjYXBpdGFscywgYXMgc2hvd24gaGVyZS4KCiAgICBDb3B5cmlnaHQgKGMpIDIwMjIgSUVURiBUcnVzdCBhbmQgdGhlIHBlcnNvbnMgaWRlbnRpZmllZCBhcwogICAgYXV0aG9ycyBvZiB0aGUgY29kZS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCgogICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3JtcywKICAgIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sIGlzIHBlcm1pdHRlZCBwdXJzdWFudCB0bywKICAgIGFuZCBzdWJqZWN0IHRvIHRoZSBsaWNlbnNlIHRlcm1zIGNvbnRhaW5lZCBpbiwgdGhlCiAgICBSZXZpc2VkIEJTRCBMaWNlbnNlIHNldCBmb3J0aCBpbiBTZWN0aW9uIDQuYyBvZiB0aGUKICAgIElFVEYgVHJ1c3QncyBMZWdhbCBQcm92aXNpb25zIFJlbGF0aW5nIHRvIElFVEYgRG9jdW1lbnRzCiAgICAoaHR0cHM6Ly90cnVzdGVlLmlldGYub3JnL2xpY2Vuc2UtaW5mbykuCgogICAgVGhpcyB2ZXJzaW9uIG9mIHRoaXMgWUFORyBtb2R1bGUgaXMgcGFydCBvZiBSRkMgOTE3OQogICAgKGh0dHBzOi8vd3d3LnJmYy1lZGl0b3Iub3JnL2luZm8vcmZjOTE3OSk7IHNlZSB0aGUgUkZDIGl0c2VsZgogICAgZm9yIGZ1bGwgbGVnYWwgbm90aWNlcy4iOwoKICAgIHJldmlzaW9uIDIwMjItMDItMTEgewogICAgZGVzY3JpcHRpb24KICAgICAgICAiSW5pdGlhbCBSZXZpc2lvbiI7CiAgICByZWZlcmVuY2UKICAgICAgICAiUkZDIDkxNzk6IEEgWUFORyBHcm91cGluZyBmb3IgR2VvZ3JhcGhpYyBMb2NhdGlvbnMiOwogICAgfQoKICAgIGZlYXR1cmUgYWx0ZXJuYXRlLXN5c3RlbXMgewogICAgZGVzY3JpcHRpb24KICAgICAgICAiVGhpcyBmZWF0dXJlIG1lYW5zIHRoZSBkZXZpY2Ugc3VwcG9ydHMgc3BlY2lmeWluZyBsb2NhdGlvbnMKICAgICAgICB1c2luZyBhbHRlcm5hdGUgc3lzdGVtcyBmb3IgcmVmZXJlbmNlIGZyYW1lcy4iOwogICAgfQoKICAgIGdyb3VwaW5nIGdlby1sb2NhdGlvbiB7CiAgICBkZXNjcmlwdGlvbgogICAgICAgICJHcm91cGluZyB0byBpZGVudGlmeSBhIGxvY2F0aW9uIG9uIGFuIGFzdHJvbm9taWNhbCBvYmplY3QuIjsKCiAgICBjb250YWluZXIgZ2VvLWxvY2F0aW9uIHsKICAgICAgICBkZXNjcmlwdGlvbgogICAgICAgICJBIGxvY2F0aW9uIG9uIGFuIGFzdHJvbm9taWNhbCBib2R5IChlLmcuLCAnZWFydGgnKQogICAgICAgIHNvbWV3aGVyZSBpbiBhIHVuaXZlcnNlLiI7CgogICAgICAgIGNvbnRhaW5lciByZWZlcmVuY2UtZnJhbWUgewogICAgICAgIGRlc2NyaXB0aW9uCiAgICAgICAgICAgICJUaGUgRnJhbWUgb2YgUmVmZXJlbmNlIGZvciB0aGUgbG9jYXRpb24gdmFsdWVzLiI7CgogICAgICAgIGxlYWYgYWx0ZXJuYXRlLXN5c3RlbSB7CiAgICAgICAgICAgIGlmLWZlYXR1cmUgImFsdGVybmF0ZS1zeXN0ZW1zIjsKICAgICAgICAgICAgdHlwZSBzdHJpbmc7CiAgICAgICAgICAgIGRlc2NyaXB0aW9uCiAgICAgICAgICAgICJUaGUgc3lzdGVtIGluIHdoaWNoIHRoZSBhc3Ryb25vbWljYWwgYm9keSBhbmQKICAgICAgICAgICAgZ2VvZGV0aWMtZGF0dW0gaXMgZGVmaW5lZC4gIE5vcm1hbGx5LCB0aGlzIHZhbHVlIGlzIG5vdAogICAgICAgICAgICBwcmVzZW50IGFuZCB0aGUgc3lzdGVtIGlzIHRoZSBuYXR1cmFsIHVuaXZlcnNlOyBob3dldmVyLAogICAgICAgICAgICB3aGVuIHByZXNlbnQsIHRoaXMgdmFsdWUgYWxsb3dzIGZvciBzcGVjaWZ5aW5nIGFsdGVybmF0ZQogICAgICAgICAgICBzeXN0ZW1zIChlLmcuLCB2aXJ0dWFsIHJlYWxpdGllcykuICBBbiBhbHRlcm5hdGUtc3lzdGVtCiAgICAgICAgICAgIG1vZGlmaWVzIHRoZSBkZWZpbml0aW9uIChidXQgbm90IHRoZSB0eXBlKSBvZiB0aGUgb3RoZXIKICAgICAgICAgICAgdmFsdWVzIGluIHRoZSByZWZlcmVuY2UgZnJhbWUuIjsKICAgICAgICB9CiAgICAgICAgbGVhZiBhc3Ryb25vbWljYWwtYm9keSB7CiAgICAgICAgICAgIHR5cGUgc3RyaW5nIHsKICAgICAgICAgICAgcGF0dGVybiAnWyAtQFxbLVxeXy1+XSonOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGRlZmF1bHQgImVhcnRoIjsKICAgICAgICAgICAgZGVzY3JpcHRpb24KICAgICAgICAgICAgIkFuIGFzdHJvbm9taWNhbCBib2R5IGFzIG5hbWVkIGJ5IHRoZSBJbnRlcm5hdGlvbmFsCiAgICAgICAgICAgIEFzdHJvbm9taWNhbCBVbmlvbiAoSUFVKSBvciBhY2NvcmRpbmcgdG8gdGhlIGFsdGVybmF0ZQogICAgICAgICAgICBzeXN0ZW0gaWYgc3BlY2lmaWVkLiAgRXhhbXBsZXMgaW5jbHVkZSAnc3VuJyAob3VyIHN0YXIpLAogICAgICAgICAgICAnZWFydGgnIChvdXIgcGxhbmV0KSwgJ21vb24nIChvdXIgbW9vbiksICdlbmNlbGFkdXMnIChhCiAgICAgICAgICAgIG1vb24gb2YgU2F0dXJuKSwgJ2NlcmVzJyAoYW4gYXN0ZXJvaWQpLCBhbmQKICAgICAgICAgICAgJzY3cC9jaHVyeXVtb3YtZ2VyYXNpbWVua28gKGEgY29tZXQpLiAgVGhlIEFTQ0lJIHZhbHVlCiAgICAgICAgICAgIFNIT1VMRCBoYXZlIHVwcGVyY2FzZSBjb252ZXJ0ZWQgdG8gbG93ZXJjYXNlIGFuZCBub3QKICAgICAgICAgICAgaW5jbHVkZSBjb250cm9sIGNoYXJhY3RlcnMgKGkuZS4sIHZhbHVlcyAzMi4uNjQsIGFuZAogICAgICAgICAgICA5MS4uMTI2KS4gIEFueSBwcmVjZWRpbmcgJ3RoZScgaW4gdGhlIG5hbWUgU0hPVUxEIE5PVCBiZQogICAgICAgICAgICBpbmNsdWRlZC4iOwogICAgICAgICAgICByZWZlcmVuY2UKICAgICAgICAgICAgImh0dHBzOi8vd3d3LmlhdS5vcmcvIjsKICAgICAgICB9CiAgICAgICAgY29udGFpbmVyIGdlb2RldGljLXN5c3RlbSB7CiAgICAgICAgICAgIGRlc2NyaXB0aW9uCiAgICAgICAgICAgICJUaGUgZ2VvZGV0aWMgc3lzdGVtIG9mIHRoZSBsb2NhdGlvbiBkYXRhLiI7CiAgICAgICAgICAgIGxlYWYgZ2VvZGV0aWMtZGF0dW0gewogICAgICAgICAgICB0eXBlIHN0cmluZyB7CiAgICAgICAgICAgICAgICBwYXR0ZXJuICdbIC1AXFstXF5fLX5dKic7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZGVzY3JpcHRpb24KICAgICAgICAgICAgICAgICJBIGdlb2RldGljLWRhdHVtIGRlZmluaW5nIHRoZSBtZWFuaW5nIG9mIGxhdGl0dWRlLAogICAgICAgICAgICAgICAgbG9uZ2l0dWRlLCBhbmQgaGVpZ2h0LiAgVGhlIGRlZmF1bHQgd2hlbiB0aGUKICAgICAgICAgICAgICAgIGFzdHJvbm9taWNhbCBib2R5IGlzICdlYXJ0aCcgaXMgJ3dncy04NCcsIHdoaWNoIGlzCiAgICAgICAgICAgICAgICB1c2VkIGJ5IHRoZSBHbG9iYWwgUG9zaXRpb25pbmcgU3lzdGVtIChHUFMpLiAgVGhlCiAgICAgICAgICAgICAgICBBU0NJSSB2YWx1ZSBTSE9VTEQgaGF2ZSB1cHBlcmNhc2UgY29udmVydGVkIHRvCiAgICAgICAgICAgICAgICBsb3dlcmNhc2UgYW5kIG5vdCBpbmNsdWRlIGNvbnRyb2wgY2hhcmFjdGVycwogICAgICAgICAgICAgICAgKGkuZS4sIHZhbHVlcyAzMi4uNjQsIGFuZCA5MS4uMTI2KS4gIFRoZSBJQU5BIHJlZ2lzdHJ5CiAgICAgICAgICAgICAgICBmdXJ0aGVyIHJlc3RyaWN0cyB0aGUgdmFsdWUgYnkgY29udmVydGluZyBhbGwgc3BhY2VzCiAgICAgICAgICAgICAgICAoJyAnKSB0byBkYXNoZXMgKCctJykuCiAgICAgICAgICAgICAgICBUaGUgc3BlY2lmaWNhdGlvbiBmb3IgdGhlIGdlb2RldGljLWRhdHVtIGluZGljYXRlcwogICAgICAgICAgICAgICAgaG93IGFjY3VyYXRlbHkgaXQgbW9kZWxzIHRoZSBhc3Ryb25vbWljYWwgYm9keSBpbgogICAgICAgICAgICAgICAgcXVlc3Rpb24sIGJvdGggZm9yIHRoZSAnaG9yaXpvbnRhbCcKICAgICAgICAgICAgICAgIGxhdGl0dWRlL2xvbmdpdHVkZSBjb29yZGluYXRlcyBhbmQgZm9yIGhlaWdodAogICAgICAgICAgICAgICAgY29vcmRpbmF0ZXMuIjsKICAgICAgICAgICAgcmVmZXJlbmNlCiAgICAgICAgICAgICAgICAiUkZDIDkxNzk6IEEgWUFORyBHcm91cGluZyBmb3IgR2VvZ3JhcGhpYyBMb2NhdGlvbnMsCiAgICAgICAgICAgICAgICBTZWN0aW9uIDYuMSI7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgbGVhZiBjb29yZC1hY2N1cmFjeSB7CiAgICAgICAgICAgIHR5cGUgZGVjaW1hbDY0IHsKICAgICAgICAgICAgICAgIGZyYWN0aW9uLWRpZ2l0cyA2OwogICAgICAgICAgICB9CiAgICAgICAgICAgIGRlc2NyaXB0aW9uCiAgICAgICAgICAgICAgICAiVGhlIGFjY3VyYWN5IG9mIHRoZSBsYXRpdHVkZS9sb25naXR1ZGUgcGFpciBmb3IKICAgICAgICAgICAgICAgIGVsbGlwc29pZGFsIGNvb3JkaW5hdGVzLCBvciB0aGUgWCwgWSwgYW5kIFogY29tcG9uZW50cwogICAgICAgICAgICAgICAgZm9yIENhcnRlc2lhbiBjb29yZGluYXRlcy4gIFdoZW4gY29vcmQtYWNjdXJhY3kgaXMKICAgICAgICAgICAgICAgIHNwZWNpZmllZCwgaXQgaW5kaWNhdGVzIGhvdyBwcmVjaXNlbHkgdGhlIGNvb3JkaW5hdGVzCiAgICAgICAgICAgICAgICBpbiB0aGUgYXNzb2NpYXRlZCBsaXN0IG9mIGxvY2F0aW9ucyBoYXZlIGJlZW4KICAgICAgICAgICAgICAgIGRldGVybWluZWQgd2l0aCByZXNwZWN0IHRvIHRoZSBjb29yZGluYXRlIHN5c3RlbQogICAgICAgICAgICAgICAgZGVmaW5lZCBieSB0aGUgZ2VvZGV0aWMtZGF0dW0uICBGb3IgZXhhbXBsZSwgdGhlcmUKICAgICAgICAgICAgICAgIG1pZ2h0IGJlIHVuY2VydGFpbnR5IGR1ZSB0byBtZWFzdXJlbWVudCBlcnJvciBpZiBhbgogICAgICAgICAgICAgICAgZXhwZXJpbWVudGFsIG1lYXN1cmVtZW50IHdhcyBtYWRlIHRvIGRldGVybWluZSBlYWNoCiAgICAgICAgICAgICAgICBsb2NhdGlvbi4iOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGxlYWYgaGVpZ2h0LWFjY3VyYWN5IHsKICAgICAgICAgICAgdHlwZSBkZWNpbWFsNjQgewogICAgICAgICAgICAgICAgZnJhY3Rpb24tZGlnaXRzIDY7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdW5pdHMgIm1ldGVycyI7CiAgICAgICAgICAgIGRlc2NyaXB0aW9uCiAgICAgICAgICAgICAgICAiVGhlIGFjY3VyYWN5IG9mIHRoZSBoZWlnaHQgdmFsdWUgZm9yIGVsbGlwc29pZGFsCiAgICAgICAgICAgICAgICBjb29yZGluYXRlczsgdGhpcyB2YWx1ZSBpcyBub3QgdXNlZCB3aXRoIENhcnRlc2lhbgogICAgICAgICAgICAgICAgY29vcmRpbmF0ZXMuICBXaGVuIGhlaWdodC1hY2N1cmFjeSBpcyBzcGVjaWZpZWQsIGl0CiAgICAgICAgICAgICAgICBpbmRpY2F0ZXMgaG93IHByZWNpc2VseSB0aGUgaGVpZ2h0cyBpbiB0aGUKICAgICAgICAgICAgICAgIGFzc29jaWF0ZWQgbGlzdCBvZiBsb2NhdGlvbnMgaGF2ZSBiZWVuIGRldGVybWluZWQKICAgICAgICAgICAgICAgIHdpdGggcmVzcGVjdCB0byB0aGUgY29vcmRpbmF0ZSBzeXN0ZW0gZGVmaW5lZCBieSB0aGUKICAgICAgICAgICAgICAgIGdlb2RldGljLWRhdHVtLiAgRm9yIGV4YW1wbGUsIHRoZXJlIG1pZ2h0IGJlCiAgICAgICAgICAgICAgICB1bmNlcnRhaW50eSBkdWUgdG8gbWVhc3VyZW1lbnQgZXJyb3IgaWYgYW4KICAgICAgICAgICAgICAgIGV4cGVyaW1lbnRhbCBtZWFzdXJlbWVudCB3YXMgbWFkZSB0byBkZXRlcm1pbmUgZWFjaAogICAgICAgICAgICAgICAgbG9jYXRpb24uIjsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICB9CiAgICAgICAgY2hvaWNlIGxvY2F0aW9uIHsKICAgICAgICBkZXNjcmlwdGlvbgogICAgICAgICAgICAiVGhlIGxvY2F0aW9uIGRhdGEgZWl0aGVyIGluIGxhdGl0dWRlL2xvbmdpdHVkZSBvcgogICAgICAgICAgICBDYXJ0ZXNpYW4gdmFsdWVzIjsKICAgICAgICBjYXNlIGVsbGlwc29pZCB7CiAgICAgICAgICAgIGxlYWYgbGF0aXR1ZGUgewogICAgICAgICAgICB0eXBlIGRlY2ltYWw2NCB7CiAgICAgICAgICAgICAgICBmcmFjdGlvbi1kaWdpdHMgMTY7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdW5pdHMgImRlY2ltYWwgZGVncmVlcyI7CiAgICAgICAgICAgIGRlc2NyaXB0aW9uCiAgICAgICAgICAgICAgICAiVGhlIGxhdGl0dWRlIHZhbHVlIG9uIHRoZSBhc3Ryb25vbWljYWwgYm9keS4gIFRoZQogICAgICAgICAgICAgICAgZGVmaW5pdGlvbiBhbmQgcHJlY2lzaW9uIG9mIHRoaXMgbWVhc3VyZW1lbnQgaXMKICAgICAgICAgICAgICAgIGluZGljYXRlZCBieSB0aGUgcmVmZXJlbmNlLWZyYW1lLiI7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgbGVhZiBsb25naXR1ZGUgewogICAgICAgICAgICB0eXBlIGRlY2ltYWw2NCB7CiAgICAgICAgICAgICAgICBmcmFjdGlvbi1kaWdpdHMgMTY7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdW5pdHMgImRlY2ltYWwgZGVncmVlcyI7CiAgICAgICAgICAgIGRlc2NyaXB0aW9uCiAgICAgICAgICAgICAgICAiVGhlIGxvbmdpdHVkZSB2YWx1ZSBvbiB0aGUgYXN0cm9ub21pY2FsIGJvZHkuICBUaGUKICAgICAgICAgICAgICAgIGRlZmluaXRpb24gYW5kIHByZWNpc2lvbiBvZiB0aGlzIG1lYXN1cmVtZW50IGlzCiAgICAgICAgICAgICAgICBpbmRpY2F0ZWQgYnkgdGhlIHJlZmVyZW5jZS1mcmFtZS4iOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGxlYWYgaGVpZ2h0IHsKICAgICAgICAgICAgdHlwZSBkZWNpbWFsNjQgewogICAgICAgICAgICAgICAgZnJhY3Rpb24tZGlnaXRzIDY7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdW5pdHMgIm1ldGVycyI7CiAgICAgICAgICAgIGRlc2NyaXB0aW9uCiAgICAgICAgICAgICAgICAiSGVpZ2h0IGZyb20gYSByZWZlcmVuY2UgMCB2YWx1ZS4gIFRoZSBwcmVjaXNpb24gYW5kCiAgICAgICAgICAgICAgICAnMCcgdmFsdWUgaXMgZGVmaW5lZCBieSB0aGUgcmVmZXJlbmNlLWZyYW1lLiI7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgY2FzZSBjYXJ0ZXNpYW4gewogICAgICAgICAgICBsZWFmIHggewogICAgICAgICAgICB0eXBlIGRlY2ltYWw2NCB7CiAgICAgICAgICAgICAgICBmcmFjdGlvbi1kaWdpdHMgNjsKICAgICAgICAgICAgfQogICAgICAgICAgICB1bml0cyAibWV0ZXJzIjsKICAgICAgICAgICAgZGVzY3JpcHRpb24KICAgICAgICAgICAgICAgICJUaGUgWCB2YWx1ZSBhcyBkZWZpbmVkIGJ5IHRoZSByZWZlcmVuY2UtZnJhbWUuIjsKICAgICAgICAgICAgfQogICAgICAgICAgICBsZWFmIHkgewogICAgICAgICAgICB0eXBlIGRlY2ltYWw2NCB7CiAgICAgICAgICAgICAgICBmcmFjdGlvbi1kaWdpdHMgNjsKICAgICAgICAgICAgfQogICAgICAgICAgICB1bml0cyAibWV0ZXJzIjsKICAgICAgICAgICAgZGVzY3JpcHRpb24KICAgICAgICAgICAgICAgICJUaGUgWSB2YWx1ZSBhcyBkZWZpbmVkIGJ5IHRoZSByZWZlcmVuY2UtZnJhbWUuIjsKICAgICAgICAgICAgfQogICAgICAgICAgICBsZWFmIHogewogICAgICAgICAgICB0eXBlIGRlY2ltYWw2NCB7CiAgICAgICAgICAgICAgICBmcmFjdGlvbi1kaWdpdHMgNjsKICAgICAgICAgICAgfQogICAgICAgICAgICB1bml0cyAibWV0ZXJzIjsKICAgICAgICAgICAgZGVzY3JpcHRpb24KICAgICAgICAgICAgICAgICJUaGUgWiB2YWx1ZSBhcyBkZWZpbmVkIGJ5IHRoZSByZWZlcmVuY2UtZnJhbWUuIjsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICB9CiAgICAgICAgY29udGFpbmVyIHZlbG9jaXR5IHsKICAgICAgICBkZXNjcmlwdGlvbgogICAgICAgICAgICAiSWYgdGhlIG9iamVjdCBpcyBpbiBtb3Rpb24sIHRoZSB2ZWxvY2l0eSB2ZWN0b3IgZGVzY3JpYmVzCiAgICAgICAgICAgIHRoaXMgbW90aW9uIGF0IHRoZSB0aW1lIGdpdmVuIGJ5IHRoZSB0aW1lc3RhbXAuICBGb3IgYQogICAgICAgICAgICBmb3JtdWxhIHRvIGNvbnZlcnQgdGhlc2UgdmFsdWVzIHRvIHNwZWVkIGFuZCBoZWFkaW5nLCBzZWUKICAgICAgICAgICAgUkZDIDkxNzkuIjsKICAgICAgICByZWZlcmVuY2UKICAgICAgICAgICAgIlJGQyA5MTc5OiBBIFlBTkcgR3JvdXBpbmcgZm9yIEdlb2dyYXBoaWMgTG9jYXRpb25zIjsKCiAgICAgICAgbGVhZiB2LW5vcnRoIHsKICAgICAgICAgICAgdHlwZSBkZWNpbWFsNjQgewogICAgICAgICAgICBmcmFjdGlvbi1kaWdpdHMgMTI7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdW5pdHMgIm1ldGVycyBwZXIgc2Vjb25kIjsKICAgICAgICAgICAgZGVzY3JpcHRpb24KICAgICAgICAgICAgInYtbm9ydGggaXMgdGhlIHJhdGUgb2YgY2hhbmdlIChpLmUuLCBzcGVlZCkgdG93YXJkcwogICAgICAgICAgICB0cnVlIG5vcnRoIGFzIGRlZmluZWQgYnkgdGhlIGdlb2RldGljLXN5c3RlbS4iOwogICAgICAgIH0KCiAgICAgICAgbGVhZiB2LWVhc3QgewogICAgICAgICAgICB0eXBlIGRlY2ltYWw2NCB7CiAgICAgICAgICAgIGZyYWN0aW9uLWRpZ2l0cyAxMjsKICAgICAgICAgICAgfQogICAgICAgICAgICB1bml0cyAibWV0ZXJzIHBlciBzZWNvbmQiOwogICAgICAgICAgICBkZXNjcmlwdGlvbgogICAgICAgICAgICAidi1lYXN0IGlzIHRoZSByYXRlIG9mIGNoYW5nZSAoaS5lLiwgc3BlZWQpIHBlcnBlbmRpY3VsYXIKICAgICAgICAgICAgdG8gdGhlIHJpZ2h0IG9mIHRydWUgbm9ydGggYXMgZGVmaW5lZCBieQogICAgICAgICAgICB0aGUgZ2VvZGV0aWMtc3lzdGVtLiI7CiAgICAgICAgfQoKICAgICAgICBsZWFmIHYtdXAgewogICAgICAgICAgICB0eXBlIGRlY2ltYWw2NCB7CiAgICAgICAgICAgIGZyYWN0aW9uLWRpZ2l0cyAxMjsKICAgICAgICAgICAgfQogICAgICAgICAgICB1bml0cyAibWV0ZXJzIHBlciBzZWNvbmQiOwogICAgICAgICAgICBkZXNjcmlwdGlvbgogICAgICAgICAgICAidi11cCBpcyB0aGUgcmF0ZSBvZiBjaGFuZ2UgKGkuZS4sIHNwZWVkKSBhd2F5IGZyb20gdGhlCiAgICAgICAgICAgIGNlbnRlciBvZiBtYXNzLiI7CiAgICAgICAgfQogICAgICAgIH0KICAgICAgICBsZWFmIHRpbWVzdGFtcCB7CiAgICAgICAgdHlwZSB5YW5nOmRhdGUtYW5kLXRpbWU7CiAgICAgICAgZGVzY3JpcHRpb24KICAgICAgICAgICAgIlJlZmVyZW5jZSB0aW1lIHdoZW4gbG9jYXRpb24gd2FzIHJlY29yZGVkLiI7CiAgICAgICAgfQogICAgICAgIGxlYWYgdmFsaWQtdW50aWwgewogICAgICAgIHR5cGUgeWFuZzpkYXRlLWFuZC10aW1lOwogICAgICAgIGRlc2NyaXB0aW9uCiAgICAgICAgICAgICJUaGUgdGltZXN0YW1wIGZvciB3aGljaCB0aGlzIGdlby1sb2NhdGlvbiBpcyB2YWxpZCB1bnRpbC4KICAgICAgICAgICAgSWYgdW5zcGVjaWZpZWQsIHRoZSBnZW8tbG9jYXRpb24gaGFzIG5vIHNwZWNpZmljCiAgICAgICAgICAgIGV4cGlyYXRpb24gdGltZS4iOwogICAgICAgIH0KICAgIH0KICAgIH0KfQo=
+o-ran-smo-teiv-common-yang-extensions	urn:o-ran:smo-teiv-common-yang-extensions	\N	[]	2024-05-24	bW9kdWxlIG8tcmFuLXNtby10ZWl2LWNvbW1vbi15YW5nLWV4dGVuc2lvbnMgewogICAgeWFuZy12ZXJzaW9uIDEuMTsKICAgIG5hbWVzcGFjZSAidXJuOm8tcmFuOnNtby10ZWl2LWNvbW1vbi15YW5nLWV4dGVuc2lvbnMiOwogICAgcHJlZml4IG9yLXRlaXYteWV4dDsKCiAgICBvcmdhbml6YXRpb24gIkVyaWNzc29uIEFCIjsKICAgIGNvbnRhY3QgIkVyaWNzc29uIGZpcnN0IGxpbmUgc3VwcG9ydCB2aWEgZW1haWwiOwogICAgZGVzY3JpcHRpb24KICAgICJUb3BvbG9neSBhbmQgSW52ZW50b3J5IFlBTkcgZXh0ZW5zaW9ucyBtb2RlbC4KCiAgICBDb3B5cmlnaHQgKGMpIDIwMjQgRXJpY3Nzb24gQUIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCgogICAgVGhpcyBtb2RlbCBjb250YWlucyBleHRlbnNpb25zIHRvIHRoZSBZQU5HIGxhbmd1YWdlIHRoYXQgdG9wb2xvZ3kgYW5kCiAgICBpbnZlbnRvcnkgbW9kZWxzIHdpbGwgdXNlIHRvIGRlZmluZSBhbmQgYW5ub3RhdGUgdHlwZXMgYW5kIHJlbGF0aW9uc2hpcHMuIjsKCiAgICByZXZpc2lvbiAiMjAyNC0wNS0yNCIgewogICAgICAgIGRlc2NyaXB0aW9uICJJbml0aWFsIHJldmlzaW9uLiI7CiAgICAgICAgb3ItdGVpdi15ZXh0OmxhYmVsIDAuMy4wOwogICAgfQoKICAgIGV4dGVuc2lvbiBiaURpcmVjdGlvbmFsVG9wb2xvZ3lSZWxhdGlvbnNoaXAgewogICAgICAgIGRlc2NyaXB0aW9uCiAgICAgICAgICAgICJEZWZpbmVzIGEgYmktZGlyZWN0aW9uYWwgcmVsYXRpb25zaGlwIGluIHRoZSB0b3BvbG9neS4KCiAgICAgICAgICAgIEEgYmktZGlyZWN0aW9uYWwtYXNzb2NpYXRpb24gKEJEQSkgaXMgYSByZWxhdGlvbnNoaXAgY29tcHJpc2luZyBvZgogICAgICAgICAgICBhbiBBLXNpZGUgYW5kIGEgQi1zaWRlLiBUaGUgQS1zaWRlIGlzIGNvbnNpZGVyZWQgdGhlIG9yaWdpbmF0aW5nCiAgICAgICAgICAgIHNpZGUgb2YgdGhlIHJlbGF0aW9uc2hpcDsgdGhlIEItc2lkZSBpcyBjb25zaWRlcmVkIHRoZSB0ZXJtaW5hdGluZwogICAgICAgICAgICBzaWRlIG9mIHRoZSByZWxhdGlvbnNoaXAuIFRoZSBvcmRlciBvZiBBLXNpZGUgYW5kIEItc2lkZSBpcyBvZgogICAgICAgICAgICBpbXBvcnRhbmNlIGFuZCBNVVNUIE5PVCBiZSBjaGFuZ2VkIG9uY2UgZGVmaW5lZC4KCiAgICAgICAgICAgIEJvdGggQS1zaWRlIGFuZCBCLXNpZGUgYXJlIGRlZmluZWQgb24gYSB0eXBlLCBhbmQgYXJlIGdpdmVuIGEgcm9sZS4KICAgICAgICAgICAgQSB0eXBlIG1heSBoYXZlIG11bHRpcGxlIG9yaWdpbmF0aW5nIGFuZC9vciB0ZXJtaW5hdGluZyBzaWRlcyBvZiBhCiAgICAgICAgICAgIHJlbGF0aW9uc2hpcCwgYWxsIGRpc3Rpbmd1aXNoZWQgYnkgcm9sZSBuYW1lLgoKICAgICAgICAgICAgVGhlIHN0YXRlbWVudCBNVVNUIG9ubHkgYmUgYSBzdWJzdGF0ZW1lbnQgb2YgdGhlICdtb2R1bGUnIHN0YXRlbWVudC4KICAgICAgICAgICAgTXVsdGlwbGUgJ2JpLWRpcmVjdGlvbmFsLXRvcG9sb2d5LXJlbGF0aW9uc2hpcCcgc3RhdGVtZW50cyBhcmUKICAgICAgICAgICAgYWxsb3dlZCBwZXIgcGFyZW50IHN0YXRlbWVudC4KCiAgICAgICAgICAgIFN1YnN0YXRlbWVudHMgdG8gdGhlICdiaS1kaXJlY3Rpb25hbC10b3BvbG9neS1yZWxhdGlvbnNoaXAnIGRlZmluZQogICAgICAgICAgICB0aGUgQS1zaWRlIGFuZCB0aGUgQi1zaWRlLCByZXNwZWN0aXZlbHksIGFuZCBvcHRpb25hbGx5IHByb3BlcnRpZXMKICAgICAgICAgICAgb2YgdGhlIHJlbGF0aW9uc2hpcC4gRGF0YSBub2RlcyBvZiB0eXBlcyAnbGVhZicgYW5kICdsZWFmLWxpc3QnIGFyZQogICAgICAgICAgICB1c2VkIGZvciB0aGlzIHB1cnBvc2UuIE9uZSBvZiB0aGUgZGF0YSBub2RlcyBNVVNUIGJlIGFubm90YXRlZCB3aXRoCiAgICAgICAgICAgIHRoZSAnYS1zaWRlJyBleHRlbnNpb247IGFub3RoZXIgZGF0YSBub2RlIE1VU1QgYmUgYW5ub3RhdGVkIHdpdGggdGhlCiAgICAgICAgICAgICdiLXNpZGUnIGV4dGVuc2lvbi4gT3RoZXIgZGF0YSBub2RlcyBkZWZpbmUgcHJvcGVydGllcyBvZiB0aGUKICAgICAgICAgICAgcmVsYXRpb25zaGlwLgoKICAgICAgICAgICAgVGhlIGFyZ3VtZW50IGlzIHRoZSBuYW1lIG9mIHRoZSByZWxhdGlvbnNoaXAuIFRoZSByZWxhdGlvbnNoaXAgbmFtZQogICAgICAgICAgICBpcyBzY29wZWQgdG8gdGhlIG5hbWVzcGFjZSBvZiB0aGUgZGVjbGFyaW5nIG1vZHVsZSBhbmQgTVVTVCBiZQogICAgICAgICAgICB1bmlxdWUgd2l0aGluIHRoZSBzY29wZS4iOwoKICAgICAgICBhcmd1bWVudCByZWxhdGlvbnNoaXBOYW1lOwogICAgfQoKICAgIGV4dGVuc2lvbiBhU2lkZSB7CiAgICAgICAgZGVzY3JpcHRpb24KICAgICAgICAgICAgIkRlZmluZXMgdGhlIEEtc2lkZSBvZiBhIHJlbGF0aW9uc2hpcC4KCiAgICAgICAgICAgIFRoZSBzdGF0ZW1lbnQgTVVTVCBvbmx5IGJlIGEgc3Vic3RhdGVtZW50IG9mIGEgJ2xlYWYnIG9yICdsZWFmLWxpc3QnCiAgICAgICAgICAgIHN0YXRlbWVudCwgd2hpY2ggaXRzZWxmIG11c3QgYmUgYSBzdWJzdGF0ZW1lbnQgb2YgdGhlCiAgICAgICAgICAgICd1bmktZGlyZWN0aW9uYWwtdG9wb2xvZ3ktcmVsYXRpb25zaGlwJyBzdGF0ZW1lbnQuCgogICAgICAgICAgICBUaGUgZGF0YSB0eXBlIG9mIHRoZSBwYXJlbnQgJ2xlYWYnIG9yICdsZWFmLWxpc3QnIE1VU1QgYmUKICAgICAgICAgICAgJ2luc3RhbmNlLWlkZW50aWZpZXInLiBDb25zdHJhaW50cyBNQVkgYmUgdXNlZCBhcyBwYXJ0IG9mIHRoZSBwYXJlbnQKICAgICAgICAgICAgJ2xlYWYnIG9yICdsZWFmLWxpc3QnIHRvIGVuZm9yY2UgY2FyZGluYWxpdHkuCgogICAgICAgICAgICBUaGUgaWRlbnRpZmllciBvZiB0aGUgcGFyZW50ICdsZWFmJyBvciAnbGVhZi1saXN0JyBpcyB1c2VkIGFzIG5hbWUKICAgICAgICAgICAgb2YgdGhlIHJvbGUgb2YgdGhlIEEtc2lkZSBvZiB0aGUgcmVsYXRpb25zaGlwLiBUaGUgbmFtZSBvZiB0aGUgcm9sZQogICAgICAgICAgICBpcyBzY29wZWQgdG8gdGhlIHR5cGUgb24gd2hpY2ggdGhlIEEtc2lkZSBpcyBkZWZpbmVkIGFuZCBNVVNUIGJlCiAgICAgICAgICAgIHVuaXF1ZSB3aXRoaW4gdGhlIHNjb3BlLgoKICAgICAgICAgICAgV2hpbGUgdGhlIHBhcmVudCAnbGVhZicgb3IgJ2xlYWYtbGlzdCcgZG9lcyBub3QgcmVzdWx0IGluIGEgcHJvcGVydHkKICAgICAgICAgICAgb2YgdGhlIHJlbGF0aW9uc2hpcCwgaXQgaXMgUkVDT01NRU5ERUQgdG8gYXZvaWQgdXNpbmcgdGhlIG5hbWUgb2YgYW4KICAgICAgICAgICAgZXhpc3RpbmcgdHlwZSBwcm9wZXJ0eSBhcyByb2xlIG5hbWUgdG8gYXZvaWQgcG90ZW50aWFsIGFtYmlndWl0aWVzCiAgICAgICAgICAgIGJldHdlZW4gcHJvcGVydGllcyBvZiBhIHR5cGUsIGFuZCByb2xlcyBvZiBhIHJlbGF0aW9uc2hpcCBvbiB0aGUKICAgICAgICAgICAgdHlwZS4KCiAgICAgICAgICAgIFRoZSBhcmd1bWVudCBpcyB0aGUgbmFtZSBvZiB0aGUgdHlwZSBvbiB3aGljaCB0aGUgQS1zaWRlIHJlc2lkZXMuCiAgICAgICAgICAgIElmIHRoZSB0eXBlIGlzIGRlY2xhcmVkIGluIGFub3RoZXIgbW9kdWxlLCB0aGUgdHlwZSBtdXN0IGJlCiAgICAgICAgICAgIHByZWZpeGVkLCBhbmQgYSBjb3JyZXNwb25kaW5nICdpbXBvcnQnIHN0YXRlbWVudCBiZSB1c2VkIHRvIGRlY2xhcmUKICAgICAgICAgICAgdGhlIHByZWZpeC4iOwoKICAgICAgICBhcmd1bWVudCBhU2lkZVR5cGU7CiAgICB9CgogICAgZXh0ZW5zaW9uIGJTaWRlIHsKICAgICAgICBkZXNjcmlwdGlvbgogICAgICAgICAgICAiRGVmaW5lcyB0aGUgQi1zaWRlIG9mIGEgcmVsYXRpb25zaGlwLgoKICAgICAgICAgICAgVGhlIHN0YXRlbWVudCBNVVNUIG9ubHkgYmUgYSBzdWJzdGF0ZW1lbnQgb2YgYSAnbGVhZicgb3IgJ2xlYWYtbGlzdCcKICAgICAgICAgICAgc3RhdGVtZW50LCB3aGljaCBpdHNlbGYgbXVzdCBiZSBhIHN1YnN0YXRlbWVudCBvZiB0aGUKICAgICAgICAgICAgJ3VuaS1kaXJlY3Rpb25hbC10b3BvbG9neS1yZWxhdGlvbnNoaXAnIHN0YXRlbWVudC4KCiAgICAgICAgICAgIFRoZSBkYXRhIHR5cGUgb2YgdGhlIHBhcmVudCAnbGVhZicgb3IgJ2xlYWYtbGlzdCcgTVVTVCBiZQogICAgICAgICAgICAnaW5zdGFuY2UtaWRlbnRpZmllcicuIENvbnN0cmFpbnRzIE1BWSBiZSB1c2VkIGFzIHBhcnQgb2YgdGhlIHBhcmVudAogICAgICAgICAgICAnbGVhZicgb3IgJ2xlYWYtbGlzdCcgdG8gZW5mb3JjZSBjYXJkaW5hbGl0eS4KCiAgICAgICAgICAgIFRoZSBpZGVudGlmaWVyIG9mIHRoZSBwYXJlbnQgJ2xlYWYnIG9yICdsZWFmLWxpc3QnIGlzIHVzZWQgYXMgbmFtZQogICAgICAgICAgICBvZiB0aGUgcm9sZSBvZiB0aGUgQi1zaWRlIG9mIHRoZSByZWxhdGlvbnNoaXAuIFRoZSBuYW1lIG9mIHRoZSByb2xlCiAgICAgICAgICAgIGlzIHNjb3BlZCB0byB0aGUgdHlwZSBvbiB3aGljaCB0aGUgQi1zaWRlIGlzIGRlZmluZWQgYW5kIE1VU1QgYmUKICAgICAgICAgICAgdW5pcXVlIHdpdGhpbiB0aGUgc2NvcGUuCgogICAgICAgICAgICBXaGlsZSB0aGUgcGFyZW50ICdsZWFmJyBvciAnbGVhZi1saXN0JyBkb2VzIG5vdCByZXN1bHQgaW4gYSBwcm9wZXJ0eQogICAgICAgICAgICBvZiB0aGUgcmVsYXRpb25zaGlwLCBpdCBpcyBSRUNPTU1FTkRFRCB0byBhdm9pZCB1c2luZyB0aGUgbmFtZSBvZiBhbgogICAgICAgICAgICBleGlzdGluZyB0eXBlIHByb3BlcnR5IGFzIHJvbGUgbmFtZSB0byBhdm9pZCBwb3RlbnRpYWwgYW1iaWd1aXRpZXMKICAgICAgICAgICAgYmV0d2VlbiBwcm9wZXJ0aWVzIG9mIGEgdHlwZSwgYW5kIHJvbGVzIG9mIGEgcmVsYXRpb25zaGlwIG9uIHRoZQogICAgICAgICAgICB0eXBlLgoKICAgICAgICAgICAgVGhlIGFyZ3VtZW50IGlzIHRoZSBuYW1lIG9mIHRoZSB0eXBlIG9uIHdoaWNoIHRoZSBCLXNpZGUgcmVzaWRlcy4KICAgICAgICAgICAgSWYgdGhlIHR5cGUgaXMgZGVjbGFyZWQgaW4gYW5vdGhlciBtb2R1bGUsIHRoZSB0eXBlIG11c3QgYmUKICAgICAgICAgICAgcHJlZml4ZWQsIGFuZCBhIGNvcnJlc3BvbmRpbmcgJ2ltcG9ydCcgc3RhdGVtZW50IGJlIHVzZWQgdG8gZGVjbGFyZQogICAgICAgICAgICB0aGUgcHJlZml4LiI7CgogICAgICAgIGFyZ3VtZW50IGJTaWRlVHlwZTsKICAgIH0KCiAgICBleHRlbnNpb24gZG9tYWluIHsKICAgICAgICBkZXNjcmlwdGlvbiAiS2V5d29yZCB1c2VkIHRvIGNhcnJ5IGRvbWFpbiBpbmZvcm1hdGlvbi4iOwogICAgICAgIGFyZ3VtZW50IGRvbWFpbk5hbWU7CiAgICB9CgogICAgZXh0ZW5zaW9uIGxhYmVsIHsKICAgICAgICBkZXNjcmlwdGlvbgogICAgICAgICAgICAiVGhlIGxhYmVsIGNhbiBiZSB1c2VkIHRvIGdpdmUgbW9kdWxlcyBhbmQgc3VibW9kdWxlcyBhIHNlbWFudGljCiAgICAgICAgICAgIHZlcnNpb24sIGluIGFkZGl0aW9uIHRvIHRoZWlyIHJldmlzaW9uLgoKICAgICAgICAgICAgVGhlIGZvcm1hdCBvZiB0aGUgbGFiZWwgaXMg4oCYeC55LnrigJkg4oCTIGV4cHJlc3NlZCBhcyBwYXR0ZXJuLCBpdCBpcwogICAgICAgICAgICBbMC05XStcXC5bMC05XStcXC5bMC05XSsKCiAgICAgICAgICAgIFRoZSBzdGF0ZW1lbnQgTVVTVCBvbmx5IGJlIGEgc3Vic3RhdGVtZW50IG9mIHRoZSByZXZpc2lvbiBzdGF0ZW1lbnQuCiAgICAgICAgICAgIFplcm8gb3Igb25lIHJldmlzaW9uIGxhYmVsIHN0YXRlbWVudHMgcGVyIHBhcmVudCBzdGF0ZW1lbnQgYXJlCiAgICAgICAgICAgIGFsbG93ZWQuCgogICAgICAgICAgICBSZXZpc2lvbiBsYWJlbHMgTVVTVCBiZSB1bmlxdWUgYW1vbmdzdCBhbGwgcmV2aXNpb25zIG9mIGEgbW9kdWxlIG9yCiAgICAgICAgICAgIHN1Ym1vZHVsZS4iOwoKICAgICAgICBhcmd1bWVudCBzZW12ZXJzaW9uOwogICAgfQp9
+o-ran-smo-teiv-common-yang-types	urn:o-ran:smo-teiv-common-yang-types	\N	[]	2024-05-24	bW9kdWxlIG8tcmFuLXNtby10ZWl2LWNvbW1vbi15YW5nLXR5cGVzIHsKICAgIHlhbmctdmVyc2lvbiAxLjE7CiAgICBuYW1lc3BhY2UgInVybjpvLXJhbjpzbW8tdGVpdi1jb21tb24teWFuZy10eXBlcyI7CiAgICBwcmVmaXggb3ItdGVpdi10eXBlczsKCiAgICBpbXBvcnQgby1yYW4tc21vLXRlaXYtY29tbW9uLXlhbmctZXh0ZW5zaW9ucyB7IHByZWZpeCBvci10ZWl2LXlleHQ7IH0KCiAgICBpbXBvcnQgXzNncHAtY29tbW9uLXlhbmctdHlwZXMgeyBwcmVmaXggdHlwZXMzZ3BwOyB9CgogICAgb3JnYW5pemF0aW9uICJFcmljc3NvbiBBQiI7CiAgICBjb250YWN0ICJFcmljc3NvbiBmaXJzdCBsaW5lIHN1cHBvcnQgdmlhIGVtYWlsIjsKICAgIGRlc2NyaXB0aW9uCiAgICAiVG9wb2xvZ3kgYW5kIEludmVudG9yeSBjb21tb24gdHlwZXMgbW9kZWwuCgogICAgQ29weXJpZ2h0IChjKSAyMDI0IEVyaWNzc29uIEFCLiBBbGwgcmlnaHRzIHJlc2VydmVkLgoKICAgIFRoaXMgbW9kZWwgY29udGFpbnMgcmUtdXNhYmxlIGRhdGEgdHlwZXMgdGhhdCB0b3BvbG9neSBhbmQgaW52ZW50b3J5IG1vZGVscwogICAgd2lsbCBmcmVxdWVudGx5IHVzZSBhcyBwYXJ0IG9mIHR5cGVzIGFuZCByZWxhdGlvbnNoaXBzLiI7CgogICAgcmV2aXNpb24gIjIwMjQtMDUtMjQiIHsKICAgICAgICBkZXNjcmlwdGlvbiAiSW5pdGlhbCByZXZpc2lvbi4iOwogICAgICAgIG9yLXRlaXYteWV4dDpsYWJlbCAwLjMuMDsKICAgIH0KCiAgICBncm91cGluZyBUb3BfR3JwX1R5cGUgewogICAgICAgIGRlc2NyaXB0aW9uICJHcm91cGluZyBjb250YWluaW5nIHRoZSBrZXkgYXR0cmlidXRlIGNvbW1vbiB0byBhbGwgdHlwZXMuCiAgICAgICAgICAgIEFsbCB0eXBlcyBNVVNUIHVzZSB0aGlzIGdyb3VwaW5nLiI7CgogICAgICAgIGxlYWYgaWQgewogICAgICAgICAgICB0eXBlIHN0cmluZzsKICAgICAgICAgICAgZGVzY3JpcHRpb24gIlVuaXF1ZSBpZGVudGlmaWVyIG9mIHRvcG9sb2d5IGVudGl0aWVzLiBSZXByZXNlbnRzIHRoZQogICAgICAgICAgICAgICAgRW50aXR5IEluc3RhbmNlIElkZW50aWZpZXIuIjsKICAgICAgICB9CiAgICB9CgogICAgY29udGFpbmVyIGRlY29yYXRvcnMgewogICAgICAgIGRlc2NyaXB0aW9uCiAgICAgICAgICAgICJUaGlzIGNvbnRhaW5lciBzZXJ2ZXMgYXMgZXh0ZW5zaW9uIHBvaW50IGZvciBhcHBsaWNhdGlvbnMgd2lzaGluZwogICAgICAgICAgICB0byBkZWZpbmUgdGhlaXIgb3duIGRlY29yYXRvcnMuIFRoaXMgaXMgZG9uZSB2aWEgYXVnbWVudGF0aW9ucy4gVGhleQogICAgICAgICAgICBjYW4gb25seSBiZSBkZWZpbmVkIGluIG5hbWUgdmFsdWUgcGFpci4KCiAgICAgICAgICAgIFRoaXMgaXMgYSBjb25zdW1lciBkYXRhIGFuZCBjYW4gYmUgYXR0YWNoZWQgdG8gVG9wb2xvZ3kgRW50aXR5IG9yCiAgICAgICAgICAgIFRvcG9sb2d5IFJlbGF0aW9uIGluc3RhbmNlLCBvdXRzaWRlIG9mIHRoZSBkZWNsYXJlZCBUb3BvbG9neSBFbnRpdHkKICAgICAgICAgICAgb3IgVG9wb2xvZ3kgUmVsYXRpb25zaGlwJ3MgYXR0cmlidXRlcy4gVGhpcyBjYW5ub3QgYmUgaW5zdGFudGlhdGVkLAogICAgICAgICAgICBhbmQgaXQgTVVTVCBOT1QgYmUgYXVnbWVudGVkIG9yIGRldmlhdGVkIGluIGFueSB3YXksIHVubGVzcyBzdGF0ZWQKICAgICAgICAgICAgb3RoZXJ3aXNlLiI7CiAgICB9CgogICAgbGVhZi1saXN0IGNsYXNzaWZpZXJzIHsKICAgICAgICBkZXNjcmlwdGlvbgogICAgICAgICAgICAiQ29uc3VtZXIgZGVmaW5lZCB0YWdzIHRvIHRvcG9sb2d5IGVudGl0aWVzIGFuZCByZWxhdGlvbnNoaXBzLgoKICAgICAgICAgICAgVGhpcyBpcyBhIGNvbnN1bWVyIGRhdGEgYW5kIGNhbiBiZSBhdHRhY2hlZCB0byBUb3BvbG9neSBFbnRpdHkgb3IKICAgICAgICAgICAgVG9wb2xvZ3kgUmVsYXRpb24gaW5zdGFuY2UsIG91dHNpZGUgb2YgdGhlIGRlY2xhcmVkIFRvcG9sb2d5IEVudGl0eQogICAgICAgICAgICBvciBUb3BvbG9neSBSZWxhdGlvbnNoaXAncyBhdHRyaWJ1dGVzLiBUaGlzIGNhbm5vdCBiZSBpbnN0YW50aWF0ZWQsCiAgICAgICAgICAgIGFuZCBpdCBNVVNUIE5PVCBiZSBhdWdtZW50ZWQgb3IgZGV2aWF0ZWQgaW4gYW55IHdheSwgdW5sZXNzIHN0YXRlZAogICAgICAgICAgICBvdGhlcndpc2UuIjsKCiAgICAgICAgdHlwZSBpZGVudGl0eXJlZiB7IGJhc2UgY2xhc3NpZmllcjsgfQogICAgfQoKICAgIGxlYWYtbGlzdCBzb3VyY2VJZHMgewogICAgICAgIGRlc2NyaXB0aW9uCiAgICAgICAgICAgICJBbiBvcmRlcmVkIGxpc3Qgb2YgaWRlbnRpdGllcyB0aGF0IHJlcHJlc2VudCB0aGUgc2V0IG9mIG5hdGl2ZQogICAgICAgICAgICBzb3VyY2UgaWRlbnRpZmllcnMgZm9yIHBhcnRpY2lwYXRpbmcgZW50aXRpZXMuCgogICAgICAgICAgICBUaGlzIGlzIGEgY29uc3VtZXIgZGF0YSBhbmQgY2FuIGJlIGF0dGFjaGVkIHRvIFRvcG9sb2d5IEVudGl0eSBvcgogICAgICAgICAgICBUb3BvbG9neSBSZWxhdGlvbiBpbnN0YW5jZSwgb3V0c2lkZSBvZiB0aGUgZGVjbGFyZWQgVG9wb2xvZ3kgRW50aXR5CiAgICAgICAgICAgIG9yIFRvcG9sb2d5IFJlbGF0aW9uc2hpcCdzIGF0dHJpYnV0ZXMuIFRoaXMgY2Fubm90IGJlIGluc3RhbnRpYXRlZCwKICAgICAgICAgICAgYW5kIGl0IE1VU1QgTk9UIGJlIGF1Z21lbnRlZCBvciBkZXZpYXRlZCBpbiBhbnkgd2F5LCB1bmxlc3Mgc3RhdGVkCiAgICAgICAgICAgIG90aGVyd2lzZS4iOwoKICAgICAgICB0eXBlIHN0cmluZzsKICAgICAgICBvcmRlcmVkLWJ5IHVzZXI7CiAgICB9CgogICAgY29udGFpbmVyIG1ldGFkYXRhIHsKICAgICAgICBkZXNjcmlwdGlvbgogICAgICAgICAgICAiVGhpcyBjb250YWluZXIgc2VydmVzIGFzIGV4dGVuc2lvbiBwb2ludCB0byBkZWZpbmUgbWV0YWRhdGEuIFRoZXkKICAgICAgICAgICAgY2FuIG9ubHkgYmUgZGVmaW5lZCBpbiBuYW1lIHZhbHVlIHBhaXIuCgogICAgICAgICAgICBUaGlzIGlzIGEgY29uc3VtZXIgZGF0YSBhbmQgY2FuIGJlIGF0dGFjaGVkIHRvIFRvcG9sb2d5IEVudGl0eSBvcgogICAgICAgICAgICBUb3BvbG9neSBSZWxhdGlvbiBpbnN0YW5jZSwgb3V0c2lkZSBvZiB0aGUgZGVjbGFyZWQgVG9wb2xvZ3kgRW50aXR5CiAgICAgICAgICAgIG9yIFRvcG9sb2d5IFJlbGF0aW9uc2hpcCdzIGF0dHJpYnV0ZXMuIFRoaXMgY2Fubm90IGJlIGluc3RhbnRpYXRlZCwKICAgICAgICAgICAgYW5kIGl0IE1VU1QgTk9UIGJlIGF1Z21lbnRlZCBvciBkZXZpYXRlZCBpbiBhbnkgd2F5LCB1bmxlc3Mgc3RhdGVkCiAgICAgICAgICAgIG90aGVyd2lzZS4iOwogICAgfQoKICAgIGlkZW50aXR5IGNsYXNzaWZpZXJ7CiAgICAgICAgZGVzY3JpcHRpb24gIlRoZSBjbGFzc2lmaWVyIGlzIHVzZWQgYXMgYSBiYXNlIHRvIHByb3ZpZGUgYWxsIGNsYXNzaWZpZXJzCiAgICAgICAgICAgIHdpdGggaWRlbnRpdHkuICI7CiAgICB9Cn0=
+o-ran-smo-teiv-equipment	urn:o-ran:smo-teiv-equipment	EQUIPMENT	[]	2024-05-24	bW9kdWxlIG8tcmFuLXNtby10ZWl2LWVxdWlwbWVudCB7CiAgICB5YW5nLXZlcnNpb24gMS4xOwogICAgbmFtZXNwYWNlICJ1cm46by1yYW46c21vLXRlaXYtZXF1aXBtZW50IjsKICAgIHByZWZpeCBvci10ZWl2LWVxdWlwOwoKICAgIGltcG9ydCBvLXJhbi1zbW8tdGVpdi1jb21tb24teWFuZy10eXBlcyB7IHByZWZpeCBvci10ZWl2LXR5cGVzOyB9CgogICAgaW1wb3J0IG8tcmFuLXNtby10ZWl2LWNvbW1vbi15YW5nLWV4dGVuc2lvbnMgeyBwcmVmaXggb3ItdGVpdi15ZXh0OyB9CgogICAgaW1wb3J0IGlldGYtZ2VvLWxvY2F0aW9uIHsKICAgICAgICBwcmVmaXggZ2VvOwogICAgICAgIHJlZmVyZW5jZSAiUkZDIDkxNzk6IEEgWUFORyBHcm91cGluZyBmb3IgR2VvZ3JhcGhpYyBMb2NhdGlvbnMiOwogICAgfQoKICAgIG9yZ2FuaXphdGlvbiAiRXJpY3Nzb24gQUIiOwogICAgY29udGFjdCAiRXJpY3Nzb24gZmlyc3QgbGluZSBzdXBwb3J0IHZpYSBlbWFpbCI7CiAgICBkZXNjcmlwdGlvbgogICAgIkVxdWlwbWVudCB0b3BvbG9neSBtb2RlbC4KCiAgICBDb3B5cmlnaHQgKGMpIDIwMjQgRXJpY3Nzb24gQUIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCgogICAgVGhpcyBtb2RlbCBjb250YWlucyB0aGUgdG9wb2xvZ3kgZW50aXRpZXMgYW5kIHJlbGF0aW9ucyBpbiB0aGUgRXF1aXBtZW50CiAgICBkb21haW4sIHdoaWNoIGlzIG1vZGVsbGVkIHRvIHVuZGVyc3RhbmQgdGhlIHBoeXNpY2FsIGxvY2F0aW9uIG9mIGVxdWlwbWVudAogICAgc3VjaCBhcyBhbnRlbm5hcyBhc3NvY2lhdGVkIHdpdGggYSBjZWxsL2NhcnJpZXIgYW5kIHRoZWlyIHJlbGV2YW50CiAgICBwcm9wZXJ0aWVzIGUuZy4gdGlsdCwgbWF4IHBvd2VyIGV0Yy4iOwoKICAgIHJldmlzaW9uICIyMDI0LTA1LTI0IiB7CiAgICAgICAgZGVzY3JpcHRpb24gIkluaXRpYWwgcmV2aXNpb24uIjsKICAgICAgICBvci10ZWl2LXlleHQ6bGFiZWwgMC4zLjA7CiAgICB9CgogICAgb3ItdGVpdi15ZXh0OmRvbWFpbiBFUVVJUE1FTlQ7CgogICAgbGlzdCBBbnRlbm5hTW9kdWxlIHsKICAgICAgICBkZXNjcmlwdGlvbiAiQW4gQW50ZW5uYSBNb2R1bGUgcmVwcmVzZW50cyB0aGUgcGh5c2ljYWwgYXNwZWN0IG9mIGFuCiAgICAgICAgICAgIGFudGVubmEuIjsKCiAgICAgICAgdXNlcyBvci10ZWl2LXR5cGVzOlRvcF9HcnBfVHlwZTsKICAgICAgICBrZXkgaWQ7CgogICAgICAgIGNvbnRhaW5lciBhdHRyaWJ1dGVzIHsKICAgICAgICAgICAgbGVhZiBhbnRlbm5hTW9kZWxOdW1iZXIgewogICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIlZlbmRvci1zcGVjaWZpYyBhbnRlbm5hIG1vZGVsIGlkZW50aWZpZXIuIFRoaXMKICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGUgaXMgcGFydCBvZiBBSVNHIHYzIEFEQiBTdGFuZGFyZCBhbmQgaGFzIG5vCiAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uYWwgaW1wYWN0LiI7CiAgICAgICAgICAgICAgICB0eXBlIHN0cmluZzsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgbGVhZiBtZWNoYW5pY2FsQW50ZW5uYUJlYXJpbmcgewogICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIkFudGVubmEgYmVhcmluZyBvbiBhbnRlbm5hIHN1YnVuaXQgd2hlcmUgYW50ZW5uYQogICAgICAgICAgICAgICAgICAgIHVuaXQgaXMgaW5zdGFsbGVkLiI7CiAgICAgICAgICAgICAgICB0eXBlIGludDMyOwogICAgICAgICAgICB9CgogICAgICAgICAgICBsZWFmIG1lY2hhbmljYWxBbnRlbm5hVGlsdCB7CiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiAiVGhlIGZpeGVkIGFudGVubmEgdGlsdCBvZiB0aGUgaW5zdGFsbGF0aW9uLCBkZWZpbmVkCiAgICAgICAgICAgICAgICAgICAgYXMgdGhlIGluY2xpbmF0aW9uIG9mIHRoZSBhbnRlbm5hIGVsZW1lbnQgcmVzcGVjdCB0byB0aGUKICAgICAgICAgICAgICAgICAgICB2ZXJ0aWNhbCBwbGFuZS4gSXQgaXMgYSBzaWduZWQgdmFsdWUuIFBvc2l0aXZlIGluZGljYXRlcwogICAgICAgICAgICAgICAgICAgIGRvd250aWx0LCBhbmQgbmVnYXRpdmUgaW5kaWNhdGVzIHVwdGlsdC4iOwogICAgICAgICAgICAgICAgdHlwZSBpbnQzMjsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgbGVhZiBwb3NpdGlvbldpdGhpblNlY3RvciB7CiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiAiQW50ZW5uYSB1bml0IHBvc2l0aW9uIHdpdGhpbiBzZWN0b3IuIFRoaXMgYXR0cmlidXRlCiAgICAgICAgICAgICAgICAgICAgaXMgcGFydCBvZiBBSVNHIHYzIEFEQiBTdGFuZGFyZCBhbmQgaGFzIG5vIG9wZXJhdGlvbmFsCiAgICAgICAgICAgICAgICAgICAgaW1wYWN0LiI7CiAgICAgICAgICAgICAgICB0eXBlIHN0cmluZzsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgbGVhZiB0b3RhbFRpbHQgewogICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIlRvdGFsIGFudGVubmEgZWxldmF0aW9uIGluY2x1ZGluZyB0aGUgaW5zdGFsbGVkCiAgICAgICAgICAgICAgICAgICAgdGlsdCBhbmQgdGhlIHRpbHQgYXBwbGllZCBieSB0aGUgUmVtb3RlIEVsZWN0cmljYWwKICAgICAgICAgICAgICAgICAgICBUaWx0IChSRVQpLiI7CiAgICAgICAgICAgICAgICB0eXBlIGludDMyOwogICAgICAgICAgICB9CgogICAgICAgICAgICBsZWFmIGVsZWN0cmljYWxBbnRlbm5hVGlsdCB7CiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiAiRWxlY3RyaWNhbGx5LWNvbnRyb2xsZWQgdGlsdCBvZiBtYWluIGJlYW0gbWF4aW11bQogICAgICAgICAgICAgICAgICAgIHdpdGggcmVzcGVjdCB0byBkaXJlY3Rpb24gb3J0aG9nb25hbCB0byBhbnRlbm5hIGVsZW1lbnQKICAgICAgICAgICAgICAgICAgICBheGlzIChzZWUgM0dQUCBUUyAyNS40NjYpLiBWYWx1ZSBpcyBzaWduZWQ7IHRpbHQgZG93biBpcwogICAgICAgICAgICAgICAgICAgIHBvc2l0aXZlLCB0aWx0IHVwIGlzIG5lZ2F0aXZlLiI7CiAgICAgICAgICAgICAgICB0eXBlIGludDMyOwogICAgICAgICAgICB9CgogICAgICAgICAgICBsZWFmLWxpc3QgYW50ZW5uYUJlYW1XaWR0aCB7CiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiAiVGhlIGFuZ3VsYXIgc3BhbiBvZiB0aGUgbWFpbiBsb2JlIG9mIHRoZSBhbnRlbm5hCiAgICAgICAgICAgICAgICAgICAgcmFkaWF0aW9uIHBhdHRlcm4gaW4gdGhlIGhvcml6b250YWwgcGxhbmUuIE1lYXN1cmVkIGluCiAgICAgICAgICAgICAgICAgICAgZGVncmVlcy4iOwogICAgICAgICAgICAgICAgdHlwZSB1aW50MzI7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHVzZXMgZ2VvOmdlby1sb2NhdGlvbjsKICAgICAgICB9CiAgICB9Cn0=
+o-ran-smo-teiv-ran	urn:o-ran:smo-teiv-ran	RAN	[]	2024-05-24	bW9kdWxlIG8tcmFuLXNtby10ZWl2LXJhbiB7CiAgICB5YW5nLXZlcnNpb24gMS4xOwogICAgbmFtZXNwYWNlICJ1cm46by1yYW46c21vLXRlaXYtcmFuIjsKICAgIHByZWZpeCBvci10ZWl2LXJhbjsKCiAgICBpbXBvcnQgby1yYW4tc21vLXRlaXYtY29tbW9uLXlhbmctdHlwZXMge3ByZWZpeCBvci10ZWl2LXR5cGVzOyB9CgogICAgaW1wb3J0IG8tcmFuLXNtby10ZWl2LWNvbW1vbi15YW5nLWV4dGVuc2lvbnMge3ByZWZpeCBvci10ZWl2LXlleHQ7IH0KCiAgICBpbXBvcnQgXzNncHAtY29tbW9uLXlhbmctdHlwZXMgeyBwcmVmaXggdHlwZXMzZ3BwOyB9CgogICAgaW1wb3J0IGlldGYtZ2VvLWxvY2F0aW9uIHsKICAgICAgICBwcmVmaXggZ2VvOwogICAgICAgIHJlZmVyZW5jZSAiUkZDIDkxNzk6IEEgWUFORyBHcm91cGluZyBmb3IgR2VvZ3JhcGhpYyBMb2NhdGlvbnMiOwogICAgfQoKICAgIG9yZ2FuaXphdGlvbiAiRXJpY3Nzb24gQUIiOwogICAgY29udGFjdCAiRXJpY3Nzb24gZmlyc3QgbGluZSBzdXBwb3J0IHZpYSBlbWFpbCI7CiAgICBkZXNjcmlwdGlvbgogICAgIlJBTiB0b3BvbG9neSBtb2RlbC4KCiAgICBDb3B5cmlnaHQgKGMpIDIwMjQgRXJpY3Nzb24gQUIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCgogICAgVGhpcyBtb2RlbCBjb250YWlucyB0aGUgdG9wb2xvZ3kgZW50aXRpZXMgYW5kIHJlbGF0aW9ucyBpbiB0aGUgUkFOIGRvbWFpbiwKICAgIHdoaWNoIHJlcHJlc2VudHMgdGhlIGZ1bmN0aW9uYWwgY2FwYWJpbGl0eSBvZiB0aGUgZGVwbG95ZWQgUkFOIHRoYXQgYXJlCiAgICByZWxldmFudCB0byByQXBwcyB1c2UgY2FzZXMuIjsKCiAgICByZXZpc2lvbiAiMjAyNC0wNS0yNCIgewogICAgICAgIGRlc2NyaXB0aW9uICJJbml0aWFsIHJldmlzaW9uLiI7CiAgICAgICAgb3ItdGVpdi15ZXh0OmxhYmVsIDAuMy4wOwogICAgfQoKICAgIG9yLXRlaXYteWV4dDpkb21haW4gUkFOOwoKICAgIGxpc3QgR05CRFVGdW5jdGlvbiB7CiAgICAgICAgZGVzY3JpcHRpb24gImdOb2RlQiBEaXN0cmlidXRlZCBVbml0IChnTkItRFUpLgoKICAgICAgICAgICAgQSBnTkIgbWF5IGNvbnNpc3Qgb2YgYSBnTkItQ2VudHJhbGl6ZWQgVW5pdCAoZ05CLUNVKSBhbmQgYSBnTkItRFUuCiAgICAgICAgICAgIFRoZSBDVSBwcm9jZXNzZXMgbm9uLXJlYWwgdGltZSBwcm90b2NvbHMgYW5kIHNlcnZpY2VzLCBhbmQgdGhlIERVCiAgICAgICAgICAgIHByb2Nlc3NlcyBQSFkgbGV2ZWwgcHJvdG9jb2wgYW5kIHJlYWwgdGltZSBzZXJ2aWNlcy4gVGhlIGdOQi1DVSBhbmQKICAgICAgICAgICAgdGhlIGdOQi1EVSB1bml0cyBhcmUgY29ubmVjdGVkIHZpYSBGMSBsb2dpY2FsIGludGVyZmFjZS4KCiAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgaXMgdHJ1ZSBmb3IgYSBnTkItRFU6CiAgICAgICAgICAgIElzIGNvbm5lY3RlZCB0byB0aGUgZ05CLUNVLUNQIHRocm91Z2ggdGhlIEYxLUMgaW50ZXJmYWNlLiBJcwogICAgICAgICAgICBjb25uZWN0ZWQgdG8gdGhlIGdOQi1DVS1VUCB0aHJvdWdoIHRoZSBGMS1VIGludGVyZmFjZS4gT25lIGdOQi1EVSBpcwogICAgICAgICAgICBjb25uZWN0ZWQgdG8gb25seSBvbmUgZ05CLUNVLUNQLiBPbmUgZ05CLURVIGNhbiBiZSBjb25uZWN0ZWQgdG8KICAgICAgICAgICAgbXVsdGlwbGUgZ05CLUNVLVVQcyB1bmRlciB0aGUgY29udHJvbCBvZiB0aGUgc2FtZSBnTkItQ1UtQ1AuCgogICAgICAgICAgICBOb3RlOiBBIGdOQiBtYXkgY29uc2lzdCBvZiBhIGdOQi1DVS1DUCwgbXVsdGlwbGUgZ05CLUNVLVVQcyBhbmQKICAgICAgICAgICAgbXVsdGlwbGUgZ05CLURVcy4gZ05CLURVIGlzIGEgY29uY3JldGUgY2xhc3MgdGhhdCBleHRlbmRzIHRoZSBORy1SQU4KICAgICAgICAgICAgbm9kZSBvYmplY3QuIEluIFRvcG9sb2d5LCB5b3UgY2FuIGNyZWF0ZSwgcmVhZCwgdXBkYXRlLCBhbmQgZGVsZXRlCiAgICAgICAgICAgIHRoZSBnTkItRFUgb2JqZWN0LiI7CgogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpUb3BfR3JwX1R5cGU7CiAgICAgICAga2V5IGlkOwoKICAgICAgICBjb250YWluZXIgYXR0cmlidXRlcyB7CiAgICAgICAgICAgIGNvbnRhaW5lciBkVXBMTU5JZCB7CiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiAiUExNTiBpZGVudGlmaWVyIHVzZWQgYXMgcGFydCBvZiBQTSBFdmVudHMgZGF0YSI7CiAgICAgICAgICAgICAgICB1c2VzIHR5cGVzM2dwcDpQTE1OSWQ7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGxlYWYgZ05CRFVJZCB7CiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiAiVW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSBEVSB3aXRoaW4gYSBnTm9kZUIiOwogICAgICAgICAgICAgICAgdHlwZSBpbnQ2NDsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgbGVhZiBnTkJJZCB7CiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiAiSWRlbnRpdHkgb2YgZ05vZGVCIHdpdGhpbiBhIFBMTU4iOwogICAgICAgICAgICAgICAgdHlwZSBpbnQ2NDsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgbGVhZiBnTkJJZExlbmd0aCB7CiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiAiTGVuZ3RoIG9mIGdOQklkIGJpdCBzdHJpbmcgcmVwcmVzZW50YXRpb24iOwogICAgICAgICAgICAgICAgdHlwZSBpbnQzMjsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICBsaXN0IEVOb2RlQkZ1bmN0aW9uIHsKICAgICAgICBkZXNjcmlwdGlvbiAiQW4gRXZvbHZlZCBOb2RlIEIgKGVOb2RlQikgaXMgdGhlIG9ubHkgbWFuZGF0b3J5IG5vZGUgaW4KICAgICAgICAgICAgdGhlIHJhZGlvIGFjY2VzcyBuZXR3b3JrIChSQU4pIG9mIExvbmctVGVybSBFdm9sdXRpb24gKExURSkuIFRoZQogICAgICAgICAgICBlTm9kZUIgaXMgYSBjb21wbGV4IGJhc2Ugc3RhdGlvbiB0aGF0IGhhbmRsZXMgcmFkaW8gY29tbXVuaWNhdGlvbnMKICAgICAgICAgICAgaW4gdGhlIGNlbGwgYW5kIGNhcnJpZXMgb3V0IHJhZGlvIHJlc291cmNlIG1hbmFnZW1lbnQgYW5kIGhhbmRvdmVyCiAgICAgICAgICAgIGRlY2lzaW9ucy4gVW5saWtlIDIvM0cgd2lyZWxlc3MgUkFOLCB0aGVyZSBpcyBubyBjZW50cmFsaXplZCByYWRpbwogICAgICAgICAgICBuZXR3b3JrIGNvbnRyb2xsZXIgaW4gTFRFLiBJdCBpcyB0aGUgaGFyZHdhcmUgdGhhdCBpcyBjb25uZWN0ZWQgdG8KICAgICAgICAgICAgdGhlIG1vYmlsZSBwaG9uZSBuZXR3b3JrIHRoYXQgY29tbXVuaWNhdGVzIGRpcmVjdGx5IHdpdGggbW9iaWxlCiAgICAgICAgICAgIGhhbmRzZXRzIChVc2VyIEVxdWlwbWVudCksIGxpa2UgYSBiYXNlIHRyYW5zY2VpdmVyIHN0YXRpb24gKEJUUykgaW4KICAgICAgICAgICAgR1NNIG5ldHdvcmtzLiBUaGlzIHNpbXBsaWZpZXMgdGhlIGFyY2hpdGVjdHVyZSBhbmQgYWxsb3dzIGxvd2VyCiAgICAgICAgICAgIHJlc3BvbnNlIHRpbWVzLiI7CgogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpUb3BfR3JwX1R5cGU7CiAgICAgICAga2V5IGlkOwoKICAgICAgICBjb250YWluZXIgYXR0cmlidXRlcyB7CiAgICAgICAgICAgIGxlYWYgZU5CSWQgewogICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIlRoZSBFTm9kZUIgSUQgdGhhdCBmb3JtcyBwYXJ0IG9mIHRoZSBDZWxsIEdsb2JhbAogICAgICAgICAgICAgICAgICAgIElkZW50aXR5LCBhbmQgaXMgYWxzbyB1c2VkIHRvIGlkZW50aWZ5IHRoZSBub2RlIG92ZXIgdGhlIFMxCiAgICAgICAgICAgICAgICAgICAgaW50ZXJmYWNlIjsKICAgICAgICAgICAgICAgIHR5cGUgaW50MzI7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGNvbnRhaW5lciBlTm9kZUJQbG1uSWQgewogICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIlRoZSBFTm9kZUIgUHVibGljIExhbmQgTW9iaWxlIE5ldHdvcmsgKFBMTU4pIElECiAgICAgICAgICAgICAgICAgICAgdGhhdCBmb3JtcyBwYXJ0IG9mIHRoZSBFTm9kZUIgR2xvYmFsIElEIHVzZWQgdG8gaWRlbnRpZnkgdGhlCiAgICAgICAgICAgICAgICAgICAgbm9kZSBvdmVyIHRoZSBTMSBpbnRlcmZhY2UuIE5vdGU6IFRoZSB2YWx1ZQogICAgICAgICAgICAgICAgICAgIChNQ0M9MDAxLCBNTkM9MDEpIGluZGljYXRlcyB0aGF0IHRoZSBQTE1OIGlzIG5vdCBpbml0aWF0ZWQuCiAgICAgICAgICAgICAgICAgICAgVGhlIHZhbHVlIGNhbiBub3QgYmUgdXNlZCBhcyBhIHZhbGlkIFBMTU4gSWRlbnRpdHkuIjsKCiAgICAgICAgICAgICAgICBsZWFmIG1jYyB7CiAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIlRoZSBNQ0MgcGFydCBvZiBhIFBMTU4gaWRlbnRpdHkgdXNlZCBpbiB0aGUKICAgICAgICAgICAgICAgICAgICAgICAgcmFkaW8gbmV0d29yay4iOwogICAgICAgICAgICAgICAgICAgIHR5cGUgaW50MzIgewogICAgICAgICAgICAgICAgICAgICAgICByYW5nZSAwLi45OTk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgbGVhZiBtbmMgewogICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICJUaGUgTU5DIHBhcnQgb2YgYSBQTE1OIGlkZW50aXR5IHVzZWQgaW4gdGhlCiAgICAgICAgICAgICAgICAgICAgICAgIHJhZGlvIG5ldHdvcmsuIjsKICAgICAgICAgICAgICAgICAgICB0eXBlIGludDMyIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmFuZ2UgMC4uOTk5OwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGxlYWYgbW5jTGVuZ3RoIHsKICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiAiVGhlIGxlbmd0aCBvZiB0aGUgTU5DIHBhcnQgb2YgYSBQTE1OIGlkZW50aXR5CiAgICAgICAgICAgICAgICAgICAgICAgIHVzZWQgaW4gdGhlIHJhZGlvIG5ldHdvcmsuIjsKICAgICAgICAgICAgICAgICAgICB0eXBlIGludDMyIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmFuZ2UgMi4uMzsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgbGlzdCBMVEVTZWN0b3JDYXJyaWVyIHsKICAgICAgICBkZXNjcmlwdGlvbiAiVGhlIExURSBTZWN0b3IgQ2FycmllciBvYmplY3QgcHJvdmlkZXMgdGhlIGF0dHJpYnV0ZXMgZm9yCiAgICAgICAgICAgIGRlZmluaW5nIHRoZSBsb2dpY2FsIGNoYXJhY3RlcmlzdGljcyBvZiBhIGNhcnJpZXIgKGNlbGwpIGluIGEKICAgICAgICAgICAgc2VjdG9yLiBBIHNlY3RvciBpcyBhIGNvdmVyYWdlIGFyZWEgYXNzb2NpYXRlZCB3aXRoIGEgYmFzZSBzdGF0aW9uCiAgICAgICAgICAgIGhhdmluZyBpdHMgb3duIGFudGVubmFzLCByYWRpbyBwb3J0cywgYW5kIGNvbnRyb2wgY2hhbm5lbHMuIFRoZQogICAgICAgICAgICBjb25jZXB0IG9mIHNlY3RvcnMgd2FzIGRldmVsb3BlZCB0byBpbXByb3ZlIGNvLWNoYW5uZWwgaW50ZXJmZXJlbmNlCiAgICAgICAgICAgIGluIGNlbGx1bGFyIHN5c3RlbXMsIGFuZCBtb3N0IHdpcmVsZXNzIHN5c3RlbXMgdXNlIHRocmVlIHNlY3RvcgogICAgICAgICAgICBjZWxscy4iOwoKICAgICAgICB1c2VzIG9yLXRlaXYtdHlwZXM6VG9wX0dycF9UeXBlOwogICAgICAgIGtleSBpZDsKCiAgICAgICAgY29udGFpbmVyIGF0dHJpYnV0ZXMgewogICAgICAgICAgICBsZWFmIHNlY3RvckNhcnJpZXJUeXBlIHsKICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICJJbmRpY2F0ZXMgd2hldGhlciBvciBub3QgdGhlIHNlY3RvciBjYXJyaWVyCiAgICAgICAgICAgICAgICAgICAgbW9kZWxsZWQgYnkgTU8gU2VjdG9yQ2FycmllciBpcyBhIGRpZ2l0YWwgc2VjdG9yLiI7CiAgICAgICAgICAgICAgICB0eXBlIGVudW1lcmF0aW9uIHsKICAgICAgICAgICAgICAgICAgICBlbnVtIG5vcm1hbF9zZWN0b3IgewogICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSAwOwogICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiAiTm90IGEgZGlnaXRhbCBzZWN0b3IiOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbnVtIGxlZnRfZGlnaXRhbF9zZWN0b3IgewogICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSAxOwogICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiAiTGVmdCBkaWdpdGFsIHNlY3RvciBmb3IgMkRTIjsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZW51bSByaWdodF9kaWdpdGFsX3NlY3RvciB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlIDI7CiAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICJSaWdodCBkaWdpdGFsIHNlY3RvciBmb3IgMkRTIjsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZW51bSBsZWZ0X2RpZ2l0YWxfc2VjdG9yXzNkcyB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlIDM7CiAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICJMZWZ0IGRpZ2l0YWwgc2VjdG9yIGZvciAzRFMiOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbnVtIHJpZ2h0X2RpZ2l0YWxfc2VjdG9yXzNkcyB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlIDQ7CiAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICJSaWdodCBkaWdpdGFsIHNlY3RvciBmb3IgM0RTIjsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZW51bSBtaWRkbGVfZGlnaXRhbF9zZWN0b3JfM2RzIHsKICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgNTsKICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIk1pZGRsZSBkaWdpdGFsIHNlY3RvciBmb3IgM0RTIjsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgbGlzdCBBbnRlbm5hQ2FwYWJpbGl0eSB7CiAgICAgICAgZGVzY3JpcHRpb24gIlRoaXMgTU8gc2VydmVzIGFzIGEgbWFwcGluZyBiZXR3ZWVuIHRoZSBjZWxsIGFuZCB0aGUgUkJTCiAgICAgICAgICAgIGVxdWlwbWVudCB1c2VkIHRvIHByb3ZpZGUgY292ZXJhZ2UgaW4gYSBjZXJ0YWluIGdlb2dyYXBoaWNhbCBhcmVhLgogICAgICAgICAgICBUaGUgTU8gYWxzbyBjb250cm9scyB0aGUgbWF4aW11bSBvdXRwdXQgcG93ZXIgb2YgdGhlIHNlY3Rvci4iOwoKICAgICAgICB1c2VzIG9yLXRlaXYtdHlwZXM6VG9wX0dycF9UeXBlOwogICAgICAgIGtleSBpZDsKCiAgICAgICAgY29udGFpbmVyIGF0dHJpYnV0ZXMgewogICAgICAgICAgICBsZWFmLWxpc3QgZVV0cmFuRnFCYW5kcyB7CiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiAiTGlzdCBvZiBMVEUgZnJlcXVlbmN5IGJhbmRzIHRoYXQgYXNzb2NpYXRlZAogICAgICAgICAgICAgICAgICAgIGhhcmR3YXJlIHN1cHBvcnRzIjsKICAgICAgICAgICAgICAgIHR5cGUgc3RyaW5nOwogICAgICAgICAgICB9CgogICAgICAgICAgICBsZWFmLWxpc3QgZ2VyYW5GcUJhbmRzIHsKICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICJMaXN0IG9mIEdFUkFOIGZyZXF1ZW5jeSBiYW5kcyB0aGF0IGFzc29jaWF0ZWQKICAgICAgICAgICAgICAgICAgICBoYXJkd2FyZSBzdXBwb3J0cyI7CiAgICAgICAgICAgICAgICB0eXBlIHN0cmluZzsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgbGVhZi1saXN0IG5SRnFCYW5kcyB7CiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiAiTGlzdCBvZiBOUiBmcmVxdWVuY3kgYmFuZHMgYXNzb2NpYXRlZCBoYXJkd2FyZQogICAgICAgICAgICAgICAgICAgIHN1cHBvcnRzIjsKICAgICAgICAgICAgICAgIHR5cGUgc3RyaW5nOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIG9yLXRlaXYteWV4dDpiaURpcmVjdGlvbmFsVG9wb2xvZ3lSZWxhdGlvbnNoaXAgRU5PREVCRlVOQ1RJT05fUFJPVklERVNfTFRFU0VDVE9SQ0FSUklFUiB7IC8vIDEgdG8gMC4ubgoKICAgICAgICB1c2VzIG9yLXRlaXYtdHlwZXM6VG9wX0dycF9UeXBlOwogICAgICAgIGtleSBpZDsKCiAgICAgICAgbGVhZi1saXN0IHByb3ZpZGVkLWx0ZVNlY3RvckNhcnJpZXIgewogICAgICAgICAgICBkZXNjcmlwdGlvbiAiZU5vZGVCIEZ1bmN0aW9uIHByb3ZpZGVzIExURSBTZWN0b3IgQ2Fycmllci4iOwogICAgICAgICAgICBvci10ZWl2LXlleHQ6YVNpZGUgRU5vZGVCRnVuY3Rpb247CiAgICAgICAgICAgIHR5cGUgaW5zdGFuY2UtaWRlbnRpZmllcjsKICAgICAgICB9CgogICAgICAgIGxlYWYgcHJvdmlkZWQtYnktZW5vZGViRnVuY3Rpb24gewogICAgICAgICAgICBkZXNjcmlwdGlvbiAiTFRFIFNlY3RvciBDYXJyaWVyIHByb3ZpZGVkIGJ5IGVOb2RlQiBGdW5jdGlvbi4iOwogICAgICAgICAgICBvci10ZWl2LXlleHQ6YlNpZGUgTFRFU2VjdG9yQ2FycmllcjsKICAgICAgICAgICAgdHlwZSBpbnN0YW5jZS1pZGVudGlmaWVyOwogICAgICAgICAgICBtYW5kYXRvcnkgdHJ1ZTsKICAgICAgICB9CiAgICB9CgogICAgb3ItdGVpdi15ZXh0OmJpRGlyZWN0aW9uYWxUb3BvbG9neVJlbGF0aW9uc2hpcCBMVEVTRUNUT1JDQVJSSUVSX1VTRVNfQU5URU5OQUNBUEFCSUxJVFkgeyAvLyAwLi5uIHRvIDAuLjEKCiAgICAgICAgdXNlcyBvci10ZWl2LXR5cGVzOlRvcF9HcnBfVHlwZTsKICAgICAgICBrZXkgaWQ7CgogICAgICAgIGxlYWYgdXNlZC1hbnRlbm5hQ2FwYWJpbGl0eSB7CiAgICAgICAgICAgIGRlc2NyaXB0aW9uICJMVEUgU2VjdG9yIENhcnJpZXIgdXNlcyBBbnRlbm5hIENhcGFiaWxpdHkuIjsKICAgICAgICAgICAgb3ItdGVpdi15ZXh0OmFTaWRlIExURVNlY3RvckNhcnJpZXI7CiAgICAgICAgICAgIHR5cGUgaW5zdGFuY2UtaWRlbnRpZmllcjsKICAgICAgICB9CgogICAgICAgIGxlYWYtbGlzdCB1c2VkLWJ5LWx0ZVNlY3RvckNhcnJpZXIgewogICAgICAgICAgICBkZXNjcmlwdGlvbiAiQW50ZW5uYSBDYXBhYmlsaXR5IHVzZWQgYnkgTFRFIFNlY3RvciBDYXJyaWVyLiI7CiAgICAgICAgICAgIG9yLXRlaXYteWV4dDpiU2lkZSBBbnRlbm5hQ2FwYWJpbGl0eTsKICAgICAgICAgICAgdHlwZSBpbnN0YW5jZS1pZGVudGlmaWVyOwogICAgICAgIH0KICAgIH0KfQ==
+o-ran-smo-teiv-rel-equipment-ran	urn:o-ran:smo-teiv-rel-equipment-ran	REL_EQUIPMENT_RAN	["o-ran-smo-teiv-equipment", "o-ran-smo-teiv-ran"]	2024-05-24	bW9kdWxlIG8tcmFuLXNtby10ZWl2LXJlbC1lcXVpcG1lbnQtcmFuIHsKICAgIHlhbmctdmVyc2lvbiAxLjE7CiAgICBuYW1lc3BhY2UgInVybjpvLXJhbjpzbW8tdGVpdi1yZWwtZXF1aXBtZW50LXJhbiI7CiAgICBwcmVmaXggb3ItdGVpdi1yZWwtZXF1aXByYW47CgogICAgaW1wb3J0IG8tcmFuLXNtby10ZWl2LWNvbW1vbi15YW5nLXR5cGVzIHsgcHJlZml4IG9yLXRlaXYtdHlwZXM7IH0KCiAgICBpbXBvcnQgby1yYW4tc21vLXRlaXYtY29tbW9uLXlhbmctZXh0ZW5zaW9ucyB7IHByZWZpeCBvci10ZWl2LXlleHQ7IH0KCiAgICBpbXBvcnQgby1yYW4tc21vLXRlaXYtZXF1aXBtZW50IHsgcHJlZml4IG9yLXRlaXYtZXF1aXA7IH0KCiAgICBpbXBvcnQgby1yYW4tc21vLXRlaXYtcmFuIHsgcHJlZml4IG9yLXRlaXYtcmFuOyB9CgogICAgb3JnYW5pemF0aW9uICJFcmljc3NvbiBBQiI7CiAgICBjb250YWN0ICJFcmljc3NvbiBmaXJzdCBsaW5lIHN1cHBvcnQgdmlhIGVtYWlsIjsKICAgIGRlc2NyaXB0aW9uCiAgICAiRXF1aXBtZW50IGFuZCBSQU4gdG9wb2xvZ3kgcmVsYXRpb24gbW9kZWwuCgogICAgQ29weXJpZ2h0IChjKSAyMDI0IEVyaWNzc29uIEFCLiBBbGwgcmlnaHRzIHJlc2VydmVkLgoKICAgIFRoaXMgbW9kZWwgY29udGFpbnMgdGhlIHRvcG9sb2d5IHJlbGF0aW9ucyBiZXR3ZWVuIEVxdWlwbWVudCBhbmQgUkFOLiI7CgogICAgcmV2aXNpb24gIjIwMjQtMDUtMjQiIHsKICAgICAgICBkZXNjcmlwdGlvbiAiSW5pdGlhbCByZXZpc2lvbi4iOwogICAgICAgIG9yLXRlaXYteWV4dDpsYWJlbCAwLjMuMDsKICAgIH0KCiAgICBvci10ZWl2LXlleHQ6ZG9tYWluIFJFTF9FUVVJUE1FTlRfUkFOOwoKICAgIG9yLXRlaXYteWV4dDpiaURpcmVjdGlvbmFsVG9wb2xvZ3lSZWxhdGlvbnNoaXAgQU5URU5OQU1PRFVMRV9TRVJWRVNfQU5URU5OQUNBUEFCSUxJVFkgeyAvLyAwLi5uIHRvIDAuLm0KCiAgICAgICAgdXNlcyBvci10ZWl2LXR5cGVzOlRvcF9HcnBfVHlwZTsKICAgICAgICBrZXkgaWQ7CgogICAgICAgIGxlYWYtbGlzdCBzZXJ2aWNlZC1hbnRlbm5hQ2FwYWJpbGl0eSB7CiAgICAgICAgICAgIGRlc2NyaXB0aW9uICJBbnRlbm5hIENhcGFiaWxpdHkgc2VydmljZWQgYnkgdGhpcyBBbnRlbm5hIE1vZHVsZS4iOwogICAgICAgICAgICBvci10ZWl2LXlleHQ6YVNpZGUgb3ItdGVpdi1lcXVpcDpBbnRlbm5hTW9kdWxlOwogICAgICAgICAgICB0eXBlIGluc3RhbmNlLWlkZW50aWZpZXI7CiAgICAgICAgfQoKICAgICAgICBsZWFmLWxpc3Qgc2VydmluZy1hbnRlbm5hTW9kdWxlIHsKICAgICAgICAgICAgZGVzY3JpcHRpb24gIkFudGVubmEgTW9kdWxlIHNlcnZlcyB0aGlzIEFudGVubmEgQ2FwYWJpbGl0eS4iOwogICAgICAgICAgICBvci10ZWl2LXlleHQ6YlNpZGUgb3ItdGVpdi1yYW46QW50ZW5uYUNhcGFiaWxpdHk7CiAgICAgICAgICAgIHR5cGUgaW5zdGFuY2UtaWRlbnRpZmllcjsKICAgICAgICB9CiAgICB9Cn0=
 \.
 
-COPY ties_model.entity_info("name", "moduleReferenceName") FROM stdin;
-AntennaModule	o-ran-smo-teiv-equipment
-CloudSite	o-ran-smo-teiv-cloud
-ENodeBFunction	o-ran-smo-teiv-ran
-AntennaCapability	o-ran-smo-teiv-ran
-LTESectorCarrier	o-ran-smo-teiv-ran
+COPY ties_model.entity_info("storedAt", "name", "moduleReferenceName") FROM stdin;
+o-ran-smo-teiv-equipment_AntennaModule	AntennaModule	o-ran-smo-teiv-equipment
+o-ran-smo-teiv-ran_AntennaCapability	AntennaCapability	o-ran-smo-teiv-ran
+o-ran-smo-teiv-ran_ENodeBFunction	ENodeBFunction	o-ran-smo-teiv-ran
+o-ran-smo-teiv-ran_GNBDUFunction	GNBDUFunction	o-ran-smo-teiv-ran
+o-ran-smo-teiv-ran_LTESectorCarrier	LTESectorCarrier	o-ran-smo-teiv-ran
 \.
 
-COPY ties_model.relationship_info("name", "aSideAssociationName", "aSideMOType", "aSideMinCardinality", "aSideMaxCardinality", "bSideAssociationName", "bSideMOType", "bSideMinCardinality", "bSideMaxCardinality", "associationKind", "relationshipDataLocation", "connectSameEntity", "moduleReferenceName") FROM stdin;
-ENODEBFUNCTION_PROVIDES_LTESECTORCARRIER	provided-lteSectorCarrier	ENodeBFunction	1	1	provided-by-enodebFunction	LTESectorCarrier	0	9223372036854775807	BI_DIRECTIONAL	B_SIDE	false	o-ran-smo-teiv-ran
+COPY ties_model.relationship_info("name", "aSideAssociationName", "aSideMOType", "aSideModule", "aSideMinCardinality", "aSideMaxCardinality", "bSideAssociationName", "bSideMOType", "bSideModule", "bSideMinCardinality", "bSideMaxCardinality", "associationKind", "connectSameEntity", "relationshipDataLocation", "storedAt", "moduleReferenceName") FROM stdin;
+ENODEBFUNCTION_PROVIDES_LTESECTORCARRIER	provided-lteSectorCarrier	ENodeBFunction	o-ran-smo-teiv-ran	1	1	provided-by-enodebFunction	LTESectorCarrier	o-ran-smo-teiv-ran	0	9223372036854775807	BI_DIRECTIONAL	false	B_SIDE	o-ran-smo-teiv-ran_LTESectorCarrier	o-ran-smo-teiv-ran
 \.
 
 ;
diff --git a/pgsql-schema-generator/src/test/resources/baseline-schema/02_init-oran-smo-teiv-consumer-data.sql b/pgsql-schema-generator/src/test/resources/baseline-schema/02_init-oran-smo-teiv-consumer-data.sql
new file mode 100644
index 0000000..e393eb0
--- /dev/null
+++ b/pgsql-schema-generator/src/test/resources/baseline-schema/02_init-oran-smo-teiv-consumer-data.sql
@@ -0,0 +1,53 @@
+--
+-- ============LICENSE_START=======================================================
+-- Copyright (C) 2024 Ericsson
+-- Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+-- ================================================================================
+-- Licensed under the Apache License, Version 2.0 (the "License");
+-- you may not use this file except in compliance with the License.
+-- You may obtain a copy of the License at
+--
+--       http://www.apache.org/licenses/LICENSE-2.0
+--
+-- Unless required by applicable law or agreed to in writing, software
+-- distributed under the License is distributed on an "AS IS" BASIS,
+-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+-- See the License for the specific language governing permissions and
+-- limitations under the License.
+--
+-- SPDX-License-Identifier: Apache-2.0
+-- ============LICENSE_END=========================================================
+--
+
+BEGIN;
+
+CREATE SCHEMA IF NOT EXISTS ties_consumer_data;
+ALTER SCHEMA ties_consumer_data OWNER TO :pguser;
+SET default_tablespace = '';
+SET default_table_access_method = heap;
+
+SET ROLE :'pguser';
+
+CREATE TABLE IF NOT EXISTS ties_consumer_data."module_reference" (
+    "name"            TEXT PRIMARY KEY,
+    "namespace"       TEXT,
+    "revision"        TEXT NOT NULL,
+    "content"         TEXT NOT NULL,
+    "ownerAppId"      VARCHAR(511) NOT NULL,
+    "status"          VARCHAR(127) NOT NULL
+);
+
+CREATE TABLE IF NOT EXISTS ties_consumer_data."decorators" (
+    "name"                TEXT PRIMARY KEY,
+    "dataType"            VARCHAR(511) NOT NULL,
+    "moduleReferenceName" TEXT NOT NULL,
+    FOREIGN KEY ("moduleReferenceName") REFERENCES ties_consumer_data."module_reference" ("name") ON DELETE CASCADE
+);
+
+CREATE TABLE IF NOT EXISTS ties_consumer_data."classifiers" (
+    "name"                TEXT PRIMARY KEY,
+    "moduleReferenceName" TEXT NOT NULL,
+    FOREIGN KEY ("moduleReferenceName") REFERENCES ties_consumer_data."module_reference" ("name") ON DELETE CASCADE
+);
+
+COMMIT;
diff --git a/pgsql-schema-generator/src/test/resources/expected-db-schema/result_00_init-oran-smo-teiv-data.sql b/pgsql-schema-generator/src/test/resources/expected-db-schema/result_00_init-oran-smo-teiv-data.sql
index c3da7c1..4052755 100644
--- a/pgsql-schema-generator/src/test/resources/expected-db-schema/result_00_init-oran-smo-teiv-data.sql
+++ b/pgsql-schema-generator/src/test/resources/expected-db-schema/result_00_init-oran-smo-teiv-data.sql
@@ -23,6 +23,7 @@
 
 CREATE EXTENSION IF NOT EXISTS postgis;
 CREATE EXTENSION IF NOT EXISTS postgis_topology;
+CREATE EXTENSION IF NOT EXISTS pg_trgm;
 
 GRANT USAGE ON SCHEMA topology to :pguser;
 GRANT SELECT ON ALL SEQUENCES IN SCHEMA topology TO :pguser;
@@ -49,412 +50,506 @@
 $$ language 'plpgsql';
 
 -- Update data schema exec status
-INSERT INTO ties_model.entity_info("schema", "status") VALUES ('ties_data', 'success');
+INSERT INTO ties_model.execution_status("schema", "status") VALUES ('ties_data', 'success');
 
-CREATE TABLE IF NOT EXISTS ties_data."ANTENNACAPABILITY_REALISED_BY_ANTENNACAPABILITY" (
-	"id"			VARCHAR(511),
-	"aSide_AntennaCapability"			VARCHAR(511),
-	"bSide_AntennaCapability"			VARCHAR(511),
+CREATE TABLE IF NOT EXISTS ties_data."10B9F515756871D3EF6558FAF1F112BAE207945D" (
+	"id"			TEXT,
+	"6446B2D4BE5E367FB0396383C4BDEF42D51CF74F"			TEXT,
+	"F03B534AFF0872651FED60C54AB56BEDADAB94B5"			BIGINT,
+	"333177AA699C0DE6399503171DCF48FB396322B0"			INTEGER,
+	"027B1A8019C6DEF04558B90D9D8B52253B82FEC6"			BIGINT,
+	"478D043D81678134EF1C8BFB073A70F882C4AF12"			DECIMAL,
+	"8252D18D44F633831557076D827993C45278024D"			jsonb,
+	"68C48305AB6C3A30DD927F5D38562379374A4B31"			jsonb,
+	"CD_sourceIds"			jsonb,
+	"CD_classifiers"			jsonb,
+	"CD_decorators"			jsonb,
+	"REL_FK_provided-by-entityTypeA"			TEXT,
+	"REL_ID_F64052A4F8BB3CC533EC15BBFB5E224F600735B0"			TEXT,
+	"REL_CD_F26C39EC1F710F3096BE0588F6783A03A378516A"			jsonb,
+	"REL_CD_E2C3D598A06EA38133E23C1756ED58A66FE21386"			jsonb,
+	"REL_CD_92559ED73C761B860682582A040E745ECEC194D5"			jsonb
+);
+
+ALTER TABLE ONLY ties_data."10B9F515756871D3EF6558FAF1F112BAE207945D" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
+
+ALTER TABLE ONLY ties_data."10B9F515756871D3EF6558FAF1F112BAE207945D" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
+
+ALTER TABLE ONLY ties_data."10B9F515756871D3EF6558FAF1F112BAE207945D" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
+
+ALTER TABLE ONLY ties_data."10B9F515756871D3EF6558FAF1F112BAE207945D" ALTER COLUMN "REL_CD_F26C39EC1F710F3096BE0588F6783A03A378516A" SET DEFAULT '[]';
+
+ALTER TABLE ONLY ties_data."10B9F515756871D3EF6558FAF1F112BAE207945D" ALTER COLUMN "REL_CD_E2C3D598A06EA38133E23C1756ED58A66FE21386" SET DEFAULT '[]';
+
+ALTER TABLE ONLY ties_data."10B9F515756871D3EF6558FAF1F112BAE207945D" ALTER COLUMN "REL_CD_92559ED73C761B860682582A040E745ECEC194D5" SET DEFAULT '{}';
+
+CREATE TABLE IF NOT EXISTS ties_data."54110F8D085BBBA7BB6DE5CE71B511562090F7EE" (
+	"id"			TEXT,
+	"aSide_EntityTypeA"			TEXT,
+	"bSide_A85CE100A012A71EF2ABA306BABE484AC2AAE515"			TEXT,
 	"CD_sourceIds"			jsonb,
 	"CD_classifiers"			jsonb,
 	"CD_decorators"			jsonb
 );
 
-ALTER TABLE ONLY ties_data."ANTENNACAPABILITY_REALISED_BY_ANTENNACAPABILITY" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
+ALTER TABLE ONLY ties_data."54110F8D085BBBA7BB6DE5CE71B511562090F7EE" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
 
-ALTER TABLE ONLY ties_data."ANTENNACAPABILITY_REALISED_BY_ANTENNACAPABILITY" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
+ALTER TABLE ONLY ties_data."54110F8D085BBBA7BB6DE5CE71B511562090F7EE" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
 
-ALTER TABLE ONLY ties_data."ANTENNACAPABILITY_REALISED_BY_ANTENNACAPABILITY" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
+ALTER TABLE ONLY ties_data."54110F8D085BBBA7BB6DE5CE71B511562090F7EE" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
 
-CREATE TABLE IF NOT EXISTS ties_data."ANTENNAMODULE_SERVES_ANTENNACAPABILITY" (
-	"id"			VARCHAR(511),
-	"aSide_AntennaModule"			VARCHAR(511),
-	"bSide_AntennaCapability"			VARCHAR(511),
+CREATE TABLE IF NOT EXISTS ties_data."CFC235E0404703D1E4454647DF8AAE2C193DB402" (
+	"id"			TEXT,
+	"aSide_AntennaModule"			TEXT,
+	"bSide_AntennaCapability"			TEXT,
 	"CD_sourceIds"			jsonb,
 	"CD_classifiers"			jsonb,
 	"CD_decorators"			jsonb
 );
 
-ALTER TABLE ONLY ties_data."ANTENNAMODULE_SERVES_ANTENNACAPABILITY" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
+ALTER TABLE ONLY ties_data."CFC235E0404703D1E4454647DF8AAE2C193DB402" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
 
-ALTER TABLE ONLY ties_data."ANTENNAMODULE_SERVES_ANTENNACAPABILITY" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
+ALTER TABLE ONLY ties_data."CFC235E0404703D1E4454647DF8AAE2C193DB402" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
 
-ALTER TABLE ONLY ties_data."ANTENNAMODULE_SERVES_ANTENNACAPABILITY" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
+ALTER TABLE ONLY ties_data."CFC235E0404703D1E4454647DF8AAE2C193DB402" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
 
-CREATE TABLE IF NOT EXISTS ties_data."ANTENNAMODULE_USES_ANTENNAMODULE" (
-	"id"			VARCHAR(511),
-	"aSide_AntennaModule"			VARCHAR(511),
-	"bSide_AntennaModule"			VARCHAR(511),
+CREATE TABLE IF NOT EXISTS ties_data."FB1E124031A12CD85D3335194B39B193723A0490" (
+	"id"			TEXT,
+	"aSide_C812C285BEFA4EC42026AB075D9C65200A00F815"			TEXT,
+	"bSide_A85CE100A012A71EF2ABA306BABE484AC2AAE515"			TEXT,
 	"CD_sourceIds"			jsonb,
 	"CD_classifiers"			jsonb,
 	"CD_decorators"			jsonb
 );
 
-ALTER TABLE ONLY ties_data."ANTENNAMODULE_USES_ANTENNAMODULE" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
+ALTER TABLE ONLY ties_data."FB1E124031A12CD85D3335194B39B193723A0490" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
 
-ALTER TABLE ONLY ties_data."ANTENNAMODULE_USES_ANTENNAMODULE" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
+ALTER TABLE ONLY ties_data."FB1E124031A12CD85D3335194B39B193723A0490" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
 
-ALTER TABLE ONLY ties_data."ANTENNAMODULE_USES_ANTENNAMODULE" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
+ALTER TABLE ONLY ties_data."FB1E124031A12CD85D3335194B39B193723A0490" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
 
-CREATE TABLE IF NOT EXISTS ties_data."AntennaCapability" (
-	"id"			VARCHAR(511),
+CREATE TABLE IF NOT EXISTS ties_data."o-ran-smo-teiv-equipment_AntennaModule" (
+	"id"			TEXT,
+	"antennaBeamWidth"			jsonb,
+	"antennaModelNumber"			TEXT,
+	"electricalAntennaTilt"			INTEGER,
+	"geo-location"			geography,
+	"mechanicalAntennaBearing"			INTEGER,
+	"mechanicalAntennaTilt"			INTEGER,
+	"positionWithinSector"			TEXT,
+	"totalTilt"			INTEGER,
+	"CD_sourceIds"			jsonb,
+	"CD_classifiers"			jsonb,
+	"CD_decorators"			jsonb
+);
+
+ALTER TABLE ONLY ties_data."o-ran-smo-teiv-equipment_AntennaModule" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
+
+ALTER TABLE ONLY ties_data."o-ran-smo-teiv-equipment_AntennaModule" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
+
+ALTER TABLE ONLY ties_data."o-ran-smo-teiv-equipment_AntennaModule" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
+
+CREATE TABLE IF NOT EXISTS ties_data."o-ran-smo-teiv-ran_AntennaCapability" (
+	"id"			TEXT,
+	"eUtranFqBands"			jsonb,
 	"geranFqBands"			jsonb,
 	"nRFqBands"			jsonb,
-	"eUtranFqBands"			jsonb,
 	"CD_sourceIds"			jsonb,
 	"CD_classifiers"			jsonb,
 	"CD_decorators"			jsonb
 );
 
-ALTER TABLE ONLY ties_data."AntennaCapability" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
+ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_AntennaCapability" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
 
-ALTER TABLE ONLY ties_data."AntennaCapability" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
+ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_AntennaCapability" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
 
-ALTER TABLE ONLY ties_data."AntennaCapability" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
+ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_AntennaCapability" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
 
-CREATE TABLE IF NOT EXISTS ties_data."AntennaModule" (
-	"id"			VARCHAR(511),
-	"positionWithinSector"			TEXT,
-	"electricalAntennaTilt"			BIGINT,
-	"mechanicalAntennaBearing"			BIGINT,
-	"antennaBeamWidth"			jsonb,
-	"mechanicalAntennaTilt"			BIGINT,
-	"antennaModelNumber"			TEXT,
-	"totalTilt"			BIGINT,
-	"geo-location"	geography,
-	"CD_sourceIds"			jsonb,
-	"CD_classifiers"			jsonb,
-	"CD_decorators"			jsonb
-);
-
-ALTER TABLE ONLY ties_data."AntennaModule" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
-
-ALTER TABLE ONLY ties_data."AntennaModule" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
-
-ALTER TABLE ONLY ties_data."AntennaModule" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
-
-CREATE TABLE IF NOT EXISTS ties_data."ENodeBFunction" (
-	"id"			VARCHAR(511),
-	"eNBId"			BIGINT,
+CREATE TABLE IF NOT EXISTS ties_data."o-ran-smo-teiv-ran_ENodeBFunction" (
+	"id"			TEXT,
+	"eNBId"			INTEGER,
 	"eNodeBPlmnId"			jsonb,
 	"CD_sourceIds"			jsonb,
 	"CD_classifiers"			jsonb,
 	"CD_decorators"			jsonb
 );
 
-ALTER TABLE ONLY ties_data."ENodeBFunction" ALTER COLUMN "eNBId" SET DEFAULT '11';
+ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_ENodeBFunction" ALTER COLUMN "eNBId" SET DEFAULT '11';
 
-ALTER TABLE ONLY ties_data."ENodeBFunction" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
+ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_ENodeBFunction" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
 
-ALTER TABLE ONLY ties_data."ENodeBFunction" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
+ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_ENodeBFunction" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
 
-ALTER TABLE ONLY ties_data."ENodeBFunction" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
+ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_ENodeBFunction" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
 
-CREATE TABLE IF NOT EXISTS ties_data."GNBDUFunction" (
-	"id"			VARCHAR(511),
+CREATE TABLE IF NOT EXISTS ties_data."o-ran-smo-teiv-ran_GNBDUFunction" (
+	"id"			TEXT,
 	"dUpLMNId"			jsonb,
 	"gNBDUId"			BIGINT,
-	"gNBIdLength"			BIGINT,
 	"gNBId"			BIGINT,
+	"gNBIdLength"			INTEGER,
 	"CD_sourceIds"			jsonb,
 	"CD_classifiers"			jsonb,
-	"CD_decorators"			jsonb,
+	"CD_decorators"			jsonb
 );
 
-ALTER TABLE ONLY ties_data."GNBDUFunction" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
+ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_GNBDUFunction" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
 
-ALTER TABLE ONLY ties_data."GNBDUFunction" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
+ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_GNBDUFunction" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
 
-ALTER TABLE ONLY ties_data."GNBDUFunction" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
+ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_GNBDUFunction" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
 
-CREATE TABLE IF NOT EXISTS ties_data."LTESectorCarrier" (
-	"id"			VARCHAR(511),
+CREATE TABLE IF NOT EXISTS ties_data."o-ran-smo-teiv-ran_LTESectorCarrier" (
+	"id"			TEXT,
 	"sectorCarrierType"			TEXT,
 	"CD_sourceIds"			jsonb,
-	"REL_FK_provided-by-enodebFunction"			VARCHAR(511),
-	"REL_ID_ENODEBFUNCTION_PROVIDES_LTESECTORCARRIER"			VARCHAR(511),
+	"CD_classifiers"			jsonb,
+	"CD_decorators"			jsonb,
+	"REL_FK_provided-by-enodebFunction"			TEXT,
+	"REL_ID_ENODEBFUNCTION_PROVIDES_LTESECTORCARRIER"			TEXT,
 	"REL_CD_sourceIds_ENODEBFUNCTION_PROVIDES_LTESECTORCARRIER"			jsonb,
-	"REL_FK_used-antennaCapability"			VARCHAR(511),
-	"REL_ID_LTESECTORCARRIER_USES_ANTENNACAPABILITY"			VARCHAR(511),
+	"REL_CD_classifiers_ENODEBFUNCTION_PROVIDES_LTESECTORCARRIER"			jsonb,
+	"REL_CD_decorators_ENODEBFUNCTION_PROVIDES_LTESECTORCARRIER"			jsonb,
+	"REL_FK_used-antennaCapability"			TEXT,
+	"REL_ID_LTESECTORCARRIER_USES_ANTENNACAPABILITY"			TEXT,
 	"REL_CD_sourceIds_LTESECTORCARRIER_USES_ANTENNACAPABILITY"			jsonb,
+	"REL_CD_classifiers_LTESECTORCARRIER_USES_ANTENNACAPABILITY"			jsonb,
+	"REL_CD_decorators_LTESECTORCARRIER_USES_ANTENNACAPABILITY"			jsonb
+);
+
+ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_LTESectorCarrier" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
+
+ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_LTESectorCarrier" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
+
+ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_LTESectorCarrier" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
+
+ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_LTESectorCarrier" ALTER COLUMN "REL_CD_sourceIds_ENODEBFUNCTION_PROVIDES_LTESECTORCARRIER" SET DEFAULT '[]';
+
+ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_LTESectorCarrier" ALTER COLUMN "REL_CD_classifiers_ENODEBFUNCTION_PROVIDES_LTESECTORCARRIER" SET DEFAULT '[]';
+
+ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_LTESectorCarrier" ALTER COLUMN "REL_CD_decorators_ENODEBFUNCTION_PROVIDES_LTESECTORCARRIER" SET DEFAULT '{}';
+
+ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_LTESectorCarrier" ALTER COLUMN "REL_CD_sourceIds_LTESECTORCARRIER_USES_ANTENNACAPABILITY" SET DEFAULT '[]';
+
+ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_LTESectorCarrier" ALTER COLUMN "REL_CD_classifiers_LTESECTORCARRIER_USES_ANTENNACAPABILITY" SET DEFAULT '[]';
+
+ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_LTESectorCarrier" ALTER COLUMN "REL_CD_decorators_LTESECTORCARRIER_USES_ANTENNACAPABILITY" SET DEFAULT '{}';
+
+CREATE TABLE IF NOT EXISTS ties_data."test-built-in-module_EntityTypeA" (
+	"id"			TEXT,
+	"CD_sourceIds"			jsonb,
 	"CD_classifiers"			jsonb,
 	"CD_decorators"			jsonb,
-	"REL_CD_classifiers_ENODEBFUNCTION_PROVIDES_LTESECTORCARRIER" jsonb,
-    "REL_CD_classifiers_LTESECTORCARRIER_USES_ANTENNACAPABILITY" jsonb,
-    "REL_CD_decorators_ENODEBFUNCTION_PROVIDES_LTESECTORCARRIER" jsonb,
-    "REL_CD_decorators_LTESECTORCARRIER_USES_ANTENNACAPABILITY" jsonb
+	"REL_FK_B7E43411C5C5079D49856E74A9FA63BD20C522C5"			TEXT,
+	"REL_ID_31A5B55158140557F09AE15589A8B8038416689B"			TEXT,
+	"REL_CD_AB6BDADE3F6C750C9FDB6CAD6059C4CBCE67236C"			jsonb,
+	"REL_CD_75B161E740A96ADBAE6F08D4F85684ECC29049B9"			jsonb,
+	"REL_CD_6F7211CAF505AECF9A565BC7A4AF56E7032CCC54"			jsonb,
+	"REL_FK_A86937FEBD025CFDF6EE5BC386B4C569EB2652DA"			TEXT,
+	"REL_ID_A974AD6DD8C4CA281D45693D3A61AE98FEE82845"			TEXT,
+	"REL_CD_3B43F80D423BF8F96A2906643B7B4712604FC28B"			jsonb,
+	"REL_CD_74A44B167FDF37D6C8E79B5033FEF8BC384C881A"			jsonb,
+	"REL_CD_F5B24D9A7273119D4D1519473D9EC88CB407E5CA"			jsonb
 );
 
-ALTER TABLE ONLY ties_data."LTESectorCarrier" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
+ALTER TABLE ONLY ties_data."test-built-in-module_EntityTypeA" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
 
-ALTER TABLE ONLY ties_data."LTESectorCarrier" ALTER COLUMN "REL_CD_sourceIds_ENODEBFUNCTION_PROVIDES_LTESECTORCARRIER" SET DEFAULT '[]';
+ALTER TABLE ONLY ties_data."test-built-in-module_EntityTypeA" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
 
-ALTER TABLE ONLY ties_data."LTESectorCarrier" ALTER COLUMN "REL_CD_sourceIds_LTESECTORCARRIER_USES_ANTENNACAPABILITY" SET DEFAULT '[]';
+ALTER TABLE ONLY ties_data."test-built-in-module_EntityTypeA" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
 
-ALTER TABLE ONLY ties_data."LTESectorCarrier" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
+ALTER TABLE ONLY ties_data."test-built-in-module_EntityTypeA" ALTER COLUMN "REL_CD_AB6BDADE3F6C750C9FDB6CAD6059C4CBCE67236C" SET DEFAULT '[]';
 
-ALTER TABLE ONLY ties_data."LTESectorCarrier" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
+ALTER TABLE ONLY ties_data."test-built-in-module_EntityTypeA" ALTER COLUMN "REL_CD_75B161E740A96ADBAE6F08D4F85684ECC29049B9" SET DEFAULT '[]';
 
-ALTER TABLE ONLY ties_data."LTESectorCarrier" ALTER COLUMN "REL_CD_classifiers_ENODEBFUNCTION_PROVIDES_LTESECTORCARRIER" SET DEFAULT '[]';
+ALTER TABLE ONLY ties_data."test-built-in-module_EntityTypeA" ALTER COLUMN "REL_CD_6F7211CAF505AECF9A565BC7A4AF56E7032CCC54" SET DEFAULT '{}';
 
-ALTER TABLE ONLY ties_data."LTESectorCarrier" ALTER COLUMN "REL_CD_classifiers_LTESECTORCARRIER_USES_ANTENNACAPABILITY" SET DEFAULT '[]';
+ALTER TABLE ONLY ties_data."test-built-in-module_EntityTypeA" ALTER COLUMN "REL_CD_3B43F80D423BF8F96A2906643B7B4712604FC28B" SET DEFAULT '[]';
 
-ALTER TABLE ONLY ties_data."LTESectorCarrier" ALTER COLUMN "REL_CD_decorators_ENODEBFUNCTION_PROVIDES_LTESECTORCARRIER" SET DEFAULT '{}';
+ALTER TABLE ONLY ties_data."test-built-in-module_EntityTypeA" ALTER COLUMN "REL_CD_74A44B167FDF37D6C8E79B5033FEF8BC384C881A" SET DEFAULT '[]';
 
-ALTER TABLE ONLY ties_data."LTESectorCarrier" ALTER COLUMN "REL_CD_decorators_LTESECTORCARRIER_USES_ANTENNACAPABILITY" SET DEFAULT '{}';
-
-CREATE TABLE IF NOT EXISTS ties_data."NRSectorCarrier" (
-	"id"			VARCHAR(511),
-	"frequencyDL"			BIGINT,
-	"arfcnDL"			BIGINT,
-	"arfcnUL"			BIGINT,
-	"bSChannelBwDL"			BIGINT,
-	"frequencyUL"			BIGINT,
-	"CD_sourceIds"			jsonb,
-	"REL_FK_used-antennaCapability"			VARCHAR(511),
-	"REL_ID_NRSECTORCARRIER_USES_ANTENNACAPABILITY"			VARCHAR(511),
-	"REL_CD_sourceIds_NRSECTORCARRIER_USES_ANTENNACAPABILITY"			jsonb,
-	"CD_classifiers"			jsonb,
-	"CD_decorators"			jsonb,
-	"REL_CD_classifiers_NRSECTORCARRIER_USES_ANTENNACAPABILITY" jsonb,
-    "REL_CD_decorators_NRSECTORCARRIER_USES_ANTENNACAPABILITY" jsonb
-);
-
-ALTER TABLE ONLY ties_data."NRSectorCarrier" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
-
-ALTER TABLE ONLY ties_data."NRSectorCarrier" ALTER COLUMN "REL_CD_sourceIds_NRSECTORCARRIER_USES_ANTENNACAPABILITY" SET DEFAULT '[]';
-
-ALTER TABLE ONLY ties_data."NRSectorCarrier" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
-
-ALTER TABLE ONLY ties_data."NRSectorCarrier" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
-
-ALTER TABLE ONLY ties_data."NRSectorCarrier" ALTER COLUMN "REL_CD_classifiers_NRSECTORCARRIER_USES_ANTENNACAPABILITY" SET DEFAULT '[]';
-
-ALTER TABLE ONLY ties_data."NRSectorCarrier" ALTER COLUMN "REL_CD_decorators_NRSECTORCARRIER_USES_ANTENNACAPABILITY" SET DEFAULT '{}';
-
-CREATE TABLE IF NOT EXISTS ties_data."ANTENNACAPABILITY_PROVIDES_ANTENNACAPABILITY" (
-	"id"			VARCHAR(511),
-	"aSide_AntennaCapability"			VARCHAR(511),
-	"bSide_AntennaCapability"			VARCHAR(511),
-	"CD_sourceIds"			jsonb,
-	"CD_classifiers"			jsonb,
-	"CD_decorators"			jsonb
-);
-
-ALTER TABLE ONLY ties_data."ANTENNACAPABILITY_PROVIDES_ANTENNACAPABILITY" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
-
-ALTER TABLE ONLY ties_data."ANTENNACAPABILITY_PROVIDES_ANTENNACAPABILITY" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
-
-ALTER TABLE ONLY ties_data."ANTENNACAPABILITY_PROVIDES_ANTENNACAPABILITY" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
-
-CREATE TABLE IF NOT EXISTS ties_data."ANTENNACAPABILITY_SERVES_ANTENNACAPABILITY" (
-	"id"			VARCHAR(511),
-	"aSide_AntennaCapability"			VARCHAR(511),
-	"bSide_AntennaCapability"			VARCHAR(511),
-	"CD_sourceIds"			jsonb,
-	"CD_classifiers"			jsonb,
-	"CD_decorators"			jsonb
-);
-
-ALTER TABLE ONLY ties_data."ANTENNACAPABILITY_SERVES_ANTENNACAPABILITY" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
-
-ALTER TABLE ONLY ties_data."ANTENNACAPABILITY_SERVES_ANTENNACAPABILITY" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
-
-ALTER TABLE ONLY ties_data."ANTENNACAPABILITY_SERVES_ANTENNACAPABILITY" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
-
-CREATE TABLE IF NOT EXISTS ties_data."ANTENNACAPABILITY_USES_ANTENNACAPABILITY" (
-	"id"			VARCHAR(511),
-	"aSide_AntennaCapability"			VARCHAR(511),
-	"bSide_AntennaCapability"			VARCHAR(511),
-	"CD_sourceIds"			jsonb,
-	"CD_classifiers"			jsonb,
-	"CD_decorators"			jsonb
-);
-
-ALTER TABLE ONLY ties_data."ANTENNACAPABILITY_USES_ANTENNACAPABILITY" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
-
-ALTER TABLE ONLY ties_data."ANTENNACAPABILITY_USES_ANTENNACAPABILITY" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
-
-ALTER TABLE ONLY ties_data."ANTENNACAPABILITY_USES_ANTENNACAPABILITY" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
+ALTER TABLE ONLY ties_data."test-built-in-module_EntityTypeA" ALTER COLUMN "REL_CD_F5B24D9A7273119D4D1519473D9EC88CB407E5CA" SET DEFAULT '{}';
 
 SELECT ties_data.create_constraint_if_not_exists(
-	'ANTENNACAPABILITY_REALISED_BY_ANTENNACAPABILITY',
- 'PK_ANTENNACAPABILITY_REALISED_BY_ANTENNACAPABILITY_id',
- 'ALTER TABLE ties_data."ANTENNACAPABILITY_REALISED_BY_ANTENNACAPABILITY" ADD CONSTRAINT "PK_ANTENNACAPABILITY_REALISED_BY_ANTENNACAPABILITY_id" PRIMARY KEY ("id");'
+	'10B9F515756871D3EF6558FAF1F112BAE207945D',
+ 'PK_7A421D526B36AA9EEF17964BC27011A12FF80DBB',
+ 'ALTER TABLE ties_data."10B9F515756871D3EF6558FAF1F112BAE207945D" ADD CONSTRAINT "PK_7A421D526B36AA9EEF17964BC27011A12FF80DBB" PRIMARY KEY ("id");'
 );
 
 SELECT ties_data.create_constraint_if_not_exists(
-	'ANTENNAMODULE_SERVES_ANTENNACAPABILITY',
- 'PK_ANTENNAMODULE_SERVES_ANTENNACAPABILITY_id',
- 'ALTER TABLE ties_data."ANTENNAMODULE_SERVES_ANTENNACAPABILITY" ADD CONSTRAINT "PK_ANTENNAMODULE_SERVES_ANTENNACAPABILITY_id" PRIMARY KEY ("id");'
+	'54110F8D085BBBA7BB6DE5CE71B511562090F7EE',
+ 'PK_4C48AAFA2160D74F9D13364AA2BE4FDB8A60689D',
+ 'ALTER TABLE ties_data."54110F8D085BBBA7BB6DE5CE71B511562090F7EE" ADD CONSTRAINT "PK_4C48AAFA2160D74F9D13364AA2BE4FDB8A60689D" PRIMARY KEY ("id");'
 );
 
 SELECT ties_data.create_constraint_if_not_exists(
-	'ANTENNAMODULE_USES_ANTENNAMODULE',
- 'PK_ANTENNAMODULE_USES_ANTENNAMODULE_id',
- 'ALTER TABLE ties_data."ANTENNAMODULE_USES_ANTENNAMODULE" ADD CONSTRAINT "PK_ANTENNAMODULE_USES_ANTENNAMODULE_id" PRIMARY KEY ("id");'
+	'CFC235E0404703D1E4454647DF8AAE2C193DB402',
+ 'PK_63E61CB6802F21FE7A04A80A095F6AF8ABF067CE',
+ 'ALTER TABLE ties_data."CFC235E0404703D1E4454647DF8AAE2C193DB402" ADD CONSTRAINT "PK_63E61CB6802F21FE7A04A80A095F6AF8ABF067CE" PRIMARY KEY ("id");'
 );
 
 SELECT ties_data.create_constraint_if_not_exists(
-	'AntennaCapability',
- 'PK_AntennaCapability_id',
- 'ALTER TABLE ties_data."AntennaCapability" ADD CONSTRAINT "PK_AntennaCapability_id" PRIMARY KEY ("id");'
+	'FB1E124031A12CD85D3335194B39B193723A0490',
+ 'PK_020B03AED5787D1B43ABBD9F2C26B494ADDBC7CD',
+ 'ALTER TABLE ties_data."FB1E124031A12CD85D3335194B39B193723A0490" ADD CONSTRAINT "PK_020B03AED5787D1B43ABBD9F2C26B494ADDBC7CD" PRIMARY KEY ("id");'
 );
 
 SELECT ties_data.create_constraint_if_not_exists(
-	'AntennaModule',
- 'PK_AntennaModule_id',
- 'ALTER TABLE ties_data."AntennaModule" ADD CONSTRAINT "PK_AntennaModule_id" PRIMARY KEY ("id");'
+	'o-ran-smo-teiv-equipment_AntennaModule',
+ 'PK_o-ran-smo-teiv-equipment_AntennaModule_id',
+ 'ALTER TABLE ties_data."o-ran-smo-teiv-equipment_AntennaModule" ADD CONSTRAINT "PK_o-ran-smo-teiv-equipment_AntennaModule_id" PRIMARY KEY ("id");'
 );
 
 SELECT ties_data.create_constraint_if_not_exists(
-	'ENodeBFunction',
- 'PK_ENodeBFunction_id',
- 'ALTER TABLE ties_data."ENodeBFunction" ADD CONSTRAINT "PK_ENodeBFunction_id" PRIMARY KEY ("id");'
+	'o-ran-smo-teiv-ran_AntennaCapability',
+ 'PK_o-ran-smo-teiv-ran_AntennaCapability_id',
+ 'ALTER TABLE ties_data."o-ran-smo-teiv-ran_AntennaCapability" ADD CONSTRAINT "PK_o-ran-smo-teiv-ran_AntennaCapability_id" PRIMARY KEY ("id");'
 );
 
 SELECT ties_data.create_constraint_if_not_exists(
-	'GNBDUFunction',
- 'PK_GNBDUFunction_id',
- 'ALTER TABLE ties_data."GNBDUFunction" ADD CONSTRAINT "PK_GNBDUFunction_id" PRIMARY KEY ("id");'
+	'o-ran-smo-teiv-ran_ENodeBFunction',
+ 'PK_o-ran-smo-teiv-ran_ENodeBFunction_id',
+ 'ALTER TABLE ties_data."o-ran-smo-teiv-ran_ENodeBFunction" ADD CONSTRAINT "PK_o-ran-smo-teiv-ran_ENodeBFunction_id" PRIMARY KEY ("id");'
 );
 
 SELECT ties_data.create_constraint_if_not_exists(
-	'LTESectorCarrier',
- 'PK_LTESectorCarrier_id',
- 'ALTER TABLE ties_data."LTESectorCarrier" ADD CONSTRAINT "PK_LTESectorCarrier_id" PRIMARY KEY ("id");'
+	'o-ran-smo-teiv-ran_GNBDUFunction',
+ 'PK_o-ran-smo-teiv-ran_GNBDUFunction_id',
+ 'ALTER TABLE ties_data."o-ran-smo-teiv-ran_GNBDUFunction" ADD CONSTRAINT "PK_o-ran-smo-teiv-ran_GNBDUFunction_id" PRIMARY KEY ("id");'
 );
 
 SELECT ties_data.create_constraint_if_not_exists(
-	'NRSectorCarrier',
- 'PK_NRSectorCarrier_id',
- 'ALTER TABLE ties_data."NRSectorCarrier" ADD CONSTRAINT "PK_NRSectorCarrier_id" PRIMARY KEY ("id");'
+	'o-ran-smo-teiv-ran_LTESectorCarrier',
+ 'PK_o-ran-smo-teiv-ran_LTESectorCarrier_id',
+ 'ALTER TABLE ties_data."o-ran-smo-teiv-ran_LTESectorCarrier" ADD CONSTRAINT "PK_o-ran-smo-teiv-ran_LTESectorCarrier_id" PRIMARY KEY ("id");'
 );
 
 SELECT ties_data.create_constraint_if_not_exists(
-	'ANTENNACAPABILITY_PROVIDES_ANTENNACAPABILITY',
- 'PK_ANTENNACAPABILITY_PROVIDES_ANTENNACAPABILITY_id',
- 'ALTER TABLE ties_data."ANTENNACAPABILITY_PROVIDES_ANTENNACAPABILITY" ADD CONSTRAINT "PK_ANTENNACAPABILITY_PROVIDES_ANTENNACAPABILITY_id" PRIMARY KEY ("id");'
+	'test-built-in-module_EntityTypeA',
+ 'PK_test-built-in-module_EntityTypeA_id',
+ 'ALTER TABLE ties_data."test-built-in-module_EntityTypeA" ADD CONSTRAINT "PK_test-built-in-module_EntityTypeA_id" PRIMARY KEY ("id");'
 );
 
 SELECT ties_data.create_constraint_if_not_exists(
-	'ANTENNACAPABILITY_SERVES_ANTENNACAPABILITY',
- 'PK_ANTENNACAPABILITY_SERVES_ANTENNACAPABILITY_id',
- 'ALTER TABLE ties_data."ANTENNACAPABILITY_SERVES_ANTENNACAPABILITY" ADD CONSTRAINT "PK_ANTENNACAPABILITY_SERVES_ANTENNACAPABILITY_id" PRIMARY KEY ("id");'
+	'10B9F515756871D3EF6558FAF1F112BAE207945D',
+ 'FK_B0923C0CCED6CF47CFF759FFE1B810D6CA10D228',
+ 'ALTER TABLE ties_data."10B9F515756871D3EF6558FAF1F112BAE207945D" ADD CONSTRAINT "FK_B0923C0CCED6CF47CFF759FFE1B810D6CA10D228" FOREIGN KEY ("REL_FK_provided-by-entityTypeA") REFERENCES ties_data."test-built-in-module_EntityTypeA" (id) ON DELETE CASCADE;'
 );
 
 SELECT ties_data.create_constraint_if_not_exists(
-	'ANTENNACAPABILITY_USES_ANTENNACAPABILITY',
- 'PK_ANTENNACAPABILITY_USES_ANTENNACAPABILITY_id',
- 'ALTER TABLE ties_data."ANTENNACAPABILITY_USES_ANTENNACAPABILITY" ADD CONSTRAINT "PK_ANTENNACAPABILITY_USES_ANTENNACAPABILITY_id" PRIMARY KEY ("id");'
+	'10B9F515756871D3EF6558FAF1F112BAE207945D',
+ 'UNIQUE_B1C2FC9A96300B2BE45785DE60E152D8E85FBE14',
+ 'ALTER TABLE ties_data."10B9F515756871D3EF6558FAF1F112BAE207945D" ADD CONSTRAINT "UNIQUE_B1C2FC9A96300B2BE45785DE60E152D8E85FBE14" UNIQUE ("REL_ID_F64052A4F8BB3CC533EC15BBFB5E224F600735B0");'
 );
 
 SELECT ties_data.create_constraint_if_not_exists(
-	'ANTENNACAPABILITY_REALISED_BY_ANTENNACAPABILITY',
- 'FK_59989F20BF725E08F0327C7C555B1CF7B4F8661C',
- 'ALTER TABLE ties_data."ANTENNACAPABILITY_REALISED_BY_ANTENNACAPABILITY" ADD CONSTRAINT "FK_59989F20BF725E08F0327C7C555B1CF7B4F8661C" FOREIGN KEY ("aSide_AntennaCapability") REFERENCES ties_data."AntennaCapability" (id) ON DELETE CASCADE;'
+	'54110F8D085BBBA7BB6DE5CE71B511562090F7EE',
+ 'FK_2839E6FFDF7F3DF2687DAC3E57082AD6B22E9B30',
+ 'ALTER TABLE ties_data."54110F8D085BBBA7BB6DE5CE71B511562090F7EE" ADD CONSTRAINT "FK_2839E6FFDF7F3DF2687DAC3E57082AD6B22E9B30" FOREIGN KEY ("aSide_EntityTypeA") REFERENCES ties_data."test-built-in-module_EntityTypeA" (id) ON DELETE CASCADE;'
 );
 
 SELECT ties_data.create_constraint_if_not_exists(
-	'ANTENNACAPABILITY_REALISED_BY_ANTENNACAPABILITY',
- 'FK_8B87C4FA55D9F0A4164C35942D91E2E4E0B6140D',
- 'ALTER TABLE ties_data."ANTENNACAPABILITY_REALISED_BY_ANTENNACAPABILITY" ADD CONSTRAINT "FK_8B87C4FA55D9F0A4164C35942D91E2E4E0B6140D" FOREIGN KEY ("bSide_AntennaCapability") REFERENCES ties_data."AntennaCapability" (id) ON DELETE CASCADE;'
+	'54110F8D085BBBA7BB6DE5CE71B511562090F7EE',
+ 'FK_33B5669A341584011D9A73FB491FF2242A158057',
+ 'ALTER TABLE ties_data."54110F8D085BBBA7BB6DE5CE71B511562090F7EE" ADD CONSTRAINT "FK_33B5669A341584011D9A73FB491FF2242A158057" FOREIGN KEY ("bSide_A85CE100A012A71EF2ABA306BABE484AC2AAE515") REFERENCES ties_data."10B9F515756871D3EF6558FAF1F112BAE207945D" (id) ON DELETE CASCADE;'
 );
 
 SELECT ties_data.create_constraint_if_not_exists(
-	'ANTENNACAPABILITY_PROVIDES_ANTENNACAPABILITY',
- 'FK_F407B43F3D94FFE0CBDF7E2BFAEAD9A4047DF252',
- 'ALTER TABLE ties_data."ANTENNACAPABILITY_PROVIDES_ANTENNACAPABILITY" ADD CONSTRAINT "FK_F407B43F3D94FFE0CBDF7E2BFAEAD9A4047DF252" FOREIGN KEY ("aSide_AntennaCapability") REFERENCES ties_data."AntennaCapability" (id) ON DELETE CASCADE;'
+	'CFC235E0404703D1E4454647DF8AAE2C193DB402',
+ 'FK_D80D1E6B26DF620B4DE659C600A3B7F709A41960',
+ 'ALTER TABLE ties_data."CFC235E0404703D1E4454647DF8AAE2C193DB402" ADD CONSTRAINT "FK_D80D1E6B26DF620B4DE659C600A3B7F709A41960" FOREIGN KEY ("aSide_AntennaModule") REFERENCES ties_data."o-ran-smo-teiv-equipment_AntennaModule" (id) ON DELETE CASCADE;'
 );
 
 SELECT ties_data.create_constraint_if_not_exists(
-	'ANTENNACAPABILITY_PROVIDES_ANTENNACAPABILITY',
- 'FK_73581B1E05EA3AC4C029F090C067BD88029F1195',
- 'ALTER TABLE ties_data."ANTENNACAPABILITY_PROVIDES_ANTENNACAPABILITY" ADD CONSTRAINT "FK_73581B1E05EA3AC4C029F090C067BD88029F1195" FOREIGN KEY ("bSide_AntennaCapability") REFERENCES ties_data."AntennaCapability" (id) ON DELETE CASCADE;'
+	'CFC235E0404703D1E4454647DF8AAE2C193DB402',
+ 'FK_7148BEED02C0617DE1DEEB6639F34A9FA9251B06',
+ 'ALTER TABLE ties_data."CFC235E0404703D1E4454647DF8AAE2C193DB402" ADD CONSTRAINT "FK_7148BEED02C0617DE1DEEB6639F34A9FA9251B06" FOREIGN KEY ("bSide_AntennaCapability") REFERENCES ties_data."o-ran-smo-teiv-ran_AntennaCapability" (id) ON DELETE CASCADE;'
 );
 
 SELECT ties_data.create_constraint_if_not_exists(
-	'ANTENNACAPABILITY_SERVES_ANTENNACAPABILITY',
- 'FK_3613A8C84275763DE5294B04DB6E6BF74E9412F4',
- 'ALTER TABLE ties_data."ANTENNACAPABILITY_SERVES_ANTENNACAPABILITY" ADD CONSTRAINT "FK_3613A8C84275763DE5294B04DB6E6BF74E9412F4" FOREIGN KEY ("aSide_AntennaCapability") REFERENCES ties_data."AntennaCapability" (id) ON DELETE CASCADE;'
+	'FB1E124031A12CD85D3335194B39B193723A0490',
+ 'FK_2A5C84A2226EE0FCAAA513CC5AF4CD78DDDAF49F',
+ 'ALTER TABLE ties_data."FB1E124031A12CD85D3335194B39B193723A0490" ADD CONSTRAINT "FK_2A5C84A2226EE0FCAAA513CC5AF4CD78DDDAF49F" FOREIGN KEY ("aSide_C812C285BEFA4EC42026AB075D9C65200A00F815") REFERENCES ties_data."10B9F515756871D3EF6558FAF1F112BAE207945D" (id) ON DELETE CASCADE;'
 );
 
 SELECT ties_data.create_constraint_if_not_exists(
-	'ANTENNACAPABILITY_SERVES_ANTENNACAPABILITY',
- 'FK_C21710428B73A144CC8DE4063CB24D4852D2EFE1',
- 'ALTER TABLE ties_data."ANTENNACAPABILITY_SERVES_ANTENNACAPABILITY" ADD CONSTRAINT "FK_C21710428B73A144CC8DE4063CB24D4852D2EFE1" FOREIGN KEY ("bSide_AntennaCapability") REFERENCES ties_data."AntennaCapability" (id) ON DELETE CASCADE;'
+	'FB1E124031A12CD85D3335194B39B193723A0490',
+ 'FK_FBFE10B6F165A8EC2086B8DEAFA238E0DD6643F5',
+ 'ALTER TABLE ties_data."FB1E124031A12CD85D3335194B39B193723A0490" ADD CONSTRAINT "FK_FBFE10B6F165A8EC2086B8DEAFA238E0DD6643F5" FOREIGN KEY ("bSide_A85CE100A012A71EF2ABA306BABE484AC2AAE515") REFERENCES ties_data."10B9F515756871D3EF6558FAF1F112BAE207945D" (id) ON DELETE CASCADE;'
 );
 
 SELECT ties_data.create_constraint_if_not_exists(
-	'ANTENNACAPABILITY_USES_ANTENNACAPABILITY',
- 'FK_0F27D391D210980029D4A879344BFC1DF7E56047',
- 'ALTER TABLE ties_data."ANTENNACAPABILITY_USES_ANTENNACAPABILITY" ADD CONSTRAINT "FK_0F27D391D210980029D4A879344BFC1DF7E56047" FOREIGN KEY ("aSide_AntennaCapability") REFERENCES ties_data."AntennaCapability" (id) ON DELETE CASCADE;'
+	'o-ran-smo-teiv-ran_LTESectorCarrier',
+ 'FK_D0868FBC0BBE2754F4B765C4898C1A1700E2BEFD',
+ 'ALTER TABLE ties_data."o-ran-smo-teiv-ran_LTESectorCarrier" ADD CONSTRAINT "FK_D0868FBC0BBE2754F4B765C4898C1A1700E2BEFD" FOREIGN KEY ("REL_FK_provided-by-enodebFunction") REFERENCES ties_data."o-ran-smo-teiv-ran_ENodeBFunction" (id) ON DELETE CASCADE;'
 );
 
 SELECT ties_data.create_constraint_if_not_exists(
-	'ANTENNACAPABILITY_USES_ANTENNACAPABILITY',
- 'FK_C66086ACCFA9455ED438AE9381A7E4B0668EA027',
- 'ALTER TABLE ties_data."ANTENNACAPABILITY_USES_ANTENNACAPABILITY" ADD CONSTRAINT "FK_C66086ACCFA9455ED438AE9381A7E4B0668EA027" FOREIGN KEY ("bSide_AntennaCapability") REFERENCES ties_data."AntennaCapability" (id) ON DELETE CASCADE;'
+	'o-ran-smo-teiv-ran_LTESectorCarrier',
+ 'UNIQUE_FD943EE596337B11E0C640E1176CADF9CD69E19A',
+ 'ALTER TABLE ties_data."o-ran-smo-teiv-ran_LTESectorCarrier" ADD CONSTRAINT "UNIQUE_FD943EE596337B11E0C640E1176CADF9CD69E19A" UNIQUE ("REL_ID_ENODEBFUNCTION_PROVIDES_LTESECTORCARRIER");'
 );
 
 SELECT ties_data.create_constraint_if_not_exists(
-	'ANTENNAMODULE_SERVES_ANTENNACAPABILITY',
- 'FK_ANTENNAMODULE_SERVES_ANTENNACAPABILITY_aSide_AntennaModule',
- 'ALTER TABLE ties_data."ANTENNAMODULE_SERVES_ANTENNACAPABILITY" ADD CONSTRAINT "FK_ANTENNAMODULE_SERVES_ANTENNACAPABILITY_aSide_AntennaModule" FOREIGN KEY ("aSide_AntennaModule") REFERENCES ties_data."AntennaModule" (id) ON DELETE CASCADE;'
+	'o-ran-smo-teiv-ran_LTESectorCarrier',
+ 'FK_3D8DF3FBD9C042A888CEB382688C1E8F39D85AFE',
+ 'ALTER TABLE ties_data."o-ran-smo-teiv-ran_LTESectorCarrier" ADD CONSTRAINT "FK_3D8DF3FBD9C042A888CEB382688C1E8F39D85AFE" FOREIGN KEY ("REL_FK_used-antennaCapability") REFERENCES ties_data."o-ran-smo-teiv-ran_AntennaCapability" (id) ON DELETE CASCADE;'
 );
 
 SELECT ties_data.create_constraint_if_not_exists(
-	'ANTENNAMODULE_SERVES_ANTENNACAPABILITY',
- 'FK_AB3CEA707D389B107F1D10BC724542418E02ABEC',
- 'ALTER TABLE ties_data."ANTENNAMODULE_SERVES_ANTENNACAPABILITY" ADD CONSTRAINT "FK_AB3CEA707D389B107F1D10BC724542418E02ABEC" FOREIGN KEY ("bSide_AntennaCapability") REFERENCES ties_data."AntennaCapability" (id) ON DELETE CASCADE;'
+	'o-ran-smo-teiv-ran_LTESectorCarrier',
+ 'UNIQUE_EA18F1D278EAFE834B8A80BCF8A7D8355CD013DF',
+ 'ALTER TABLE ties_data."o-ran-smo-teiv-ran_LTESectorCarrier" ADD CONSTRAINT "UNIQUE_EA18F1D278EAFE834B8A80BCF8A7D8355CD013DF" UNIQUE ("REL_ID_LTESECTORCARRIER_USES_ANTENNACAPABILITY");'
 );
 
 SELECT ties_data.create_constraint_if_not_exists(
-	'ANTENNAMODULE_USES_ANTENNAMODULE',
- 'FK_ANTENNAMODULE_USES_ANTENNAMODULE_aSide_AntennaModule',
- 'ALTER TABLE ties_data."ANTENNAMODULE_USES_ANTENNAMODULE" ADD CONSTRAINT "FK_ANTENNAMODULE_USES_ANTENNAMODULE_aSide_AntennaModule" FOREIGN KEY ("aSide_AntennaModule") REFERENCES ties_data."AntennaModule" (id) ON DELETE CASCADE;'
+	'test-built-in-module_EntityTypeA',
+ 'FK_02592FFA6AFD7EAC7AFAD936E3CD50708E4533E0',
+ 'ALTER TABLE ties_data."test-built-in-module_EntityTypeA" ADD CONSTRAINT "FK_02592FFA6AFD7EAC7AFAD936E3CD50708E4533E0" FOREIGN KEY ("REL_FK_B7E43411C5C5079D49856E74A9FA63BD20C522C5") REFERENCES ties_data."10B9F515756871D3EF6558FAF1F112BAE207945D" (id) ON DELETE CASCADE;'
 );
 
 SELECT ties_data.create_constraint_if_not_exists(
-	'ANTENNAMODULE_USES_ANTENNAMODULE',
- 'FK_ANTENNAMODULE_USES_ANTENNAMODULE_bSide_AntennaModule',
- 'ALTER TABLE ties_data."ANTENNAMODULE_USES_ANTENNAMODULE" ADD CONSTRAINT "FK_ANTENNAMODULE_USES_ANTENNAMODULE_bSide_AntennaModule" FOREIGN KEY ("bSide_AntennaModule") REFERENCES ties_data."AntennaModule" (id) ON DELETE CASCADE;'
+	'test-built-in-module_EntityTypeA',
+ 'UNIQUE_7715FF94E14F99CE4994ABBD8C2583CBA9EAE5BD',
+ 'ALTER TABLE ties_data."test-built-in-module_EntityTypeA" ADD CONSTRAINT "UNIQUE_7715FF94E14F99CE4994ABBD8C2583CBA9EAE5BD" UNIQUE ("REL_ID_31A5B55158140557F09AE15589A8B8038416689B");'
 );
 
 SELECT ties_data.create_constraint_if_not_exists(
-	'LTESectorCarrier',
- 'FK_LTESectorCarrier_REL_FK_provided-by-enodebFunction',
- 'ALTER TABLE ties_data."LTESectorCarrier" ADD CONSTRAINT "FK_LTESectorCarrier_REL_FK_provided-by-enodebFunction" FOREIGN KEY ("REL_FK_provided-by-enodebFunction") REFERENCES ties_data."ENodeBFunction" (id) ON DELETE CASCADE;'
+	'test-built-in-module_EntityTypeA',
+ 'FK_5CD9BCFA08278DA0BF902BAFBCFCDFCE4FF25FEF',
+ 'ALTER TABLE ties_data."test-built-in-module_EntityTypeA" ADD CONSTRAINT "FK_5CD9BCFA08278DA0BF902BAFBCFCDFCE4FF25FEF" FOREIGN KEY ("REL_FK_A86937FEBD025CFDF6EE5BC386B4C569EB2652DA") REFERENCES ties_data."10B9F515756871D3EF6558FAF1F112BAE207945D" (id) ON DELETE CASCADE;'
 );
 
 SELECT ties_data.create_constraint_if_not_exists(
-	'LTESectorCarrier',
- 'UNIQUE_B9770D6C26DDA0173DB9690F6E3B42C111AF26E9',
- 'ALTER TABLE ties_data."LTESectorCarrier" ADD CONSTRAINT "UNIQUE_B9770D6C26DDA0173DB9690F6E3B42C111AF26E9" UNIQUE ("REL_ID_ENODEBFUNCTION_PROVIDES_LTESECTORCARRIER");'
+	'test-built-in-module_EntityTypeA',
+ 'UNIQUE_67DB5E4BC34AB83BDC069A5CAF73B57967D5C2D9',
+ 'ALTER TABLE ties_data."test-built-in-module_EntityTypeA" ADD CONSTRAINT "UNIQUE_67DB5E4BC34AB83BDC069A5CAF73B57967D5C2D9" UNIQUE ("REL_ID_A974AD6DD8C4CA281D45693D3A61AE98FEE82845");'
 );
 
-SELECT ties_data.create_constraint_if_not_exists(
-	'LTESectorCarrier',
- 'FK_LTESectorCarrier_REL_FK_used-antennaCapability',
- 'ALTER TABLE ties_data."LTESectorCarrier" ADD CONSTRAINT "FK_LTESectorCarrier_REL_FK_used-antennaCapability" FOREIGN KEY ("REL_FK_used-antennaCapability") REFERENCES ties_data."AntennaCapability" (id) ON DELETE CASCADE;'
-);
+CREATE INDEX IF NOT EXISTS "IDX_1B734406AE75EF103D3E0913637A741DB602A6E9" ON ties_data."10B9F515756871D3EF6558FAF1F112BAE207945D" USING GIN (("8252D18D44F633831557076D827993C45278024D"::TEXT) gin_trgm_ops);
 
-SELECT ties_data.create_constraint_if_not_exists(
-	'LTESectorCarrier',
- 'UNIQUE_5D5FEB6B4B09D5D42A589753C684994CD0B96E88',
- 'ALTER TABLE ties_data."LTESectorCarrier" ADD CONSTRAINT "UNIQUE_5D5FEB6B4B09D5D42A589753C684994CD0B96E88" UNIQUE ("REL_ID_LTESECTORCARRIER_USES_ANTENNACAPABILITY");'
-);
+CREATE INDEX IF NOT EXISTS "IDX_93D8689B66D668B64409D69EB1AD4670419BE4F0" ON ties_data."10B9F515756871D3EF6558FAF1F112BAE207945D" USING GIN ("68C48305AB6C3A30DD927F5D38562379374A4B31");
 
-SELECT ties_data.create_constraint_if_not_exists(
-	'NRSectorCarrier',
- 'FK_NRSectorCarrier_REL_FK_used-antennaCapability',
- 'ALTER TABLE ties_data."NRSectorCarrier" ADD CONSTRAINT "FK_NRSectorCarrier_REL_FK_used-antennaCapability" FOREIGN KEY ("REL_FK_used-antennaCapability") REFERENCES ties_data."AntennaCapability" (id) ON DELETE CASCADE;'
-);
+CREATE INDEX IF NOT EXISTS "IDX_EDE92A1D90AEC06F2C60361D36437D1A20691FDC" ON ties_data."10B9F515756871D3EF6558FAF1F112BAE207945D" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
 
-SELECT ties_data.create_constraint_if_not_exists(
-	'NRSectorCarrier',
- 'UNIQUE_EDF7D5C78EF6505848B1679B714D7831F5863991',
- 'ALTER TABLE ties_data."NRSectorCarrier" ADD CONSTRAINT "UNIQUE_EDF7D5C78EF6505848B1679B714D7831F5863991" UNIQUE ("REL_ID_NRSECTORCARRIER_USES_ANTENNACAPABILITY");'
-);
+CREATE INDEX IF NOT EXISTS "IDX_371097F35C137586E6DD7526076CA322C72FAF79" ON ties_data."10B9F515756871D3EF6558FAF1F112BAE207945D" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
 
-COMMIT;
\ No newline at end of file
+CREATE INDEX IF NOT EXISTS "IDX_06503CC4580E197BA869DF60207E5CC1778223F0" ON ties_data."10B9F515756871D3EF6558FAF1F112BAE207945D" USING GIN ("CD_decorators");
+
+CREATE INDEX IF NOT EXISTS "IDX_2B6D6CECE23DAE6820ECA50ECC172FE6FCE673DF" ON ties_data."10B9F515756871D3EF6558FAF1F112BAE207945D" USING GIN (("REL_CD_F26C39EC1F710F3096BE0588F6783A03A378516A"::TEXT) gin_trgm_ops);
+
+CREATE INDEX IF NOT EXISTS "IDX_F613D04BF286E43A7BBBE6C306F015D0A40BC451" ON ties_data."10B9F515756871D3EF6558FAF1F112BAE207945D" USING GIN (("REL_CD_E2C3D598A06EA38133E23C1756ED58A66FE21386"::TEXT) gin_trgm_ops);
+
+CREATE INDEX IF NOT EXISTS "IDX_15F7CCF328E4FA23EE20BE521E07C475825B38C6" ON ties_data."10B9F515756871D3EF6558FAF1F112BAE207945D" USING GIN ("REL_CD_92559ED73C761B860682582A040E745ECEC194D5");
+
+CREATE INDEX IF NOT EXISTS "IDX_D16FC793292C549EEB2EDCA074EC9726CD0986B1" ON ties_data."54110F8D085BBBA7BB6DE5CE71B511562090F7EE" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
+
+CREATE INDEX IF NOT EXISTS "IDX_73D270B07D89D7F4D54B82DB95E6168F6ED54AF1" ON ties_data."54110F8D085BBBA7BB6DE5CE71B511562090F7EE" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
+
+CREATE INDEX IF NOT EXISTS "IDX_786DFF3328DE8D28C54F9ACA126AF6ADB1D21645" ON ties_data."54110F8D085BBBA7BB6DE5CE71B511562090F7EE" USING GIN ("CD_decorators");
+
+CREATE INDEX IF NOT EXISTS "IDX_E896A9EB22A3F9F96CE75A271475316A98B629C8" ON ties_data."CFC235E0404703D1E4454647DF8AAE2C193DB402" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
+
+CREATE INDEX IF NOT EXISTS "IDX_DD0D676834B12CA2F7E8219310998376A08D7F5F" ON ties_data."CFC235E0404703D1E4454647DF8AAE2C193DB402" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
+
+CREATE INDEX IF NOT EXISTS "IDX_7BF09D0227840279556AD27ACECB068705893D28" ON ties_data."CFC235E0404703D1E4454647DF8AAE2C193DB402" USING GIN ("CD_decorators");
+
+CREATE INDEX IF NOT EXISTS "IDX_DCA3B27EBD61104A41BE23B1C864D67CBF3AA45E" ON ties_data."FB1E124031A12CD85D3335194B39B193723A0490" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
+
+CREATE INDEX IF NOT EXISTS "IDX_26EE0E66CE3AF1DE2E107F6A99712F2BEC1F47E3" ON ties_data."FB1E124031A12CD85D3335194B39B193723A0490" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
+
+CREATE INDEX IF NOT EXISTS "IDX_C212962DB49654BB1526341141D01AF2A3699B5D" ON ties_data."FB1E124031A12CD85D3335194B39B193723A0490" USING GIN ("CD_decorators");
+
+CREATE INDEX IF NOT EXISTS "IDX_21B0F1FE632B6CB185C49BA6F00224068F443215" ON ties_data."o-ran-smo-teiv-equipment_AntennaModule" USING GIN (("antennaBeamWidth"::TEXT) gin_trgm_ops);
+
+CREATE INDEX IF NOT EXISTS "IDX_905011128A2C218B5352C19ED1FE9851F43EB911" ON ties_data."o-ran-smo-teiv-equipment_AntennaModule" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
+
+CREATE INDEX IF NOT EXISTS "IDX_1C0CAFD80FDD6444044E3F76C7C0A7BDC35F9BC8" ON ties_data."o-ran-smo-teiv-equipment_AntennaModule" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
+
+CREATE INDEX IF NOT EXISTS "IDX_GIN_o-ran-smo-teiv-equipment_AntennaModule_CD_decorators" ON ties_data."o-ran-smo-teiv-equipment_AntennaModule" USING GIN ("CD_decorators");
+
+CREATE INDEX IF NOT EXISTS "IDX_5FB80647AE3E5C0443A792618D65B9090EE2A3FC" ON ties_data."o-ran-smo-teiv-ran_AntennaCapability" USING GIN (("eUtranFqBands"::TEXT) gin_trgm_ops);
+
+CREATE INDEX IF NOT EXISTS "IDX_A94722FF7B95D8974B494793908B57B4E1A9743B" ON ties_data."o-ran-smo-teiv-ran_AntennaCapability" USING GIN (("geranFqBands"::TEXT) gin_trgm_ops);
+
+CREATE INDEX IF NOT EXISTS "IDX_441B5C05448D63552C6414BD59C13641D8A4408D" ON ties_data."o-ran-smo-teiv-ran_AntennaCapability" USING GIN (("nRFqBands"::TEXT) gin_trgm_ops);
+
+CREATE INDEX IF NOT EXISTS "IDX_CC3E208A4EE51D3B505416A599F36F3C99F466C8" ON ties_data."o-ran-smo-teiv-ran_AntennaCapability" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
+
+CREATE INDEX IF NOT EXISTS "IDX_E7FFE8F4A166AA9A382A0659762FFEC313A9EB5C" ON ties_data."o-ran-smo-teiv-ran_AntennaCapability" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
+
+CREATE INDEX IF NOT EXISTS "IDX_GIN_o-ran-smo-teiv-ran_AntennaCapability_CD_decorators" ON ties_data."o-ran-smo-teiv-ran_AntennaCapability" USING GIN ("CD_decorators");
+
+CREATE INDEX IF NOT EXISTS "IDX_GIN_o-ran-smo-teiv-ran_ENodeBFunction_eNodeBPlmnId" ON ties_data."o-ran-smo-teiv-ran_ENodeBFunction" USING GIN ("eNodeBPlmnId");
+
+CREATE INDEX IF NOT EXISTS "IDX_3F7D14B4CF2CA74F28BA1600606E82C6E8C447C0" ON ties_data."o-ran-smo-teiv-ran_ENodeBFunction" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
+
+CREATE INDEX IF NOT EXISTS "IDX_B598B74193845587BA03553CEDBA058D33956847" ON ties_data."o-ran-smo-teiv-ran_ENodeBFunction" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
+
+CREATE INDEX IF NOT EXISTS "IDX_GIN_o-ran-smo-teiv-ran_ENodeBFunction_CD_decorators" ON ties_data."o-ran-smo-teiv-ran_ENodeBFunction" USING GIN ("CD_decorators");
+
+CREATE INDEX IF NOT EXISTS "IDX_GIN_o-ran-smo-teiv-ran_GNBDUFunction_dUpLMNId" ON ties_data."o-ran-smo-teiv-ran_GNBDUFunction" USING GIN ("dUpLMNId");
+
+CREATE INDEX IF NOT EXISTS "IDX_2BEF269CED354C2454AC2B2EABB134AC267A0C62" ON ties_data."o-ran-smo-teiv-ran_GNBDUFunction" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
+
+CREATE INDEX IF NOT EXISTS "IDX_601A4514FFACA8985471531013AFC8F760361F09" ON ties_data."o-ran-smo-teiv-ran_GNBDUFunction" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
+
+CREATE INDEX IF NOT EXISTS "IDX_GIN_o-ran-smo-teiv-ran_GNBDUFunction_CD_decorators" ON ties_data."o-ran-smo-teiv-ran_GNBDUFunction" USING GIN ("CD_decorators");
+
+CREATE INDEX IF NOT EXISTS "IDX_6EC539C61EA7078DBA264C9877B87FC263605D42" ON ties_data."o-ran-smo-teiv-ran_LTESectorCarrier" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
+
+CREATE INDEX IF NOT EXISTS "IDX_E754EB8AD825DB3111B07B9E5DA3B30C38DB406B" ON ties_data."o-ran-smo-teiv-ran_LTESectorCarrier" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
+
+CREATE INDEX IF NOT EXISTS "IDX_GIN_o-ran-smo-teiv-ran_LTESectorCarrier_CD_decorators" ON ties_data."o-ran-smo-teiv-ran_LTESectorCarrier" USING GIN ("CD_decorators");
+
+CREATE INDEX IF NOT EXISTS "IDX_1EBC7271CEA658156DE25286404CBC4593340F8E" ON ties_data."o-ran-smo-teiv-ran_LTESectorCarrier" USING GIN (("REL_CD_sourceIds_ENODEBFUNCTION_PROVIDES_LTESECTORCARRIER"::TEXT) gin_trgm_ops);
+
+CREATE INDEX IF NOT EXISTS "IDX_846B7740E8AA756B8C1409CD909D2DF73A47ED4C" ON ties_data."o-ran-smo-teiv-ran_LTESectorCarrier" USING GIN (("REL_CD_classifiers_ENODEBFUNCTION_PROVIDES_LTESECTORCARRIER"::TEXT) gin_trgm_ops);
+
+CREATE INDEX IF NOT EXISTS "IDX_44075E1D464599B61924196C20F2B88332520CD8" ON ties_data."o-ran-smo-teiv-ran_LTESectorCarrier" USING GIN ("REL_CD_decorators_ENODEBFUNCTION_PROVIDES_LTESECTORCARRIER");
+
+CREATE INDEX IF NOT EXISTS "IDX_7D01A5D21C990ACCBE65035C062C7D881A05F1EE" ON ties_data."o-ran-smo-teiv-ran_LTESectorCarrier" USING GIN (("REL_CD_sourceIds_LTESECTORCARRIER_USES_ANTENNACAPABILITY"::TEXT) gin_trgm_ops);
+
+CREATE INDEX IF NOT EXISTS "IDX_3D3EFECFB917DAC074F56334224B19F8FD6BF8A5" ON ties_data."o-ran-smo-teiv-ran_LTESectorCarrier" USING GIN (("REL_CD_classifiers_LTESECTORCARRIER_USES_ANTENNACAPABILITY"::TEXT) gin_trgm_ops);
+
+CREATE INDEX IF NOT EXISTS "IDX_4EE2AA643311DFCC13B6ED832EBE2FAB4CFDF494" ON ties_data."o-ran-smo-teiv-ran_LTESectorCarrier" USING GIN ("REL_CD_decorators_LTESECTORCARRIER_USES_ANTENNACAPABILITY");
+
+CREATE INDEX IF NOT EXISTS "IDX_497353902DBA614467FFC457A40F39BF04CADC33" ON ties_data."test-built-in-module_EntityTypeA" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
+
+CREATE INDEX IF NOT EXISTS "IDX_C4788824417A9F41E8CB948DAC0C2D1C0580FFD4" ON ties_data."test-built-in-module_EntityTypeA" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
+
+CREATE INDEX IF NOT EXISTS "IDX_GIN_test-built-in-module_EntityTypeA_CD_decorators" ON ties_data."test-built-in-module_EntityTypeA" USING GIN ("CD_decorators");
+
+CREATE INDEX IF NOT EXISTS "IDX_86B531D9388F1780960FB5C3BA9D3EDEF14CCB48" ON ties_data."test-built-in-module_EntityTypeA" USING GIN (("REL_CD_AB6BDADE3F6C750C9FDB6CAD6059C4CBCE67236C"::TEXT) gin_trgm_ops);
+
+CREATE INDEX IF NOT EXISTS "IDX_E050A7DD176C8D18F3307D3851586C8124CA8268" ON ties_data."test-built-in-module_EntityTypeA" USING GIN (("REL_CD_75B161E740A96ADBAE6F08D4F85684ECC29049B9"::TEXT) gin_trgm_ops);
+
+CREATE INDEX IF NOT EXISTS "IDX_CCBCF9A86E2AA678D2589DEB3A895076012F941D" ON ties_data."test-built-in-module_EntityTypeA" USING GIN ("REL_CD_6F7211CAF505AECF9A565BC7A4AF56E7032CCC54");
+
+CREATE INDEX IF NOT EXISTS "IDX_41BEE4E46184F6F17D338D2F8691EF31D188C76D" ON ties_data."test-built-in-module_EntityTypeA" USING GIN (("REL_CD_3B43F80D423BF8F96A2906643B7B4712604FC28B"::TEXT) gin_trgm_ops);
+
+CREATE INDEX IF NOT EXISTS "IDX_5345DBA457356CB29D1905DA4785B7FB2B27D224" ON ties_data."test-built-in-module_EntityTypeA" USING GIN (("REL_CD_74A44B167FDF37D6C8E79B5033FEF8BC384C881A"::TEXT) gin_trgm_ops);
+
+CREATE INDEX IF NOT EXISTS "IDX_14EDC4DAF64B9A97E4788CFEA16A7F9AED195589" ON ties_data."test-built-in-module_EntityTypeA" USING GIN ("REL_CD_F5B24D9A7273119D4D1519473D9EC88CB407E5CA");
+
+ANALYZE ties_data."o-ran-smo-teiv-ran_GNBDUFunction";
+
+ANALYZE ties_data."FB1E124031A12CD85D3335194B39B193723A0490";
+
+ANALYZE ties_data."10B9F515756871D3EF6558FAF1F112BAE207945D";
+
+ANALYZE ties_data."o-ran-smo-teiv-ran_LTESectorCarrier";
+
+ANALYZE ties_data."test-built-in-module_EntityTypeA";
+
+ANALYZE ties_data."CFC235E0404703D1E4454647DF8AAE2C193DB402";
+
+ANALYZE ties_data."o-ran-smo-teiv-ran_AntennaCapability";
+
+ANALYZE ties_data."o-ran-smo-teiv-equipment_AntennaModule";
+
+ANALYZE ties_data."o-ran-smo-teiv-ran_ENodeBFunction";
+
+ANALYZE ties_data."54110F8D085BBBA7BB6DE5CE71B511562090F7EE";
+
+COMMIT;
diff --git a/pgsql-schema-generator/src/test/resources/expected-db-schema/result_01_init-oran-smo-teiv-model.sql b/pgsql-schema-generator/src/test/resources/expected-db-schema/result_01_init-oran-smo-teiv-model.sql
index bd3b338..2967b77 100644
--- a/pgsql-schema-generator/src/test/resources/expected-db-schema/result_01_init-oran-smo-teiv-model.sql
+++ b/pgsql-schema-generator/src/test/resources/expected-db-schema/result_01_init-oran-smo-teiv-model.sql
@@ -46,44 +46,34 @@
     "domain"          VARCHAR(511),
     "includedModules" jsonb DEFAULT '[]'::jsonb,
     "revision"        VARCHAR(511) NOT NULL,
-    "content"         TEXT NOT NULL,
-    "ownerAppId"      VARCHAR(511) NOT NULL,
-    "status"          VARCHAR(127) NOT NULL
+    "content"         TEXT NOT NULL
 );
 
 CREATE TABLE IF NOT EXISTS ties_model.entity_info (
-    "name"                VARCHAR(511) PRIMARY KEY,
+    "storedAt"            VARCHAR(511) PRIMARY KEY,
+    "name"                VARCHAR(511) NOT NULL,
     "moduleReferenceName" VARCHAR(511) NOT NULL,
     FOREIGN KEY ("moduleReferenceName") REFERENCES ties_model.module_reference ("name") ON DELETE CASCADE
 );
 
 CREATE TABLE IF NOT EXISTS ties_model.relationship_info (
-    "name"                     VARCHAR(511) PRIMARY KEY,
+    "name"                     VARCHAR(511) NOT NULL,
     "aSideAssociationName"     TEXT NOT NULL,
     "aSideMOType"              TEXT NOT NULL,
+    "aSideModule"              TEXT NOT NULL,
     "aSideMinCardinality"      BIGINT NOT NULL,
     "aSideMaxCardinality"      BIGINT NOT NULL,
     "bSideAssociationName"     TEXT NOT NULL,
     "bSideMOType"              TEXT NOT NULL,
+    "bSideModule"              TEXT NOT NULL,
     "bSideMinCardinality"      BIGINT NOT NULL,
     "bSideMaxCardinality"      BIGINT NOT NULL,
     "associationKind"          TEXT NOT NULL,
     "relationshipDataLocation" TEXT NOT NULL,
     "connectSameEntity"        BOOLEAN NOT NULL,
+    "storedAt"                 VARCHAR(511) NOT NULL,
     "moduleReferenceName"      TEXT NOT NULL,
-    FOREIGN KEY ("moduleReferenceName") REFERENCES ties_model.module_reference ("name") ON DELETE CASCADE
-);
-
-CREATE TABLE IF NOT EXISTS ties_model.decorators (
-    "name"                VARCHAR(511) PRIMARY KEY,
-    "dataType"            VARCHAR(511) NOT NULL,
-    "moduleReferenceName" VARCHAR(511) NOT NULL,
-    FOREIGN KEY ("moduleReferenceName") REFERENCES ties_model.module_reference ("name") ON DELETE CASCADE
-);
-
-CREATE TABLE IF NOT EXISTS ties_model.classifiers (
-    "name"                VARCHAR(511) PRIMARY KEY,
-    "moduleReferenceName" VARCHAR(511) NOT NULL,
+    PRIMARY KEY ("name", "moduleReferenceName"),
     FOREIGN KEY ("moduleReferenceName") REFERENCES ties_model.module_reference ("name") ON DELETE CASCADE
 );
 
@@ -91,122 +81,186 @@
 INSERT INTO ties_model.execution_status("schema", "status") VALUES ('ties_model', 'success');
 
 COPY ties_model.hash_info("name", "hashedValue", "type") FROM stdin;
-eNodeBPlmnId	eNodeBPlmnId	COLUMN
-PK_NRSectorCarrier_id	PK_NRSectorCarrier_id	CONSTRAINT
-UNIQUE_LTESectorCarrier_REL_ID_ENODEBFUNCTION_PROVIDES_LTESECTORCARRIER	UNIQUE_B9770D6C26DDA0173DB9690F6E3B42C111AF26E9	CONSTRAINT
-PK_ENodeBFunction_id	PK_ENodeBFunction_id	CONSTRAINT
 CD_classifiers	CD_classifiers	COLUMN
-mechanicalAntennaBearing	mechanicalAntennaBearing	COLUMN
-frequencyDL	frequencyDL	COLUMN
-AntennaModule	AntennaModule	TABLE
-ENodeBFunction	ENodeBFunction	TABLE
-LTESectorCarrier	LTESectorCarrier	TABLE
-antennaModelNumber	antennaModelNumber	COLUMN
-NRSectorCarrier	NRSectorCarrier	TABLE
-REL_FK_used-antennaCapability	REL_FK_used-antennaCapability	COLUMN
-FK_LTESectorCarrier_REL_FK_used-antennaCapability	FK_LTESectorCarrier_REL_FK_used-antennaCapability	CONSTRAINT
-aSide_AntennaModule	aSide_AntennaModule	COLUMN
-REL_CD_classifiers_LTESECTORCARRIER_USES_ANTENNACAPABILITY	REL_CD_classifiers_LTESECTORCARRIER_USES_ANTENNACAPABILITY	COLUMN
-dUpLMNId	dUpLMNId	COLUMN
-frequencyUL	frequencyUL	COLUMN
-bSChannelBwDL	bSChannelBwDL	COLUMN
-CD_sourceIds	CD_sourceIds	COLUMN
-REL_CD_sourceIds_NRSECTORCARRIER_USES_ANTENNACAPABILITY	REL_CD_sourceIds_NRSECTORCARRIER_USES_ANTENNACAPABILITY	COLUMN
-geranFqBands	geranFqBands	COLUMN
-PK_ANTENNACAPABILITY_PROVIDES_ANTENNACAPABILITY_id	PK_ANTENNACAPABILITY_PROVIDES_ANTENNACAPABILITY_id	CONSTRAINT
-arfcnUL	arfcnUL	COLUMN
-PK_LTESectorCarrier_id	PK_LTESectorCarrier_id	CONSTRAINT
-PK_GNBDUFunction_id	PK_GNBDUFunction_id	CONSTRAINT
-UNIQUE_NRSectorCarrier_REL_ID_NRSECTORCARRIER_USES_ANTENNACAPABILITY	UNIQUE_EDF7D5C78EF6505848B1679B714D7831F5863991	CONSTRAINT
-PK_AntennaCapability_id	PK_AntennaCapability_id	CONSTRAINT
-nRFqBands	nRFqBands	COLUMN
-ANTENNACAPABILITY_USES_ANTENNACAPABILITY	ANTENNACAPABILITY_USES_ANTENNACAPABILITY	TABLE
-FK_NRSectorCarrier_REL_FK_used-antennaCapability	FK_NRSectorCarrier_REL_FK_used-antennaCapability	CONSTRAINT
-geo-location	geo-location	COLUMN
-PK_ANTENNACAPABILITY_REALISED_BY_ANTENNACAPABILITY_id	PK_ANTENNACAPABILITY_REALISED_BY_ANTENNACAPABILITY_id	CONSTRAINT
-arfcnDL	arfcnDL	COLUMN
-FK_LTESectorCarrier_REL_FK_provided-by-enodebFunction	FK_LTESectorCarrier_REL_FK_provided-by-enodebFunction	CONSTRAINT
-id	id	COLUMN
-gNBId	gNBId	COLUMN
-REL_ID_ENODEBFUNCTION_PROVIDES_LTESECTORCARRIER	REL_ID_ENODEBFUNCTION_PROVIDES_LTESECTORCARRIER	COLUMN
-ANTENNAMODULE_USES_ANTENNAMODULE	ANTENNAMODULE_USES_ANTENNAMODULE	TABLE
-ANTENNACAPABILITY_REALISED_BY_ANTENNACAPABILITY	ANTENNACAPABILITY_REALISED_BY_ANTENNACAPABILITY	TABLE
-bSide_AntennaModule	bSide_AntennaModule	COLUMN
-REL_CD_sourceIds_LTESECTORCARRIER_USES_ANTENNACAPABILITY	REL_CD_sourceIds_LTESECTORCARRIER_USES_ANTENNACAPABILITY	COLUMN
-eNBId	eNBId	COLUMN
-positionWithinSector	positionWithinSector	COLUMN
-aSide_AntennaCapability	aSide_AntennaCapability	COLUMN
-FK_ANTENNAMODULE_SERVES_ANTENNACAPABILITY_bSide_AntennaCapability	FK_AB3CEA707D389B107F1D10BC724542418E02ABEC	CONSTRAINT
-REL_CD_decorators_LTESECTORCARRIER_USES_ANTENNACAPABILITY	REL_CD_decorators_LTESECTORCARRIER_USES_ANTENNACAPABILITY	COLUMN
-PK_ANTENNACAPABILITY_SERVES_ANTENNACAPABILITY_id	PK_ANTENNACAPABILITY_SERVES_ANTENNACAPABILITY_id	CONSTRAINT
-FK_ANTENNACAPABILITY_SERVES_ANTENNACAPABILITY_aSide_AntennaCapability	FK_3613A8C84275763DE5294B04DB6E6BF74E9412F4	CONSTRAINT
-PK_ANTENNACAPABILITY_USES_ANTENNACAPABILITY_id	PK_ANTENNACAPABILITY_USES_ANTENNACAPABILITY_id	CONSTRAINT
-FK_ANTENNAMODULE_USES_ANTENNAMODULE_aSide_AntennaModule	FK_ANTENNAMODULE_USES_ANTENNAMODULE_aSide_AntennaModule	CONSTRAINT
 CD_decorators	CD_decorators	COLUMN
-PK_ANTENNAMODULE_SERVES_ANTENNACAPABILITY_id	PK_ANTENNAMODULE_SERVES_ANTENNACAPABILITY_id	CONSTRAINT
-totalTilt	totalTilt	COLUMN
-FK_ANTENNACAPABILITY_SERVES_ANTENNACAPABILITY_bSide_AntennaCapability	FK_C21710428B73A144CC8DE4063CB24D4852D2EFE1	CONSTRAINT
-REL_CD_decorators_ENODEBFUNCTION_PROVIDES_LTESECTORCARRIER	REL_CD_decorators_ENODEBFUNCTION_PROVIDES_LTESECTORCARRIER	COLUMN
-gNBIdLength	gNBIdLength	COLUMN
-AntennaCapability	AntennaCapability	TABLE
-FK_ANTENNACAPABILITY_PROVIDES_ANTENNACAPABILITY_bSide_AntennaCapability	FK_73581B1E05EA3AC4C029F090C067BD88029F1195	CONSTRAINT
-REL_ID_LTESECTORCARRIER_USES_ANTENNACAPABILITY	REL_ID_LTESECTORCARRIER_USES_ANTENNACAPABILITY	COLUMN
-bSide_AntennaCapability	bSide_AntennaCapability	COLUMN
-PK_ANTENNAMODULE_USES_ANTENNAMODULE_id	PK_ANTENNAMODULE_USES_ANTENNAMODULE_id	CONSTRAINT
-FK_ANTENNAMODULE_USES_ANTENNAMODULE_bSide_AntennaModule	FK_ANTENNAMODULE_USES_ANTENNAMODULE_bSide_AntennaModule	CONSTRAINT
-FK_ANTENNACAPABILITY_REALISED_BY_ANTENNACAPABILITY_bSide_AntennaCapability	FK_8B87C4FA55D9F0A4164C35942D91E2E4E0B6140D	CONSTRAINT
-REL_CD_decorators_NRSECTORCARRIER_USES_ANTENNACAPABILITY	REL_CD_decorators_NRSECTORCARRIER_USES_ANTENNACAPABILITY	COLUMN
-FK_ANTENNACAPABILITY_PROVIDES_ANTENNACAPABILITY_aSide_AntennaCapability	FK_F407B43F3D94FFE0CBDF7E2BFAEAD9A4047DF252	CONSTRAINT
-PK_AntennaModule_id	PK_AntennaModule_id	CONSTRAINT
-REL_CD_classifiers_NRSECTORCARRIER_USES_ANTENNACAPABILITY	REL_CD_classifiers_NRSECTORCARRIER_USES_ANTENNACAPABILITY	COLUMN
-antennaBeamWidth	antennaBeamWidth	COLUMN
-UNIQUE_LTESectorCarrier_REL_ID_LTESECTORCARRIER_USES_ANTENNACAPABILITY	UNIQUE_5D5FEB6B4B09D5D42A589753C684994CD0B96E88	CONSTRAINT
-sectorCarrierType	sectorCarrierType	COLUMN
+CD_sourceIds	CD_sourceIds	COLUMN
+FK_o-ran-smo-teiv-ran_LTESectorCarrier_REL_FK_provided-by-enodebFunction	FK_D0868FBC0BBE2754F4B765C4898C1A1700E2BEFD	CONSTRAINT
+FK_o-ran-smo-teiv-ran_LTESectorCarrier_REL_FK_used-antennaCapability	FK_3D8DF3FBD9C042A888CEB382688C1E8F39D85AFE	CONSTRAINT
+FK_o-ran-smo-teiv-rel-equipment-ran_ANTENNAMODULE_SERVES_ANTENNACAPABILITY_aSide_AntennaModule	FK_D80D1E6B26DF620B4DE659C600A3B7F709A41960	CONSTRAINT
+FK_o-ran-smo-teiv-rel-equipment-ran_ANTENNAMODULE_SERVES_ANTENNACAPABILITY_bSide_AntennaCapability	FK_7148BEED02C0617DE1DEEB6639F34A9FA9251B06	CONSTRAINT
+FK_test-built-in-module_ENTITYTYPEAWITHENTITYTYPENAMELENGTHLONGERTHANSIXTYTHREECHARACTERS_USES_ENTITYTYPEAWITHENTITYTYPENAMELENGTHLONGERTHANSIXTYTHREECHARACTERS_aSide_EntityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters	FK_2A5C84A2226EE0FCAAA513CC5AF4CD78DDDAF49F	CONSTRAINT
+FK_test-built-in-module_ENTITYTYPEAWITHENTITYTYPENAMELENGTHLONGERTHANSIXTYTHREECHARACTERS_USES_ENTITYTYPEAWITHENTITYTYPENAMELENGTHLONGERTHANSIXTYTHREECHARACTERS_bSide_EntityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters	FK_FBFE10B6F165A8EC2086B8DEAFA238E0DD6643F5	CONSTRAINT
+FK_test-built-in-module_ENTITYTYPEA_INSTALLED_AT_ENTITYTYPEAWITHENTITYTYPENAMELENGTHLONGERTHANSIXTYTHREECHARACTERS_aSide_EntityTypeA	FK_2839E6FFDF7F3DF2687DAC3E57082AD6B22E9B30	CONSTRAINT
+FK_test-built-in-module_ENTITYTYPEA_INSTALLED_AT_ENTITYTYPEAWITHENTITYTYPENAMELENGTHLONGERTHANSIXTYTHREECHARACTERS_bSide_EntityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters	FK_33B5669A341584011D9A73FB491FF2242A158057	CONSTRAINT
+FK_test-built-in-module_EntityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters_REL_FK_provided-by-entityTypeA	FK_B0923C0CCED6CF47CFF759FFE1B810D6CA10D228	CONSTRAINT
+FK_test-built-in-module_EntityTypeA_REL_FK_grouped-entityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters	FK_02592FFA6AFD7EAC7AFAD936E3CD50708E4533E0	CONSTRAINT
+FK_test-built-in-module_EntityTypeA_REL_FK_used-entityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters	FK_5CD9BCFA08278DA0BF902BAFBCFCDFCE4FF25FEF	CONSTRAINT
+IDX_GIN_TRGM_OPS_ON_LIST_AS_JSONB_o-ran-smo-teiv-equipment_AntennaModule_CD_classifiers	IDX_1C0CAFD80FDD6444044E3F76C7C0A7BDC35F9BC8	INDEX
+IDX_GIN_TRGM_OPS_ON_LIST_AS_JSONB_o-ran-smo-teiv-equipment_AntennaModule_CD_sourceIds	IDX_905011128A2C218B5352C19ED1FE9851F43EB911	INDEX
+IDX_GIN_TRGM_OPS_ON_LIST_AS_JSONB_o-ran-smo-teiv-equipment_AntennaModule_antennaBeamWidth	IDX_21B0F1FE632B6CB185C49BA6F00224068F443215	INDEX
+IDX_GIN_TRGM_OPS_ON_LIST_AS_JSONB_o-ran-smo-teiv-ran_AntennaCapability_CD_classifiers	IDX_E7FFE8F4A166AA9A382A0659762FFEC313A9EB5C	INDEX
+IDX_GIN_TRGM_OPS_ON_LIST_AS_JSONB_o-ran-smo-teiv-ran_AntennaCapability_CD_sourceIds	IDX_CC3E208A4EE51D3B505416A599F36F3C99F466C8	INDEX
+IDX_GIN_TRGM_OPS_ON_LIST_AS_JSONB_o-ran-smo-teiv-ran_AntennaCapability_eUtranFqBands	IDX_5FB80647AE3E5C0443A792618D65B9090EE2A3FC	INDEX
+IDX_GIN_TRGM_OPS_ON_LIST_AS_JSONB_o-ran-smo-teiv-ran_AntennaCapability_geranFqBands	IDX_A94722FF7B95D8974B494793908B57B4E1A9743B	INDEX
+IDX_GIN_TRGM_OPS_ON_LIST_AS_JSONB_o-ran-smo-teiv-ran_AntennaCapability_nRFqBands	IDX_441B5C05448D63552C6414BD59C13641D8A4408D	INDEX
+IDX_GIN_TRGM_OPS_ON_LIST_AS_JSONB_o-ran-smo-teiv-ran_ENodeBFunction_CD_classifiers	IDX_B598B74193845587BA03553CEDBA058D33956847	INDEX
+IDX_GIN_TRGM_OPS_ON_LIST_AS_JSONB_o-ran-smo-teiv-ran_ENodeBFunction_CD_sourceIds	IDX_3F7D14B4CF2CA74F28BA1600606E82C6E8C447C0	INDEX
+IDX_GIN_TRGM_OPS_ON_LIST_AS_JSONB_o-ran-smo-teiv-ran_GNBDUFunction_CD_classifiers	IDX_601A4514FFACA8985471531013AFC8F760361F09	INDEX
+IDX_GIN_TRGM_OPS_ON_LIST_AS_JSONB_o-ran-smo-teiv-ran_GNBDUFunction_CD_sourceIds	IDX_2BEF269CED354C2454AC2B2EABB134AC267A0C62	INDEX
+IDX_GIN_TRGM_OPS_ON_LIST_AS_JSONB_o-ran-smo-teiv-ran_LTESectorCarrier_CD_classifiers	IDX_E754EB8AD825DB3111B07B9E5DA3B30C38DB406B	INDEX
+IDX_GIN_TRGM_OPS_ON_LIST_AS_JSONB_o-ran-smo-teiv-ran_LTESectorCarrier_CD_sourceIds	IDX_6EC539C61EA7078DBA264C9877B87FC263605D42	INDEX
+IDX_GIN_TRGM_OPS_ON_LIST_AS_JSONB_o-ran-smo-teiv-ran_LTESectorCarrier_REL_CD_classifiers_ENODEBFUNCTION_PROVIDES_LTESECTORCARRIER	IDX_846B7740E8AA756B8C1409CD909D2DF73A47ED4C	INDEX
+IDX_GIN_TRGM_OPS_ON_LIST_AS_JSONB_o-ran-smo-teiv-ran_LTESectorCarrier_REL_CD_classifiers_LTESECTORCARRIER_USES_ANTENNACAPABILITY	IDX_3D3EFECFB917DAC074F56334224B19F8FD6BF8A5	INDEX
+IDX_GIN_TRGM_OPS_ON_LIST_AS_JSONB_o-ran-smo-teiv-ran_LTESectorCarrier_REL_CD_sourceIds_ENODEBFUNCTION_PROVIDES_LTESECTORCARRIER	IDX_1EBC7271CEA658156DE25286404CBC4593340F8E	INDEX
+IDX_GIN_TRGM_OPS_ON_LIST_AS_JSONB_o-ran-smo-teiv-ran_LTESectorCarrier_REL_CD_sourceIds_LTESECTORCARRIER_USES_ANTENNACAPABILITY	IDX_7D01A5D21C990ACCBE65035C062C7D881A05F1EE	INDEX
+IDX_GIN_TRGM_OPS_ON_LIST_AS_JSONB_o-ran-smo-teiv-rel-equipment-ran_ANTENNAMODULE_SERVES_ANTENNACAPABILITY_CD_classifiers	IDX_DD0D676834B12CA2F7E8219310998376A08D7F5F	INDEX
+IDX_GIN_TRGM_OPS_ON_LIST_AS_JSONB_o-ran-smo-teiv-rel-equipment-ran_ANTENNAMODULE_SERVES_ANTENNACAPABILITY_CD_sourceIds	IDX_E896A9EB22A3F9F96CE75A271475316A98B629C8	INDEX
+IDX_GIN_TRGM_OPS_ON_LIST_AS_JSONB_test-built-in-module_ENTITYTYPEAWITHENTITYTYPENAMELENGTHLONGERTHANSIXTYTHREECHARACTERS_USES_ENTITYTYPEAWITHENTITYTYPENAMELENGTHLONGERTHANSIXTYTHREECHARACTERS_CD_classifiers	IDX_26EE0E66CE3AF1DE2E107F6A99712F2BEC1F47E3	INDEX
+IDX_GIN_TRGM_OPS_ON_LIST_AS_JSONB_test-built-in-module_ENTITYTYPEAWITHENTITYTYPENAMELENGTHLONGERTHANSIXTYTHREECHARACTERS_USES_ENTITYTYPEAWITHENTITYTYPENAMELENGTHLONGERTHANSIXTYTHREECHARACTERS_CD_sourceIds	IDX_DCA3B27EBD61104A41BE23B1C864D67CBF3AA45E	INDEX
+IDX_GIN_TRGM_OPS_ON_LIST_AS_JSONB_test-built-in-module_ENTITYTYPEA_INSTALLED_AT_ENTITYTYPEAWITHENTITYTYPENAMELENGTHLONGERTHANSIXTYTHREECHARACTERS_CD_classifiers	IDX_73D270B07D89D7F4D54B82DB95E6168F6ED54AF1	INDEX
+IDX_GIN_TRGM_OPS_ON_LIST_AS_JSONB_test-built-in-module_ENTITYTYPEA_INSTALLED_AT_ENTITYTYPEAWITHENTITYTYPENAMELENGTHLONGERTHANSIXTYTHREECHARACTERS_CD_sourceIds	IDX_D16FC793292C549EEB2EDCA074EC9726CD0986B1	INDEX
+IDX_GIN_TRGM_OPS_ON_LIST_AS_JSONB_test-built-in-module_EntityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters_CD_classifiers	IDX_371097F35C137586E6DD7526076CA322C72FAF79	INDEX
+IDX_GIN_TRGM_OPS_ON_LIST_AS_JSONB_test-built-in-module_EntityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters_CD_sourceIds	IDX_EDE92A1D90AEC06F2C60361D36437D1A20691FDC	INDEX
+IDX_GIN_TRGM_OPS_ON_LIST_AS_JSONB_test-built-in-module_EntityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters_REL_CD_classifiers_ENTITYTYPEA_PROVIDES_ENTITYTYPEAWITHENTITYTYPENAMELENGTHLONGERTHANSIXTYTHREECHARACTERS	IDX_F613D04BF286E43A7BBBE6C306F015D0A40BC451	INDEX
+IDX_GIN_TRGM_OPS_ON_LIST_AS_JSONB_test-built-in-module_EntityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters_REL_CD_sourceIds_ENTITYTYPEA_PROVIDES_ENTITYTYPEAWITHENTITYTYPENAMELENGTHLONGERTHANSIXTYTHREECHARACTERS	IDX_2B6D6CECE23DAE6820ECA50ECC172FE6FCE673DF	INDEX
+IDX_GIN_TRGM_OPS_ON_LIST_AS_JSONB_test-built-in-module_EntityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters_attributeA6WithAttributeNameLengthLongerThanSixtyThreeCharacters	IDX_1B734406AE75EF103D3E0913637A741DB602A6E9	INDEX
+IDX_GIN_TRGM_OPS_ON_LIST_AS_JSONB_test-built-in-module_EntityTypeA_CD_classifiers	IDX_C4788824417A9F41E8CB948DAC0C2D1C0580FFD4	INDEX
+IDX_GIN_TRGM_OPS_ON_LIST_AS_JSONB_test-built-in-module_EntityTypeA_CD_sourceIds	IDX_497353902DBA614467FFC457A40F39BF04CADC33	INDEX
+IDX_GIN_TRGM_OPS_ON_LIST_AS_JSONB_test-built-in-module_EntityTypeA_REL_CD_classifiers_ENTITYTYPEA_GROUPS_ENTITYTYPEAWITHENTITYTYPENAMELENGTHLONGERTHANSIXTYTHREECHARACTERS	IDX_E050A7DD176C8D18F3307D3851586C8124CA8268	INDEX
+IDX_GIN_TRGM_OPS_ON_LIST_AS_JSONB_test-built-in-module_EntityTypeA_REL_CD_classifiers_ENTITYTYPEA_USES_ENTITYTYPEAWITHENTITYTYPENAMELENGTHLONGERTHANSIXTYTHREECHARACTERS	IDX_5345DBA457356CB29D1905DA4785B7FB2B27D224	INDEX
+IDX_GIN_TRGM_OPS_ON_LIST_AS_JSONB_test-built-in-module_EntityTypeA_REL_CD_sourceIds_ENTITYTYPEA_GROUPS_ENTITYTYPEAWITHENTITYTYPENAMELENGTHLONGERTHANSIXTYTHREECHARACTERS	IDX_86B531D9388F1780960FB5C3BA9D3EDEF14CCB48	INDEX
+IDX_GIN_TRGM_OPS_ON_LIST_AS_JSONB_test-built-in-module_EntityTypeA_REL_CD_sourceIds_ENTITYTYPEA_USES_ENTITYTYPEAWITHENTITYTYPENAMELENGTHLONGERTHANSIXTYTHREECHARACTERS	IDX_41BEE4E46184F6F17D338D2F8691EF31D188C76D	INDEX
+IDX_GIN_o-ran-smo-teiv-equipment_AntennaModule_CD_decorators	IDX_GIN_o-ran-smo-teiv-equipment_AntennaModule_CD_decorators	INDEX
+IDX_GIN_o-ran-smo-teiv-ran_AntennaCapability_CD_decorators	IDX_GIN_o-ran-smo-teiv-ran_AntennaCapability_CD_decorators	INDEX
+IDX_GIN_o-ran-smo-teiv-ran_ENodeBFunction_CD_decorators	IDX_GIN_o-ran-smo-teiv-ran_ENodeBFunction_CD_decorators	INDEX
+IDX_GIN_o-ran-smo-teiv-ran_ENodeBFunction_eNodeBPlmnId	IDX_GIN_o-ran-smo-teiv-ran_ENodeBFunction_eNodeBPlmnId	INDEX
+IDX_GIN_o-ran-smo-teiv-ran_GNBDUFunction_CD_decorators	IDX_GIN_o-ran-smo-teiv-ran_GNBDUFunction_CD_decorators	INDEX
+IDX_GIN_o-ran-smo-teiv-ran_GNBDUFunction_dUpLMNId	IDX_GIN_o-ran-smo-teiv-ran_GNBDUFunction_dUpLMNId	INDEX
+IDX_GIN_o-ran-smo-teiv-ran_LTESectorCarrier_CD_decorators	IDX_GIN_o-ran-smo-teiv-ran_LTESectorCarrier_CD_decorators	INDEX
+IDX_GIN_o-ran-smo-teiv-ran_LTESectorCarrier_REL_CD_decorators_ENODEBFUNCTION_PROVIDES_LTESECTORCARRIER	IDX_44075E1D464599B61924196C20F2B88332520CD8	INDEX
+IDX_GIN_o-ran-smo-teiv-ran_LTESectorCarrier_REL_CD_decorators_LTESECTORCARRIER_USES_ANTENNACAPABILITY	IDX_4EE2AA643311DFCC13B6ED832EBE2FAB4CFDF494	INDEX
+IDX_GIN_o-ran-smo-teiv-rel-equipment-ran_ANTENNAMODULE_SERVES_ANTENNACAPABILITY_CD_decorators	IDX_7BF09D0227840279556AD27ACECB068705893D28	INDEX
+IDX_GIN_test-built-in-module_ENTITYTYPEAWITHENTITYTYPENAMELENGTHLONGERTHANSIXTYTHREECHARACTERS_USES_ENTITYTYPEAWITHENTITYTYPENAMELENGTHLONGERTHANSIXTYTHREECHARACTERS_CD_decorators	IDX_C212962DB49654BB1526341141D01AF2A3699B5D	INDEX
+IDX_GIN_test-built-in-module_ENTITYTYPEA_INSTALLED_AT_ENTITYTYPEAWITHENTITYTYPENAMELENGTHLONGERTHANSIXTYTHREECHARACTERS_CD_decorators	IDX_786DFF3328DE8D28C54F9ACA126AF6ADB1D21645	INDEX
+IDX_GIN_test-built-in-module_EntityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters_CD_decorators	IDX_06503CC4580E197BA869DF60207E5CC1778223F0	INDEX
+IDX_GIN_test-built-in-module_EntityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters_REL_CD_decorators_ENTITYTYPEA_PROVIDES_ENTITYTYPEAWITHENTITYTYPENAMELENGTHLONGERTHANSIXTYTHREECHARACTERS	IDX_15F7CCF328E4FA23EE20BE521E07C475825B38C6	INDEX
+IDX_GIN_test-built-in-module_EntityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters_attributeA7WithAttributeNameLengthLongerThanSixtyThreeCharacters	IDX_93D8689B66D668B64409D69EB1AD4670419BE4F0	INDEX
+IDX_GIN_test-built-in-module_EntityTypeA_CD_decorators	IDX_GIN_test-built-in-module_EntityTypeA_CD_decorators	INDEX
+IDX_GIN_test-built-in-module_EntityTypeA_REL_CD_decorators_ENTITYTYPEA_GROUPS_ENTITYTYPEAWITHENTITYTYPENAMELENGTHLONGERTHANSIXTYTHREECHARACTERS	IDX_CCBCF9A86E2AA678D2589DEB3A895076012F941D	INDEX
+IDX_GIN_test-built-in-module_EntityTypeA_REL_CD_decorators_ENTITYTYPEA_USES_ENTITYTYPEAWITHENTITYTYPENAMELENGTHLONGERTHANSIXTYTHREECHARACTERS	IDX_14EDC4DAF64B9A97E4788CFEA16A7F9AED195589	INDEX
+PK_o-ran-smo-teiv-equipment_AntennaModule_id	PK_o-ran-smo-teiv-equipment_AntennaModule_id	CONSTRAINT
+PK_o-ran-smo-teiv-ran_AntennaCapability_id	PK_o-ran-smo-teiv-ran_AntennaCapability_id	CONSTRAINT
+PK_o-ran-smo-teiv-ran_ENodeBFunction_id	PK_o-ran-smo-teiv-ran_ENodeBFunction_id	CONSTRAINT
+PK_o-ran-smo-teiv-ran_GNBDUFunction_id	PK_o-ran-smo-teiv-ran_GNBDUFunction_id	CONSTRAINT
+PK_o-ran-smo-teiv-ran_LTESectorCarrier_id	PK_o-ran-smo-teiv-ran_LTESectorCarrier_id	CONSTRAINT
+PK_o-ran-smo-teiv-rel-equipment-ran_ANTENNAMODULE_SERVES_ANTENNACAPABILITY_id	PK_63E61CB6802F21FE7A04A80A095F6AF8ABF067CE	CONSTRAINT
+PK_test-built-in-module_ENTITYTYPEAWITHENTITYTYPENAMELENGTHLONGERTHANSIXTYTHREECHARACTERS_USES_ENTITYTYPEAWITHENTITYTYPENAMELENGTHLONGERTHANSIXTYTHREECHARACTERS_id	PK_020B03AED5787D1B43ABBD9F2C26B494ADDBC7CD	CONSTRAINT
+PK_test-built-in-module_ENTITYTYPEA_INSTALLED_AT_ENTITYTYPEAWITHENTITYTYPENAMELENGTHLONGERTHANSIXTYTHREECHARACTERS_id	PK_4C48AAFA2160D74F9D13364AA2BE4FDB8A60689D	CONSTRAINT
+PK_test-built-in-module_EntityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters_id	PK_7A421D526B36AA9EEF17964BC27011A12FF80DBB	CONSTRAINT
+PK_test-built-in-module_EntityTypeA_id	PK_test-built-in-module_EntityTypeA_id	CONSTRAINT
 REL_CD_classifiers_ENODEBFUNCTION_PROVIDES_LTESECTORCARRIER	REL_CD_classifiers_ENODEBFUNCTION_PROVIDES_LTESECTORCARRIER	COLUMN
-FK_ANTENNAMODULE_SERVES_ANTENNACAPABILITY_aSide_AntennaModule	FK_ANTENNAMODULE_SERVES_ANTENNACAPABILITY_aSide_AntennaModule	CONSTRAINT
-GNBDUFunction	GNBDUFunction	TABLE
-mechanicalAntennaTilt	mechanicalAntennaTilt	COLUMN
-electricalAntennaTilt	electricalAntennaTilt	COLUMN
-ANTENNACAPABILITY_SERVES_ANTENNACAPABILITY	ANTENNACAPABILITY_SERVES_ANTENNACAPABILITY	TABLE
+REL_CD_classifiers_ENTITYTYPEA_GROUPS_ENTITYTYPEAWITHENTITYTYPENAMELENGTHLONGERTHANSIXTYTHREECHARACTERS	REL_CD_75B161E740A96ADBAE6F08D4F85684ECC29049B9	COLUMN
+REL_CD_classifiers_ENTITYTYPEA_PROVIDES_ENTITYTYPEAWITHENTITYTYPENAMELENGTHLONGERTHANSIXTYTHREECHARACTERS	REL_CD_E2C3D598A06EA38133E23C1756ED58A66FE21386	COLUMN
+REL_CD_classifiers_ENTITYTYPEA_USES_ENTITYTYPEAWITHENTITYTYPENAMELENGTHLONGERTHANSIXTYTHREECHARACTERS	REL_CD_74A44B167FDF37D6C8E79B5033FEF8BC384C881A	COLUMN
+REL_CD_classifiers_LTESECTORCARRIER_USES_ANTENNACAPABILITY	REL_CD_classifiers_LTESECTORCARRIER_USES_ANTENNACAPABILITY	COLUMN
+REL_CD_decorators_ENODEBFUNCTION_PROVIDES_LTESECTORCARRIER	REL_CD_decorators_ENODEBFUNCTION_PROVIDES_LTESECTORCARRIER	COLUMN
+REL_CD_decorators_ENTITYTYPEA_GROUPS_ENTITYTYPEAWITHENTITYTYPENAMELENGTHLONGERTHANSIXTYTHREECHARACTERS	REL_CD_6F7211CAF505AECF9A565BC7A4AF56E7032CCC54	COLUMN
+REL_CD_decorators_ENTITYTYPEA_PROVIDES_ENTITYTYPEAWITHENTITYTYPENAMELENGTHLONGERTHANSIXTYTHREECHARACTERS	REL_CD_92559ED73C761B860682582A040E745ECEC194D5	COLUMN
+REL_CD_decorators_ENTITYTYPEA_USES_ENTITYTYPEAWITHENTITYTYPENAMELENGTHLONGERTHANSIXTYTHREECHARACTERS	REL_CD_F5B24D9A7273119D4D1519473D9EC88CB407E5CA	COLUMN
+REL_CD_decorators_LTESECTORCARRIER_USES_ANTENNACAPABILITY	REL_CD_decorators_LTESECTORCARRIER_USES_ANTENNACAPABILITY	COLUMN
 REL_CD_sourceIds_ENODEBFUNCTION_PROVIDES_LTESECTORCARRIER	REL_CD_sourceIds_ENODEBFUNCTION_PROVIDES_LTESECTORCARRIER	COLUMN
-FK_ANTENNACAPABILITY_USES_ANTENNACAPABILITY_aSide_AntennaCapability	FK_0F27D391D210980029D4A879344BFC1DF7E56047	CONSTRAINT
-FK_ANTENNACAPABILITY_REALISED_BY_ANTENNACAPABILITY_aSide_AntennaCapability	FK_59989F20BF725E08F0327C7C555B1CF7B4F8661C	CONSTRAINT
+REL_CD_sourceIds_ENTITYTYPEA_GROUPS_ENTITYTYPEAWITHENTITYTYPENAMELENGTHLONGERTHANSIXTYTHREECHARACTERS	REL_CD_AB6BDADE3F6C750C9FDB6CAD6059C4CBCE67236C	COLUMN
+REL_CD_sourceIds_ENTITYTYPEA_PROVIDES_ENTITYTYPEAWITHENTITYTYPENAMELENGTHLONGERTHANSIXTYTHREECHARACTERS	REL_CD_F26C39EC1F710F3096BE0588F6783A03A378516A	COLUMN
+REL_CD_sourceIds_ENTITYTYPEA_USES_ENTITYTYPEAWITHENTITYTYPENAMELENGTHLONGERTHANSIXTYTHREECHARACTERS	REL_CD_3B43F80D423BF8F96A2906643B7B4712604FC28B	COLUMN
+REL_CD_sourceIds_LTESECTORCARRIER_USES_ANTENNACAPABILITY	REL_CD_sourceIds_LTESECTORCARRIER_USES_ANTENNACAPABILITY	COLUMN
+REL_FK_grouped-entityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters	REL_FK_B7E43411C5C5079D49856E74A9FA63BD20C522C5	COLUMN
 REL_FK_provided-by-enodebFunction	REL_FK_provided-by-enodebFunction	COLUMN
-gNBDUId	gNBDUId	COLUMN
-ANTENNACAPABILITY_PROVIDES_ANTENNACAPABILITY	ANTENNACAPABILITY_PROVIDES_ANTENNACAPABILITY	TABLE
-FK_ANTENNACAPABILITY_USES_ANTENNACAPABILITY_bSide_AntennaCapability	FK_C66086ACCFA9455ED438AE9381A7E4B0668EA027	CONSTRAINT
+REL_FK_provided-by-entityTypeA	REL_FK_provided-by-entityTypeA	COLUMN
+REL_FK_used-antennaCapability	REL_FK_used-antennaCapability	COLUMN
+REL_FK_used-entityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters	REL_FK_A86937FEBD025CFDF6EE5BC386B4C569EB2652DA	COLUMN
+REL_ID_ENODEBFUNCTION_PROVIDES_LTESECTORCARRIER	REL_ID_ENODEBFUNCTION_PROVIDES_LTESECTORCARRIER	COLUMN
+REL_ID_ENTITYTYPEA_GROUPS_ENTITYTYPEAWITHENTITYTYPENAMELENGTHLONGERTHANSIXTYTHREECHARACTERS	REL_ID_31A5B55158140557F09AE15589A8B8038416689B	COLUMN
+REL_ID_ENTITYTYPEA_PROVIDES_ENTITYTYPEAWITHENTITYTYPENAMELENGTHLONGERTHANSIXTYTHREECHARACTERS	REL_ID_F64052A4F8BB3CC533EC15BBFB5E224F600735B0	COLUMN
+REL_ID_ENTITYTYPEA_USES_ENTITYTYPEAWITHENTITYTYPENAMELENGTHLONGERTHANSIXTYTHREECHARACTERS	REL_ID_A974AD6DD8C4CA281D45693D3A61AE98FEE82845	COLUMN
+REL_ID_LTESECTORCARRIER_USES_ANTENNACAPABILITY	REL_ID_LTESECTORCARRIER_USES_ANTENNACAPABILITY	COLUMN
+UNIQUE_o-ran-smo-teiv-ran_LTESectorCarrier_REL_ID_ENODEBFUNCTION_PROVIDES_LTESECTORCARRIER	UNIQUE_FD943EE596337B11E0C640E1176CADF9CD69E19A	CONSTRAINT
+UNIQUE_o-ran-smo-teiv-ran_LTESectorCarrier_REL_ID_LTESECTORCARRIER_USES_ANTENNACAPABILITY	UNIQUE_EA18F1D278EAFE834B8A80BCF8A7D8355CD013DF	CONSTRAINT
+UNIQUE_test-built-in-module_EntityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters_REL_ID_ENTITYTYPEA_PROVIDES_ENTITYTYPEAWITHENTITYTYPENAMELENGTHLONGERTHANSIXTYTHREECHARACTERS	UNIQUE_B1C2FC9A96300B2BE45785DE60E152D8E85FBE14	CONSTRAINT
+UNIQUE_test-built-in-module_EntityTypeA_REL_ID_ENTITYTYPEA_GROUPS_ENTITYTYPEAWITHENTITYTYPENAMELENGTHLONGERTHANSIXTYTHREECHARACTERS	UNIQUE_7715FF94E14F99CE4994ABBD8C2583CBA9EAE5BD	CONSTRAINT
+UNIQUE_test-built-in-module_EntityTypeA_REL_ID_ENTITYTYPEA_USES_ENTITYTYPEAWITHENTITYTYPENAMELENGTHLONGERTHANSIXTYTHREECHARACTERS	UNIQUE_67DB5E4BC34AB83BDC069A5CAF73B57967D5C2D9	CONSTRAINT
+aSide_AntennaModule	aSide_AntennaModule	COLUMN
+aSide_EntityTypeA	aSide_EntityTypeA	COLUMN
+aSide_EntityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters	aSide_C812C285BEFA4EC42026AB075D9C65200A00F815	COLUMN
+antennaBeamWidth	antennaBeamWidth	COLUMN
+antennaModelNumber	antennaModelNumber	COLUMN
+attributeA1WithAttributeNameLengthLongerThanSixtyThreeCharacters	6446B2D4BE5E367FB0396383C4BDEF42D51CF74F	COLUMN
+attributeA2WithAttributeNameLengthLongerThanSixtyThreeCharacters	F03B534AFF0872651FED60C54AB56BEDADAB94B5	COLUMN
+attributeA3WithAttributeNameLengthLongerThanSixtyThreeCharacters	333177AA699C0DE6399503171DCF48FB396322B0	COLUMN
+attributeA4WithAttributeNameLengthLongerThanSixtyThreeCharacters	027B1A8019C6DEF04558B90D9D8B52253B82FEC6	COLUMN
+attributeA5WithAttributeNameLengthLongerThanSixtyThreeCharacters	478D043D81678134EF1C8BFB073A70F882C4AF12	COLUMN
+attributeA6WithAttributeNameLengthLongerThanSixtyThreeCharacters	8252D18D44F633831557076D827993C45278024D	COLUMN
+attributeA7WithAttributeNameLengthLongerThanSixtyThreeCharacters	68C48305AB6C3A30DD927F5D38562379374A4B31	COLUMN
+bSide_AntennaCapability	bSide_AntennaCapability	COLUMN
+bSide_EntityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters	bSide_A85CE100A012A71EF2ABA306BABE484AC2AAE515	COLUMN
+dUpLMNId	dUpLMNId	COLUMN
+eNBId	eNBId	COLUMN
+eNodeBPlmnId	eNodeBPlmnId	COLUMN
 eUtranFqBands	eUtranFqBands	COLUMN
-REL_ID_NRSECTORCARRIER_USES_ANTENNACAPABILITY	REL_ID_NRSECTORCARRIER_USES_ANTENNACAPABILITY	COLUMN
-ANTENNAMODULE_SERVES_ANTENNACAPABILITY	ANTENNAMODULE_SERVES_ANTENNACAPABILITY	TABLE
+electricalAntennaTilt	electricalAntennaTilt	COLUMN
+gNBDUId	gNBDUId	COLUMN
+gNBId	gNBId	COLUMN
+gNBIdLength	gNBIdLength	COLUMN
+geo-location	geo-location	COLUMN
+geranFqBands	geranFqBands	COLUMN
+id	id	COLUMN
+mechanicalAntennaBearing	mechanicalAntennaBearing	COLUMN
+mechanicalAntennaTilt	mechanicalAntennaTilt	COLUMN
+nRFqBands	nRFqBands	COLUMN
+o-ran-smo-teiv-equipment_AntennaModule	o-ran-smo-teiv-equipment_AntennaModule	TABLE
+o-ran-smo-teiv-ran_AntennaCapability	o-ran-smo-teiv-ran_AntennaCapability	TABLE
+o-ran-smo-teiv-ran_ENodeBFunction	o-ran-smo-teiv-ran_ENodeBFunction	TABLE
+o-ran-smo-teiv-ran_GNBDUFunction	o-ran-smo-teiv-ran_GNBDUFunction	TABLE
+o-ran-smo-teiv-ran_LTESectorCarrier	o-ran-smo-teiv-ran_LTESectorCarrier	TABLE
+o-ran-smo-teiv-rel-equipment-ran_ANTENNAMODULE_SERVES_ANTENNACAPABILITY	CFC235E0404703D1E4454647DF8AAE2C193DB402	TABLE
+positionWithinSector	positionWithinSector	COLUMN
+sectorCarrierType	sectorCarrierType	COLUMN
+test-built-in-module_ENTITYTYPEAWITHENTITYTYPENAMELENGTHLONGERTHANSIXTYTHREECHARACTERS_USES_ENTITYTYPEAWITHENTITYTYPENAMELENGTHLONGERTHANSIXTYTHREECHARACTERS	FB1E124031A12CD85D3335194B39B193723A0490	TABLE
+test-built-in-module_ENTITYTYPEA_INSTALLED_AT_ENTITYTYPEAWITHENTITYTYPENAMELENGTHLONGERTHANSIXTYTHREECHARACTERS	54110F8D085BBBA7BB6DE5CE71B511562090F7EE	TABLE
+test-built-in-module_EntityTypeA	test-built-in-module_EntityTypeA	TABLE
+test-built-in-module_EntityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters	10B9F515756871D3EF6558FAF1F112BAE207945D	TABLE
+totalTilt	totalTilt	COLUMN
 \.
 
-COPY ties_model.module_reference("name", "namespace", "domain", "includedModules", "revision", "content", "ownerAppId", "status") FROM stdin;
-o-ran-smo-teiv-common-yang-extensions	urn:o-ran:smo-teiv-common-yang-extensions	\N	[]	2024-05-14	bW9kdWxlIG8tcmFuLXNtby10ZWl2LWNvbW1vbi15YW5nLWV4dGVuc2lvbnMgewogICAgeWFuZy12ZXJzaW9uIDEuMTsKICAgIG5hbWVzcGFjZSAidXJuOm8tcmFuOnNtby10ZWl2LWNvbW1vbi15YW5nLWV4dGVuc2lvbnMiOwogICAgcHJlZml4IG9yLXRlaXYteWV4dDsKCiAgICBvcmdhbml6YXRpb24gIk9SQU4iOwogICAgY29udGFjdCAiVGhlIEF1dGhvcnMiOwogICAgZGVzY3JpcHRpb24KICAgICJUb3BvbG9neSBhbmQgSW52ZW50b3J5IFlBTkcgZXh0ZW5zaW9ucyBtb2RlbC4KCiAgICBDb3B5cmlnaHQgKEMpIDIwMjQgRXJpY3Nzb24KICAgIE1vZGlmaWNhdGlvbnMgQ29weXJpZ2h0IChDKSAyMDI0IE9wZW5JbmZyYSBGb3VuZGF0aW9uIEV1cm9wZQoKICAgIFRoaXMgbW9kZWwgY29udGFpbnMgZXh0ZW5zaW9ucyB0byB0aGUgWUFORyBsYW5ndWFnZSB0aGF0IHRvcG9sb2d5IGFuZAogICAgaW52ZW50b3J5IG1vZGVscyB3aWxsIHVzZSB0byBkZWZpbmUgYW5kIGFubm90YXRlIHR5cGVzIGFuZCByZWxhdGlvbnNoaXBzLiI7CgogICAgcmV2aXNpb24gIjIwMjQtMDUtMTQiIHsKICAgICAgICBkZXNjcmlwdGlvbiAiSW5pdGlhbCByZXZpc2lvbi4iOwogICAgICAgIG9yLXRlaXYteWV4dDpsYWJlbCAwLjMuMDsKICAgIH0KCiAgICBleHRlbnNpb24gYmlEaXJlY3Rpb25hbFRvcG9sb2d5UmVsYXRpb25zaGlwIHsKICAgICAgICBkZXNjcmlwdGlvbgogICAgICAgICAgICAiRGVmaW5lcyBhIGJpLWRpcmVjdGlvbmFsIHJlbGF0aW9uc2hpcCBpbiB0aGUgdG9wb2xvZ3kuCgogICAgICAgICAgICBBIGJpLWRpcmVjdGlvbmFsLWFzc29jaWF0aW9uIChCREEpIGlzIGEgcmVsYXRpb25zaGlwIGNvbXByaXNpbmcgb2YgYW4KICAgICAgICAgICAgQS1zaWRlIGFuZCBhIEItc2lkZS4gVGhlIEEtc2lkZSBpcyBjb25zaWRlcmVkIHRoZSBvcmlnaW5hdGluZyBzaWRlIG9mCiAgICAgICAgICAgIHRoZSByZWxhdGlvbnNoaXA7IHRoZSBCLXNpZGUgaXMgY29uc2lkZXJlZCB0aGUgdGVybWluYXRpbmcgc2lkZSBvZiB0aGUKICAgICAgICAgICAgcmVsYXRpb25zaGlwLiBUaGUgb3JkZXIgb2YgQS1zaWRlIGFuZCBCLXNpZGUgaXMgb2YgaW1wb3J0YW5jZSBhbmQgTVVTVAogICAgICAgICAgICBOT1QgYmUgY2hhbmdlZCBvbmNlIGRlZmluZWQuCgogICAgICAgICAgICBCb3RoIEEtc2lkZSBhbmQgQi1zaWRlIGFyZSBkZWZpbmVkIG9uIGEgdHlwZSwgYW5kIGFyZSBnaXZlbiBhIHJvbGUuIEEKICAgICAgICAgICAgdHlwZSBtYXkgaGF2ZSBtdWx0aXBsZSBvcmlnaW5hdGluZyBhbmQvb3IgdGVybWluYXRpbmcgc2lkZXMgb2YgYQogICAgICAgICAgICByZWxhdGlvbnNoaXAsIGFsbCBkaXN0aW5ndWlzaGVkIGJ5IHJvbGUgbmFtZS4KCiAgICAgICAgICAgIFRoZSBzdGF0ZW1lbnQgTVVTVCBvbmx5IGJlIGEgc3Vic3RhdGVtZW50IG9mIHRoZSAnbW9kdWxlJyBzdGF0ZW1lbnQuCiAgICAgICAgICAgIE11bHRpcGxlICdiaS1kaXJlY3Rpb25hbC10b3BvbG9neS1yZWxhdGlvbnNoaXAnIHN0YXRlbWVudHMgYXJlIGFsbG93ZWQKICAgICAgICAgICAgcGVyIHBhcmVudCBzdGF0ZW1lbnQuCgogICAgICAgICAgICBTdWJzdGF0ZW1lbnRzIHRvIHRoZSAnYmktZGlyZWN0aW9uYWwtdG9wb2xvZ3ktcmVsYXRpb25zaGlwJyBkZWZpbmUgdGhlCiAgICAgICAgICAgIEEtc2lkZSBhbmQgdGhlIEItc2lkZSwgcmVzcGVjdGl2ZWx5LCBhbmQgb3B0aW9uYWxseSBwcm9wZXJ0aWVzIG9mIHRoZQogICAgICAgICAgICByZWxhdGlvbnNoaXAuIERhdGEgbm9kZXMgb2YgdHlwZXMgJ2xlYWYnIGFuZCAnbGVhZi1saXN0JyBhcmUgdXNlZCBmb3IKICAgICAgICAgICAgdGhpcyBwdXJwb3NlLiBPbmUgb2YgdGhlIGRhdGEgbm9kZXMgTVVTVCBiZSBhbm5vdGF0ZWQgd2l0aCB0aGUgJ2Etc2lkZScKICAgICAgICAgICAgZXh0ZW5zaW9uOyBhbm90aGVyIGRhdGEgbm9kZSBNVVNUIGJlIGFubm90YXRlZCB3aXRoIHRoZSAnYi1zaWRlJwogICAgICAgICAgICBleHRlbnNpb24uIE90aGVyIGRhdGEgbm9kZXMgZGVmaW5lIHByb3BlcnRpZXMgb2YgdGhlIHJlbGF0aW9uc2hpcC4KCiAgICAgICAgICAgIFRoZSBhcmd1bWVudCBpcyB0aGUgbmFtZSBvZiB0aGUgcmVsYXRpb25zaGlwLiBUaGUgcmVsYXRpb25zaGlwIG5hbWUgaXMKICAgICAgICAgICAgc2NvcGVkIHRvIHRoZSBuYW1lc3BhY2Ugb2YgdGhlIGRlY2xhcmluZyBtb2R1bGUgYW5kIE1VU1QgYmUgdW5pcXVlCiAgICAgICAgICAgIHdpdGhpbiB0aGUgc2NvcGUuIjsKCiAgICAgICAgYXJndW1lbnQgcmVsYXRpb25zaGlwTmFtZTsKICAgIH0KCiAgICBleHRlbnNpb24gYVNpZGUgewogICAgICAgIGRlc2NyaXB0aW9uCiAgICAgICAgICAgICJEZWZpbmVzIHRoZSBBLXNpZGUgb2YgYSByZWxhdGlvbnNoaXAuCgogICAgICAgICAgICBUaGUgc3RhdGVtZW50IE1VU1Qgb25seSBiZSBhIHN1YnN0YXRlbWVudCBvZiBhICdsZWFmJyBvciAnbGVhZi1saXN0JwogICAgICAgICAgICBzdGF0ZW1lbnQsIHdoaWNoIGl0c2VsZiBtdXN0IGJlIGEgc3Vic3RhdGVtZW50IG9mIHRoZQogICAgICAgICAgICAndW5pLWRpcmVjdGlvbmFsLXRvcG9sb2d5LXJlbGF0aW9uc2hpcCcgc3RhdGVtZW50LgoKICAgICAgICAgICAgVGhlIGRhdGEgdHlwZSBvZiB0aGUgcGFyZW50ICdsZWFmJyBvciAnbGVhZi1saXN0JyBNVVNUIGJlCiAgICAgICAgICAgICdpbnN0YW5jZS1pZGVudGlmaWVyJy4gQ29uc3RyYWludHMgTUFZIGJlIHVzZWQgYXMgcGFydCBvZiB0aGUgcGFyZW50CiAgICAgICAgICAgICdsZWFmJyBvciAnbGVhZi1saXN0JyB0byBlbmZvcmNlIGNhcmRpbmFsaXR5LgoKICAgICAgICAgICAgVGhlIGlkZW50aWZpZXIgb2YgdGhlIHBhcmVudCAnbGVhZicgb3IgJ2xlYWYtbGlzdCcgaXMgdXNlZCBhcyBuYW1lIG9mCiAgICAgICAgICAgIHRoZSByb2xlIG9mIHRoZSBBLXNpZGUgb2YgdGhlIHJlbGF0aW9uc2hpcC4gVGhlIG5hbWUgb2YgdGhlIHJvbGUgaXMKICAgICAgICAgICAgc2NvcGVkIHRvIHRoZSB0eXBlIG9uIHdoaWNoIHRoZSBBLXNpZGUgaXMgZGVmaW5lZCBhbmQgTVVTVCBiZSB1bmlxdWUKICAgICAgICAgICAgd2l0aGluIHRoZSBzY29wZS4KCiAgICAgICAgICAgIFdoaWxlIHRoZSBwYXJlbnQgJ2xlYWYnIG9yICdsZWFmLWxpc3QnIGRvZXMgbm90IHJlc3VsdCBpbiBhIHByb3BlcnR5IG9mCiAgICAgICAgICAgIHRoZSByZWxhdGlvbnNoaXAsIGl0IGlzIFJFQ09NTUVOREVEIHRvIGF2b2lkIHVzaW5nIHRoZSBuYW1lIG9mIGFuCiAgICAgICAgICAgIGV4aXN0aW5nIHR5cGUgcHJvcGVydHkgYXMgcm9sZSBuYW1lIHRvIGF2b2lkIHBvdGVudGlhbCBhbWJpZ3VpdGllcwogICAgICAgICAgICBiZXR3ZWVuIHByb3BlcnRpZXMgb2YgYSB0eXBlLCBhbmQgcm9sZXMgb2YgYSByZWxhdGlvbnNoaXAgb24gdGhlIHR5cGUuCgogICAgICAgICAgICBUaGUgYXJndW1lbnQgaXMgdGhlIG5hbWUgb2YgdGhlIHR5cGUgb24gd2hpY2ggdGhlIEEtc2lkZSByZXNpZGVzLiBJZiB0aGUKICAgICAgICAgICAgdHlwZSBpcyBkZWNsYXJlZCBpbiBhbm90aGVyIG1vZHVsZSwgdGhlIHR5cGUgbXVzdCBiZSBwcmVmaXhlZCwgYW5kIGEKICAgICAgICAgICAgY29ycmVzcG9uZGluZyAnaW1wb3J0JyBzdGF0ZW1lbnQgYmUgdXNlZCB0byBkZWNsYXJlIHRoZSBwcmVmaXguIjsKCiAgICAgICAgYXJndW1lbnQgYVNpZGVUeXBlOwogICAgfQoKICAgIGV4dGVuc2lvbiBiU2lkZSB7CiAgICAgICAgZGVzY3JpcHRpb24KICAgICAgICAgICAgIkRlZmluZXMgdGhlIEItc2lkZSBvZiBhIHJlbGF0aW9uc2hpcC4KCiAgICAgICAgICAgIFRoZSBzdGF0ZW1lbnQgTVVTVCBvbmx5IGJlIGEgc3Vic3RhdGVtZW50IG9mIGEgJ2xlYWYnIG9yICdsZWFmLWxpc3QnCiAgICAgICAgICAgIHN0YXRlbWVudCwgd2hpY2ggaXRzZWxmIG11c3QgYmUgYSBzdWJzdGF0ZW1lbnQgb2YgdGhlCiAgICAgICAgICAgICd1bmktZGlyZWN0aW9uYWwtdG9wb2xvZ3ktcmVsYXRpb25zaGlwJyBzdGF0ZW1lbnQuCgogICAgICAgICAgICBUaGUgZGF0YSB0eXBlIG9mIHRoZSBwYXJlbnQgJ2xlYWYnIG9yICdsZWFmLWxpc3QnIE1VU1QgYmUKICAgICAgICAgICAgJ2luc3RhbmNlLWlkZW50aWZpZXInLiBDb25zdHJhaW50cyBNQVkgYmUgdXNlZCBhcyBwYXJ0IG9mIHRoZSBwYXJlbnQKICAgICAgICAgICAgJ2xlYWYnIG9yICdsZWFmLWxpc3QnIHRvIGVuZm9yY2UgY2FyZGluYWxpdHkuCgogICAgICAgICAgICBUaGUgaWRlbnRpZmllciBvZiB0aGUgcGFyZW50ICdsZWFmJyBvciAnbGVhZi1saXN0JyBpcyB1c2VkIGFzIG5hbWUgb2YKICAgICAgICAgICAgdGhlIHJvbGUgb2YgdGhlIEItc2lkZSBvZiB0aGUgcmVsYXRpb25zaGlwLiBUaGUgbmFtZSBvZiB0aGUgcm9sZSBpcwogICAgICAgICAgICBzY29wZWQgdG8gdGhlIHR5cGUgb24gd2hpY2ggdGhlIEItc2lkZSBpcyBkZWZpbmVkIGFuZCBNVVNUIGJlIHVuaXF1ZQogICAgICAgICAgICB3aXRoaW4gdGhlIHNjb3BlLgoKICAgICAgICAgICAgV2hpbGUgdGhlIHBhcmVudCAnbGVhZicgb3IgJ2xlYWYtbGlzdCcgZG9lcyBub3QgcmVzdWx0IGluIGEgcHJvcGVydHkgb2YKICAgICAgICAgICAgdGhlIHJlbGF0aW9uc2hpcCwgaXQgaXMgUkVDT01NRU5ERUQgdG8gYXZvaWQgdXNpbmcgdGhlIG5hbWUgb2YgYW4KICAgICAgICAgICAgZXhpc3RpbmcgdHlwZSBwcm9wZXJ0eSBhcyByb2xlIG5hbWUgdG8gYXZvaWQgcG90ZW50aWFsIGFtYmlndWl0aWVzCiAgICAgICAgICAgIGJldHdlZW4gcHJvcGVydGllcyBvZiBhIHR5cGUsIGFuZCByb2xlcyBvZiBhIHJlbGF0aW9uc2hpcCBvbiB0aGUgdHlwZS4KCiAgICAgICAgICAgIFRoZSBhcmd1bWVudCBpcyB0aGUgbmFtZSBvZiB0aGUgdHlwZSBvbiB3aGljaCB0aGUgQi1zaWRlIHJlc2lkZXMuIElmIHRoZQogICAgICAgICAgICB0eXBlIGlzIGRlY2xhcmVkIGluIGFub3RoZXIgbW9kdWxlLCB0aGUgdHlwZSBtdXN0IGJlIHByZWZpeGVkLCBhbmQgYQogICAgICAgICAgICBjb3JyZXNwb25kaW5nICdpbXBvcnQnIHN0YXRlbWVudCBiZSB1c2VkIHRvIGRlY2xhcmUgdGhlIHByZWZpeC4iOwoKICAgICAgICBhcmd1bWVudCBiU2lkZVR5cGU7CiAgICB9CgogICAgZXh0ZW5zaW9uIGRvbWFpbiB7CiAgICAgICAgZGVzY3JpcHRpb24gIktleXdvcmQgdXNlZCB0byBjYXJyeSBkb21haW4gaW5mb3JtYXRpb24uIjsKICAgICAgICBhcmd1bWVudCBkb21haW5OYW1lOwogICAgfQoKICAgIGV4dGVuc2lvbiBsYWJlbCB7CiAgICAgICAgZGVzY3JpcHRpb24KICAgICAgICAgICAgIlRoZSBsYWJlbCBjYW4gYmUgdXNlZCB0byBnaXZlIG1vZHVsZXMgYW5kIHN1Ym1vZHVsZXMgYSBzZW1hbnRpYyB2ZXJzaW9uLCBpbiBhZGRpdGlvbiB0byB0aGVpciByZXZpc2lvbi4KCiAgICAgICAgICAgIFRoZSBmb3JtYXQgb2YgdGhlIGxhYmVsIGlzIOKAmHgueS564oCZIOKAkyBleHByZXNzZWQgYXMgcGF0dGVybiwgaXQgaXMgWzAtOV0rXFwuWzAtOV0rXFwuWzAtOV0rCgogICAgICAgICAgICBUaGUgc3RhdGVtZW50IE1VU1Qgb25seSBiZSBhIHN1YnN0YXRlbWVudCBvZiB0aGUgcmV2aXNpb24gc3RhdGVtZW50LiAgWmVybyBvciBvbmUgcmV2aXNpb24gbGFiZWwgc3RhdGVtZW50cwogICAgICAgICAgICBwZXIgcGFyZW50IHN0YXRlbWVudCBhcmUgYWxsb3dlZC4KCiAgICAgICAgICAgIFJldmlzaW9uIGxhYmVscyBNVVNUIGJlIHVuaXF1ZSBhbW9uZ3N0IGFsbCByZXZpc2lvbnMgb2YgYSBtb2R1bGUgb3Igc3VibW9kdWxlLiI7CgogICAgICAgIGFyZ3VtZW50IHNlbXZlcnNpb247CiAgICB9Cn0=	BUILT_IN_MODULE	IN_USAGE
-o-ran-smo-teiv-common-yang-types	urn:o-ran:smo-teiv-common-yang-types	\N	[]	2024-05-14	bW9kdWxlIG8tcmFuLXNtby10ZWl2LWNvbW1vbi15YW5nLXR5cGVzIHsKCiAgICB5YW5nLXZlcnNpb24gMS4xOwogICAgbmFtZXNwYWNlICJ1cm46by1yYW46c21vLXRlaXYtY29tbW9uLXlhbmctdHlwZXMiOwogICAgcHJlZml4IG9yLXRlaXYtdHlwZXM7CgogICAgaW1wb3J0IG8tcmFuLXNtby10ZWl2LWNvbW1vbi15YW5nLWV4dGVuc2lvbnMgeyBwcmVmaXggb3ItdGVpdi15ZXh0OyB9CgogICAgaW1wb3J0IF8zZ3BwLWNvbW1vbi15YW5nLXR5cGVzIHsgcHJlZml4IHR5cGVzM2dwcDsgfQoKICBvcmdhbml6YXRpb24gIk9SQU4iOwogIGNvbnRhY3QgIlRoZSBBdXRob3JzIjsKICAgIGRlc2NyaXB0aW9uCiAgICAiVG9wb2xvZ3kgYW5kIEludmVudG9yeSBjb21tb24gdHlwZXMgbW9kZWwuCgogIENvcHlyaWdodCAoQykgMjAyNCBFcmljc3NvbgogIE1vZGlmaWNhdGlvbnMgQ29weXJpZ2h0IChDKSAyMDI0IE9wZW5JbmZyYSBGb3VuZGF0aW9uIEV1cm9wZQoKICAgIFRoaXMgbW9kZWwgY29udGFpbnMgcmUtdXNhYmxlIGRhdGEgdHlwZXMgdGhhdCB0b3BvbG9neSBhbmQgaW52ZW50b3J5IG1vZGVscwogICAgd2lsbCBmcmVxdWVudGx5IHVzZSBhcyBwYXJ0IG9mIHR5cGVzIGFuZCByZWxhdGlvbnNoaXBzLiI7CgogICAgcmV2aXNpb24gIjIwMjQtMDUtMTQiIHsKICAgICAgICBkZXNjcmlwdGlvbiAiSW5pdGlhbCByZXZpc2lvbi4iOwogICAgICAgIG9yLXRlaXYteWV4dDpsYWJlbCAwLjMuMDsKICAgIH0KCiAgICBncm91cGluZyBUb3BfR3JwX1R5cGUgewogICAgICAgIGRlc2NyaXB0aW9uICJHcm91cGluZyBjb250YWluaW5nIHRoZSBrZXkgYXR0cmlidXRlIGNvbW1vbiB0byBhbGwgdHlwZXMuIEFsbCB0eXBlcwogICAgICAgICAgICAgICAgICAgIE1VU1QgdXNlIHRoaXMgZ3JvdXBpbmcuIjsKCiAgICAgICAgbGVhZiBpZCB7CiAgICAgICAgICAgIHR5cGUgc3RyaW5nOwogICAgICAgICAgICBkZXNjcmlwdGlvbiAiVW5pcXVlIGlkZW50aWZpZXIgb2YgdG9wb2xvZ3kgZW50aXRpZXMuIFJlcHJlc2VudHMgdGhlIEVudGl0eSBJbnN0YW5jZSBJZGVudGlmaWVyLiI7CiAgICAgICAgfQogICAgfQoKICAgIGNvbnRhaW5lciBkZWNvcmF0b3JzIHsKICAgICAgICBkZXNjcmlwdGlvbiAiVGhpcyBjb250YWluZXIgc2VydmVzIGFzIGV4dGVuc2lvbiBwb2ludCBmb3IgYXBwbGljYXRpb25zIHdpc2hpbmcgdG8gZGVmaW5lIHRoZWlyIG93biBkZWNvcmF0b3JzLgogICAgICAgICAgICAgICAgICAgIFRoaXMgaXMgZG9uZSB2aWEgYXVnbWVudGF0aW9ucy4gVGhleSBjYW4gb25seSBiZSBkZWZpbmVkIGluIG5hbWUgdmFsdWUgcGFpci4KCiAgICAgICAgICAgICAgICAgICAgVGhpcyBpcyBhIGNvbnN1bWVyIGRhdGEgYW5kIGNhbiBiZSBhdHRhY2hlZCB0byBUb3BvbG9neSBFbnRpdHkgb3IgVG9wb2xvZ3kgUmVsYXRpb24gaW5zdGFuY2UsCiAgICAgICAgICAgICAgICAgICAgb3V0c2lkZSBvZiB0aGUgZGVjbGFyZWQgVG9wb2xvZ3kgRW50aXR5IG9yIFRvcG9sb2d5IFJlbGF0aW9uc2hpcCdzIGF0dHJpYnV0ZXMuIFRoaXMgY2Fubm90IGJlCiAgICAgICAgICAgICAgICAgICAgaW5zdGFudGlhdGVkLCBhbmQgaXQgTVVTVCBOT1QgYmUgYXVnbWVudGVkIG9yIGRldmlhdGVkIGluIGFueSB3YXksIHVubGVzcyBzdGF0ZWQgb3RoZXJ3aXNlLiI7CiAgICB9CgogICAgbGVhZi1saXN0IGNsYXNzaWZpZXJzIHsKICAgICAgICBkZXNjcmlwdGlvbiAiQ29uc3VtZXIgZGVmaW5lZCB0YWdzIHRvIHRvcG9sb2d5IGVudGl0aWVzIGFuZCByZWxhdGlvbnNoaXBzLgoKICAgICAgICAgICAgICAgICAgICBUaGlzIGlzIGEgY29uc3VtZXIgZGF0YSBhbmQgY2FuIGJlIGF0dGFjaGVkIHRvIFRvcG9sb2d5IEVudGl0eSBvciBUb3BvbG9neSBSZWxhdGlvbiBpbnN0YW5jZSwKICAgICAgICAgICAgICAgICAgICBvdXRzaWRlIG9mIHRoZSBkZWNsYXJlZCBUb3BvbG9neSBFbnRpdHkgb3IgVG9wb2xvZ3kgUmVsYXRpb25zaGlwJ3MgYXR0cmlidXRlcy4gVGhpcyBjYW5ub3QgYmUKICAgICAgICAgICAgICAgICAgICBpbnN0YW50aWF0ZWQsIGFuZCBpdCBNVVNUIE5PVCBiZSBhdWdtZW50ZWQgb3IgZGV2aWF0ZWQgaW4gYW55IHdheSwgdW5sZXNzIHN0YXRlZCBvdGhlcndpc2UuIjsKCiAgICAgICAgdHlwZSBpZGVudGl0eXJlZiB7IGJhc2UgY2xhc3NpZmllcjsgfQogICAgfQoKICAgIGxlYWYtbGlzdCBzb3VyY2VJZHMgewogICAgICAgIGRlc2NyaXB0aW9uICJBbiBvcmRlcmVkIGxpc3Qgb2YgaWRlbnRpdGllcyB0aGF0IHJlcHJlc2VudCB0aGUgc2V0IG9mIG5hdGl2ZSBzb3VyY2UgaWRlbnRpZmllcnMgZm9yIHBhcnRpY2lwYXRpbmcKICAgICAgICAgICAgICAgICAgICBlbnRpdGllcy4KCiAgICAgICAgICAgICAgICAgICAgVGhpcyBpcyBhIGNvbnN1bWVyIGRhdGEgYW5kIGNhbiBiZSBhdHRhY2hlZCB0byBUb3BvbG9neSBFbnRpdHkgb3IgVG9wb2xvZ3kgUmVsYXRpb24gaW5zdGFuY2UsCiAgICAgICAgICAgICAgICAgICAgb3V0c2lkZSBvZiB0aGUgZGVjbGFyZWQgVG9wb2xvZ3kgRW50aXR5IG9yIFRvcG9sb2d5IFJlbGF0aW9uc2hpcCdzIGF0dHJpYnV0ZXMuIFRoaXMgY2Fubm90IGJlCiAgICAgICAgICAgICAgICAgICAgaW5zdGFudGlhdGVkLCBhbmQgaXQgTVVTVCBOT1QgYmUgYXVnbWVudGVkIG9yIGRldmlhdGVkIGluIGFueSB3YXksIHVubGVzcyBzdGF0ZWQgb3RoZXJ3aXNlLiI7CgogICAgICAgIHR5cGUgc3RyaW5nOwogICAgICAgIG9yZGVyZWQtYnkgdXNlcjsKICAgIH0KCiAgICBjb250YWluZXIgbWV0YWRhdGEgewogICAgICAgIGRlc2NyaXB0aW9uICJUaGlzIGNvbnRhaW5lciBzZXJ2ZXMgYXMgZXh0ZW5zaW9uIHBvaW50IHRvIGRlZmluZSBtZXRhZGF0YS4gVGhleSBjYW4gb25seSBiZSBkZWZpbmVkIGluIG5hbWUgdmFsdWUKICAgICAgICAgICAgICAgICAgICBwYWlyLgoKICAgICAgICAgICAgICAgICAgICBUaGlzIGlzIGEgY29uc3VtZXIgZGF0YSBhbmQgY2FuIGJlIGF0dGFjaGVkIHRvIFRvcG9sb2d5IEVudGl0eSBvciBUb3BvbG9neSBSZWxhdGlvbiBpbnN0YW5jZSwKICAgICAgICAgICAgICAgICAgICBvdXRzaWRlIG9mIHRoZSBkZWNsYXJlZCBUb3BvbG9neSBFbnRpdHkgb3IgVG9wb2xvZ3kgUmVsYXRpb25zaGlwJ3MgYXR0cmlidXRlcy4gVGhpcyBjYW5ub3QgYmUKICAgICAgICAgICAgICAgICAgICBpbnN0YW50aWF0ZWQsIGFuZCBpdCBNVVNUIE5PVCBiZSBhdWdtZW50ZWQgb3IgZGV2aWF0ZWQgaW4gYW55IHdheSwgdW5sZXNzIHN0YXRlZCBvdGhlcndpc2UuIjsKICAgIH0KCiAgICBpZGVudGl0eSBjbGFzc2lmaWVyewogICAgICAgIGRlc2NyaXB0aW9uICAiVGhlIGNsYXNzaWZpZXIgaXMgdXNlZCBhcyBhIGJhc2UgdG8gcHJvdmlkZSBhbGwgY2xhc3NpZmllcnMgd2l0aCBpZGVudGl0eS4gIjsKICAgIH0KfQ==	BUILT_IN_MODULE	IN_USAGE
-o-ran-smo-teiv-ran	urn:o-ran:smo-teiv-ran	RAN	[]	2024-05-14	bW9kdWxlIG8tcmFuLXNtby10ZWl2LXJhbiB7CiAgICB5YW5nLXZlcnNpb24gMS4xOwogICAgbmFtZXNwYWNlICJ1cm46by1yYW46c21vLXRlaXYtcmFuIjsKICAgIHByZWZpeCBvci10ZWl2LXJhbjsKCiAgICBpbXBvcnQgby1yYW4tc21vLXRlaXYtY29tbW9uLXlhbmctdHlwZXMge3ByZWZpeCBvci10ZWl2LXR5cGVzOyB9CgogICAgaW1wb3J0IG8tcmFuLXNtby10ZWl2LWNvbW1vbi15YW5nLWV4dGVuc2lvbnMge3ByZWZpeCBvci10ZWl2LXlleHQ7IH0KCiAgICBpbXBvcnQgXzNncHAtY29tbW9uLXlhbmctdHlwZXMgeyBwcmVmaXggdHlwZXMzZ3BwOyB9CgogICAgb3JnYW5pemF0aW9uICJPUkFOIjsKICAgIGNvbnRhY3QgIk9SQU4gZmlyc3QgbGluZSBzdXBwb3J0IHZpYSBlbWFpbCI7CiAgICBkZXNjcmlwdGlvbgogICAgIlJBTiBMb2dpY2FsIHRvcG9sb2d5IG1vZGVsLgoKICAgIENvcHlyaWdodCAoQykgMjAyNCBFcmljc3NvbgogICAgTW9kaWZpY2F0aW9ucyBDb3B5cmlnaHQgKEMpIDIwMjQgT3BlbkluZnJhIEZvdW5kYXRpb24gRXVyb3BlCgogICAgVGhpcyBtb2RlbCBjb250YWlucyB0aGUgdG9wb2xvZ3kgZW50aXRpZXMgYW5kIHJlbGF0aW9ucyBpbiB0aGUKICAgIFJBTiBkb21haW4sIHdoaWNoIHJlcHJlc2VudHMgdGhlIGZ1bmN0aW9uYWwgY2FwYWJpbGl0eQogICAgb2YgdGhlIGRlcGxveWVkIFJBTiB0aGF0IGFyZSByZWxldmFudCB0byByQXBwcyB1c2UgY2FzZXMuIjsKCiAgICByZXZpc2lvbiAiMjAyNC0wNS0xNCIgewogICAgICAgIGRlc2NyaXB0aW9uICJJbml0aWFsIHJldmlzaW9uLiI7CiAgICAgICAgb3ItdGVpdi15ZXh0OmxhYmVsIDAuMy4wOwogICAgfQoKICAgIG9yLXRlaXYteWV4dDpkb21haW4gUkFOOwoKICAgIGxpc3QgR05CRFVGdW5jdGlvbiB7CiAgICAgICAgZGVzY3JpcHRpb24gImdOb2RlQiBEaXN0cmlidXRlZCBVbml0IChnTkItRFUpLgoKICAgICAgICAgICAgICAgICAgICBBIGdOQiBtYXkgY29uc2lzdCBvZiBhIGdOQi1DZW50cmFsaXplZCBVbml0CiAgICAgICAgICAgICAgICAgICAgKGdOQi1DVSkgYW5kIGEgZ05CLURVLiBUaGUgQ1UgcHJvY2Vzc2VzIG5vbi1yZWFsCiAgICAgICAgICAgICAgICAgICAgdGltZSBwcm90b2NvbHMgYW5kIHNlcnZpY2VzLCBhbmQgdGhlIERVIHByb2Nlc3NlcwogICAgICAgICAgICAgICAgICAgIFBIWSBsZXZlbCBwcm90b2NvbCBhbmQgcmVhbCB0aW1lIHNlcnZpY2VzLiBUaGUKICAgICAgICAgICAgICAgICAgICBnTkItQ1UgYW5kIHRoZSBnTkItRFUgdW5pdHMgYXJlIGNvbm5lY3RlZCB2aWEKICAgICAgICAgICAgICAgICAgICBGMSBsb2dpY2FsIGludGVyZmFjZS4KCiAgICAgICAgICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBpcyB0cnVlIGZvciBhIGdOQi1EVToKICAgICAgICAgICAgICAgICAgICBJcyBjb25uZWN0ZWQgdG8gdGhlIGdOQi1DVS1DUCB0aHJvdWdoIHRoZSBGMS1DCiAgICAgICAgICAgICAgICAgICAgaW50ZXJmYWNlLklzIGNvbm5lY3RlZCB0byB0aGUgZ05CLUNVLVVQIHRocm91Z2gKICAgICAgICAgICAgICAgICAgICB0aGUgRjEtVSBpbnRlcmZhY2UuIE9uZSBnTkItRFUgaXMgY29ubmVjdGVkIHRvIG9ubHkKICAgICAgICAgICAgICAgICAgICBvbmUgZ05CLUNVLUNQLiBPbmUgZ05CLURVIGNhbiBiZSBjb25uZWN0ZWQgdG8KICAgICAgICAgICAgICAgICAgICBtdWx0aXBsZSBnTkItQ1UtVVBzIHVuZGVyIHRoZSBjb250cm9sIG9mIHRoZSBzYW1lCiAgICAgICAgICAgICAgICAgICAgZ05CLUNVLUNQLgogICAgICAgICAgICAgICAgICAgIE5vdGU6IEEgZ05CIG1heSBjb25zaXN0IG9mIGEgZ05CLUNVLUNQLCBtdWx0aXBsZQogICAgICAgICAgICAgICAgICAgIGdOQi1DVS1VUHMgYW5kIG11bHRpcGxlIGdOQi1EVXMuIGdOQi1EVSBpcyBhIGNvbmNyZXRlCiAgICAgICAgICAgICAgICAgICAgY2xhc3MgdGhhdCBleHRlbmRzIHRoZSBORy1SQU4gbm9kZSBvYmplY3QuIEluIFRvcG9sb2d5LCB5b3UKICAgICAgICAgICAgICAgICAgICBjYW4gY3JlYXRlLCByZWFkLCB1cGRhdGUsIGFuZCBkZWxldGUgdGhlIGdOQi1EVSBvYmplY3QuIjsKCiAgICAgICAgdXNlcyBvci10ZWl2LXR5cGVzOlRvcF9HcnBfVHlwZTsKICAgICAgICBrZXkgaWQ7CgogICAgICAgIGNvbnRhaW5lciBhdHRyaWJ1dGVzIHsKICAgICAgICAgICAgY29udGFpbmVyIGRVcExNTklkIHsKICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICJQTE1OIGlkZW50aWZpZXIgdXNlZCBhcyBwYXJ0IG9mIFBNIEV2ZW50cyBkYXRhIjsKICAgICAgICAgICAgICAgIHVzZXMgdHlwZXMzZ3BwOlBMTU5JZDsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgbGVhZiBnTkJEVUlkIHsKICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICJVbmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIERVIHdpdGhpbiBhIGdOb2RlQiI7CiAgICAgICAgICAgICAgICB0eXBlIHVpbnQzMjsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgbGVhZiBnTkJJZCB7CiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiAiSWRlbnRpdHkgb2YgZ05vZGVCIHdpdGhpbiBhIFBMTU4iOwogICAgICAgICAgICAgICAgdHlwZSB1aW50MzI7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGxlYWYgZ05CSWRMZW5ndGggewogICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIkxlbmd0aCBvZiBnTkJJZCBiaXQgc3RyaW5nIHJlcHJlc2VudGF0aW9uIjsKICAgICAgICAgICAgICAgIHR5cGUgdWludDMyOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIGxpc3QgRU5vZGVCRnVuY3Rpb24gewogICAgICAgIGRlc2NyaXB0aW9uICJBbiBFdm9sdmVkIE5vZGUgQiAoZU5vZGVCKSBpcyB0aGUgb25seSBtYW5kYXRvcnkKICAgICAgICAgICAgICAgICAgICBub2RlIGluIHRoZSByYWRpbyBhY2Nlc3MgbmV0d29yayAoUkFOKSBvZiBMb25nLVRlcm0KICAgICAgICAgICAgICAgICAgICBFdm9sdXRpb24gKExURSkuIFRoZSBlTm9kZUIgaXMgYSBjb21wbGV4IGJhc2UKICAgICAgICAgICAgICAgICAgICBzdGF0aW9uIHRoYXQgaGFuZGxlcyByYWRpbyBjb21tdW5pY2F0aW9ucwogICAgICAgICAgICAgICAgICAgIGluIHRoZSBjZWxsIGFuZCBjYXJyaWVzIG91dCByYWRpbyByZXNvdXJjZQogICAgICAgICAgICAgICAgICAgIG1hbmFnZW1lbnQgYW5kIGhhbmRvdmVyIGRlY2lzaW9ucy4gVW5saWtlIDIvM0cKICAgICAgICAgICAgICAgICAgICB3aXJlbGVzcyBSQU4sIHRoZXJlIGlzIG5vIGNlbnRyYWxpemVkIHJhZGlvIG5ldHdvcmsKICAgICAgICAgICAgICAgICAgICBjb250cm9sbGVyIGluIExURS4gSXQgaXMgdGhlIGhhcmR3YXJlIHRoYXQgaXMgY29ubmVjdGVkCiAgICAgICAgICAgICAgICAgICAgdG8gdGhlIG1vYmlsZSBwaG9uZSBuZXR3b3JrIHRoYXQgY29tbXVuaWNhdGVzCiAgICAgICAgICAgICAgICAgICAgZGlyZWN0bHkgd2l0aCBtb2JpbGUgaGFuZHNldHMgKFVzZXIgRXF1aXBtZW50KSwgbGlrZSBhIGJhc2UKICAgICAgICAgICAgICAgICAgICB0cmFuc2NlaXZlciBzdGF0aW9uIChCVFMpIGluIEdTTSBuZXR3b3Jrcy4gVGhpcyBzaW1wbGlmaWVzCiAgICAgICAgICAgICAgICAgICAgdGhlIGFyY2hpdGVjdHVyZSBhbmQgYWxsb3dzIGxvd2VyIHJlc3BvbnNlIHRpbWVzLiI7CgogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpUb3BfR3JwX1R5cGU7CiAgICAgICAga2V5IGlkOwoKICAgICAgICBjb250YWluZXIgYXR0cmlidXRlcyB7CiAgICAgICAgICAgIGxlYWYgZU5CSWQgewogICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIlRoZSBFTm9kZUIgSUQgdGhhdCBmb3JtcyBwYXJ0IG9mCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgQ2VsbCBHbG9iYWwgSWRlbnRpdHksIGFuZCBpcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxzbyB1c2VkIHRvIGlkZW50aWZ5IHRoZSBub2RlIG92ZXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBTMSBpbnRlcmZhY2UiOwogICAgICAgICAgICAgICAgdHlwZSB1aW50MzI7CiAgICAgICAgICAgICAgICBkZWZhdWx0IDExOwogICAgICAgICAgICB9CgogICAgICAgICAgICBjb250YWluZXIgZU5vZGVCUGxtbklkIHsKICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICJUaGUgRU5vZGVCIFB1YmxpYyBMYW5kIE1vYmlsZSBOZXR3b3JrCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoUExNTikgSUQgdGhhdCBmb3JtcyBwYXJ0IG9mIHRoZSBFTm9kZUIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdsb2JhbCBJRCB1c2VkIHRvIGlkZW50aWZ5IHRoZSBub2RlIG92ZXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBTMSBpbnRlcmZhY2UuIE5vdGU6IFRoZSB2YWx1ZSAoTUNDPTAwMSwgTU5DPTAxKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kaWNhdGVzIHRoYXQgdGhlIFBMTU4gaXMgbm90IGluaXRpYXRlZC4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSB2YWx1ZSBjYW4gbm90IGJlIHVzZWQgYXMgYSB2YWxpZCBQTE1OIElkZW50aXR5LiI7CgogICAgICAgICAgICAgICAgbGVhZiBtY2MgewogICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICJUaGUgTUNDIHBhcnQgb2YgYSBQTE1OIGlkZW50aXR5CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlZCBpbiB0aGUgcmFkaW8gbmV0d29yay4iOwogICAgICAgICAgICAgICAgICAgIHR5cGUgaW50MzIgewogICAgICAgICAgICAgICAgICAgICAgICByYW5nZSAwLi45OTk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgbGVhZiBtbmMgewogICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICJUaGUgTU5DIHBhcnQgb2YgYSBQTE1OIGlkZW50aXR5CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlZCBpbiB0aGUgcmFkaW8gbmV0d29yay4iOwogICAgICAgICAgICAgICAgICAgIHR5cGUgaW50MzIgewogICAgICAgICAgICAgICAgICAgICAgICByYW5nZSAwLi45OTk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgbGVhZiBtbmNMZW5ndGggewogICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICJUaGUgbGVuZ3RoIG9mIHRoZSBNTkMgcGFydCBvZiBhCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUExNTiBpZGVudGl0eSB1c2VkIGluIHRoZSByYWRpbyBuZXR3b3JrLiI7CiAgICAgICAgICAgICAgICAgICAgdHlwZSBpbnQzMiB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlIDIuLjM7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIGxpc3QgQW50ZW5uYUNhcGFiaWxpdHkgewogICAgICAgIGRlc2NyaXB0aW9uICJUaGlzIE1PIHNlcnZlcyBhcyBhIG1hcHBpbmcgYmV0d2VlbiB0aGUgY2VsbAogICAgICAgICAgICAgICAgICAgIGFuZCB0aGUgUkJTIGVxdWlwbWVudCB1c2VkIHRvIHByb3ZpZGUgY292ZXJhZ2UKICAgICAgICAgICAgICAgICAgICBpbiBhIGNlcnRhaW4gZ2VvZ3JhcGhpY2FsIGFyZWEuIFRoZSBNTyBhbHNvCiAgICAgICAgICAgICAgICAgICAgY29udHJvbHMgdGhlIG1heGltdW0gb3V0cHV0IHBvd2VyIG9mIHRoZSBzZWN0b3IuIjsKCiAgICAgICAgdXNlcyBvci10ZWl2LXR5cGVzOlRvcF9HcnBfVHlwZTsKICAgICAgICBrZXkgaWQ7CgogICAgICAgIGNvbnRhaW5lciBhdHRyaWJ1dGVzIHsKICAgICAgICAgICAgbGVhZi1saXN0IGVVdHJhbkZxQmFuZHMgewogICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIkxpc3Qgb2YgTFRFIGZyZXF1ZW5jeSBiYW5kcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhhdCBhc3NvY2lhdGVkIGhhcmR3YXJlIHN1cHBvcnRzIjsKICAgICAgICAgICAgICAgIHR5cGUgc3RyaW5nOwogICAgICAgICAgICB9CgogICAgICAgICAgICBsZWFmLWxpc3QgZ2VyYW5GcUJhbmRzIHsKICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICJMaXN0IG9mIEdFUkFOIGZyZXF1ZW5jeSBiYW5kcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhhdCBhc3NvY2lhdGVkIGhhcmR3YXJlIHN1cHBvcnRzIjsKICAgICAgICAgICAgICAgIHR5cGUgc3RyaW5nOwogICAgICAgICAgICB9CgogICAgICAgICAgICBsZWFmLWxpc3QgblJGcUJhbmRzIHsKICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICJMaXN0IG9mIE5SIGZyZXF1ZW5jeSBiYW5kcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNzb2NpYXRlZCBoYXJkd2FyZSBzdXBwb3J0cyI7CiAgICAgICAgICAgICAgICB0eXBlIHN0cmluZzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICBsaXN0IExURVNlY3RvckNhcnJpZXIgewogICAgICAgIGRlc2NyaXB0aW9uICJUaGUgTFRFIFNlY3RvciBDYXJyaWVyIG9iamVjdCBwcm92aWRlcyB0aGUKICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzIGZvciBkZWZpbmluZyB0aGUgbG9naWNhbCBjaGFyYWN0ZXJpc3RpY3MKICAgICAgICAgICAgICAgICAgICBvZiBhIGNhcnJpZXIgKGNlbGwpIGluIGEgc2VjdG9yLiBBIHNlY3RvciBpcyBhIGNvdmVyYWdlCiAgICAgICAgICAgICAgICAgICAgYXJlYSBhc3NvY2lhdGVkIHdpdGggYSBiYXNlIHN0YXRpb24gaGF2aW5nCiAgICAgICAgICAgICAgICAgICAgaXRzIG93biBhbnRlbm5hcywgcmFkaW8gcG9ydHMsIGFuZCBjb250cm9sIGNoYW5uZWxzLgogICAgICAgICAgICAgICAgICAgIFRoZSBjb25jZXB0IG9mIHNlY3RvcnMgd2FzIGRldmVsb3BlZCB0byBpbXByb3ZlIGNvLWNoYW5uZWwKICAgICAgICAgICAgICAgICAgICBpbnRlcmZlcmVuY2UgaW4gY2VsbHVsYXIgc3lzdGVtcywgYW5kIG1vc3Qgd2lyZWxlc3Mgc3lzdGVtcwogICAgICAgICAgICAgICAgICAgIHVzZSB0aHJlZSBzZWN0b3IgY2VsbHMuIjsKCiAgICAgICAgdXNlcyBvci10ZWl2LXR5cGVzOlRvcF9HcnBfVHlwZTsKICAgICAgICBrZXkgaWQ7CgogICAgICAgIGNvbnRhaW5lciBhdHRyaWJ1dGVzIHsKICAgICAgICAgICAgbGVhZiBzZWN0b3JDYXJyaWVyVHlwZSB7CiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiAiSW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHRoZSBzZWN0b3IgY2FycmllcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZWxsZWQgYnkgTU8gU2VjdG9yQ2FycmllciBpcyBhIGRpZ2l0YWwgc2VjdG9yLiI7CiAgICAgICAgICAgICAgICB0eXBlIGVudW1lcmF0aW9uIHsKICAgICAgICAgICAgICAgICAgICBlbnVtIG5vcm1hbF9zZWN0b3IgewogICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSAwOwogICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiAiTm90IGEgZGlnaXRhbCBzZWN0b3IiOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbnVtIGxlZnRfZGlnaXRhbF9zZWN0b3IgewogICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSAxOwogICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiAiTGVmdCBkaWdpdGFsIHNlY3RvciBmb3IgMkRTIjsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZW51bSByaWdodF9kaWdpdGFsX3NlY3RvciB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlIDI7CiAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICJSaWdodCBkaWdpdGFsIHNlY3RvciBmb3IgMkRTIjsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZW51bSBsZWZ0X2RpZ2l0YWxfc2VjdG9yXzNkcyB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlIDM7CiAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICJMZWZ0IGRpZ2l0YWwgc2VjdG9yIGZvciAzRFMiOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbnVtIHJpZ2h0X2RpZ2l0YWxfc2VjdG9yXzNkcyB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlIDQ7CiAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICJSaWdodCBkaWdpdGFsIHNlY3RvciBmb3IgM0RTIjsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZW51bSBtaWRkbGVfZGlnaXRhbF9zZWN0b3IgewogICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA1OwogICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiAiTWlkZGxlIGRpZ2l0YWwgc2VjdG9yIGZvciAzRFMiOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICBsaXN0IE5SU2VjdG9yQ2FycmllciB7CiAgICAgICAgZGVzY3JpcHRpb24gIlRoZSBOUiBTZWN0b3IgQ2FycmllciBvYmplY3QgcHJvdmlkZXMKICAgICAgICAgICAgICAgICAgICB0aGUgYXR0cmlidXRlcyBmb3IgZGVmaW5pbmcgdGhlIGxvZ2ljYWwKICAgICAgICAgICAgICAgICAgICBjaGFyYWN0ZXJpc3RpY3Mgb2YgYSBjYXJyaWVyIChjZWxsKSBpbiBhCiAgICAgICAgICAgICAgICAgICAgc2VjdG9yLiBBIHNlY3RvciBpcyBhIGNvdmVyYWdlIGFyZWEgYXNzb2NpYXRlZAogICAgICAgICAgICAgICAgICAgIHdpdGggYSBiYXNlIHN0YXRpb24gaGF2aW5nIGl0cyBvd24gYW50ZW5uYXMsCiAgICAgICAgICAgICAgICAgICAgcmFkaW8gcG9ydHMsIGFuZCBjb250cm9sIGNoYW5uZWxzLiBUaGUgY29uY2VwdAogICAgICAgICAgICAgICAgICAgIG9mIHNlY3RvcnMgd2FzIGRldmVsb3BlZCB0byBpbXByb3ZlIGNvLWNoYW5uZWwKICAgICAgICAgICAgICAgICAgICBpbnRlcmZlcmVuY2UgaW4gY2VsbHVsYXIgc3lzdGVtcywgYW5kIG1vc3Qgd2lyZWxlc3MKICAgICAgICAgICAgICAgICAgICBzeXN0ZW1zIHVzZSB0aHJlZSBzZWN0b3IgY2VsbHMuIjsKCiAgICAgICAgdXNlcyBvci10ZWl2LXR5cGVzOlRvcF9HcnBfVHlwZTsKICAgICAgICBrZXkgaWQ7CgogICAgICAgIGNvbnRhaW5lciBhdHRyaWJ1dGVzIHsKICAgICAgICAgICAgbGVhZiBhcmZjbkRMIHsKICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICJOUiBBYnNvbHV0ZSBSYWRpbyBGcmVxdWVuY3kgQ2hhbm5lbAogICAgICAgICAgICAgICAgICAgICAgICAgICAgTnVtYmVyIChOUi1BUkZDTikgZm9yIGRvd25saW5rIjsKICAgICAgICAgICAgICAgIHR5cGUgdWludDMyOwogICAgICAgICAgICB9CgogICAgICAgICAgICBsZWFmIGFyZmNuVUwgewogICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIk5SIEFic29sdXRlIFJhZGlvIGZyZXF1ZW5jeSBDaGFubmVsIE51bWJlcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgKE5SLUFSRkNOKSBmb3IgdXBsaW5rLiI7CiAgICAgICAgICAgICAgICB0eXBlIHVpbnQzMjsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgbGVhZiBmcmVxdWVuY3lETCB7CiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiAiUkYgUmVmZXJlbmNlIEZyZXF1ZW5jeSBvZiBkb3dubGluayBjaGFubmVsIjsKICAgICAgICAgICAgICAgIHR5cGUgdWludDMyOwogICAgICAgICAgICB9CgogICAgICAgICAgICBsZWFmIGZyZXF1ZW5jeVVMIHsKICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICJSRiBSZWZlcmVuY2UgRnJlcXVlbmN5IG9mIHVwbGluayBjaGFubmVsIjsKICAgICAgICAgICAgICAgIHR5cGUgdWludDMyOwogICAgICAgICAgICB9CgogICAgICAgICAgICBsZWFmIGJTQ2hhbm5lbEJ3REwgewogICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIkJTIENoYW5uZWwgYmFuZHdpZHRoIGluIE1IeiBmb3IgZG93bmxpbmsuIjsKICAgICAgICAgICAgICAgIHR5cGUgdWludDMyOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIG9yLXRlaXYteWV4dDpiaURpcmVjdGlvbmFsVG9wb2xvZ3lSZWxhdGlvbnNoaXAgTFRFU0VDVE9SQ0FSUklFUl9VU0VTX0FOVEVOTkFDQVBBQklMSVRZIHsgLy8gMC4uMSB0byAwLi4xCgogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpUb3BfR3JwX1R5cGU7CiAgICAgICAga2V5IGlkOwoKICAgICAgICBsZWFmIHVzZWQtYW50ZW5uYUNhcGFiaWxpdHkgewogICAgICAgICAgICBkZXNjcmlwdGlvbiAiTFRFIFNlY3RvciBDYXJyaWVyIHVzZXMgQW50ZW5uYSBDYXBhYmlsaXR5LiI7CiAgICAgICAgICAgIG9yLXRlaXYteWV4dDphU2lkZSBMVEVTZWN0b3JDYXJyaWVyOwogICAgICAgICAgICB0eXBlIGluc3RhbmNlLWlkZW50aWZpZXI7CiAgICAgICAgfQoKICAgICAgICBsZWFmIHVzZWQtYnktbHRlU2VjdG9yQ2FycmllciB7CiAgICAgICAgICAgIGRlc2NyaXB0aW9uICJBbnRlbm5hIENwYWJpbGl0eSB1c2VkIGJ5IExURSBTZWN0b3IgQ2Fycmllci4iOwogICAgICAgICAgICBvci10ZWl2LXlleHQ6YlNpZGUgQW50ZW5uYUNhcGFiaWxpdHk7CiAgICAgICAgICAgIHR5cGUgaW5zdGFuY2UtaWRlbnRpZmllcjsKICAgICAgICB9CiAgICB9CgogICAgb3ItdGVpdi15ZXh0OmJpRGlyZWN0aW9uYWxUb3BvbG9neVJlbGF0aW9uc2hpcCBFTk9ERUJGVU5DVElPTl9QUk9WSURFU19MVEVTRUNUT1JDQVJSSUVSIHsgLy8gMSB0byAwLi5uCgogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpUb3BfR3JwX1R5cGU7CiAgICAgICAga2V5IGlkOwoKICAgICAgICBsZWFmLWxpc3QgcHJvdmlkZWQtbHRlU2VjdG9yQ2FycmllciB7CiAgICAgICAgICAgIGRlc2NyaXB0aW9uICJlTm9kZUIgRnVuY3Rpb24gcHJvdmlkZXMgTFRFIFNlY3RvciBDYXJyaWVyLiI7CiAgICAgICAgICAgIG9yLXRlaXYteWV4dDphU2lkZSBFTm9kZUJGdW5jdGlvbjsKICAgICAgICAgICAgdHlwZSBpbnN0YW5jZS1pZGVudGlmaWVyOwogICAgICAgIH0KCiAgICAgICAgbGVhZiBwcm92aWRlZC1ieS1lbm9kZWJGdW5jdGlvbiB7CiAgICAgICAgICAgIGRlc2NyaXB0aW9uICJMVEUgU2VjdG9yIENhcnJpZXIgcHJvdmlkZWQgYnkgZU5vZGVCIEZ1bmN0aW9uLiI7CiAgICAgICAgICAgIG9yLXRlaXYteWV4dDpiU2lkZSBMVEVTZWN0b3JDYXJyaWVyOwogICAgICAgICAgICB0eXBlIGluc3RhbmNlLWlkZW50aWZpZXI7CiAgICAgICAgICAgIG1hbmRhdG9yeSB0cnVlOwogICAgICAgIH0KICAgIH0KCiAgICBvci10ZWl2LXlleHQ6YmlEaXJlY3Rpb25hbFRvcG9sb2d5UmVsYXRpb25zaGlwIE5SU0VDVE9SQ0FSUklFUl9VU0VTX0FOVEVOTkFDQVBBQklMSVRZIHsgLy8gMC4ubiB0byAwLi4xCgogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpUb3BfR3JwX1R5cGU7CiAgICAgICAga2V5IGlkOwoKICAgICAgICBsZWFmIHVzZWQtYW50ZW5uYUNhcGFiaWxpdHkgewogICAgICAgICAgICBkZXNjcmlwdGlvbiAiTlIgU2VjdG9yIENhcnJpZXIgdXNlcyBBbnRlbm5hIENhcGFiaWxpdHkuIjsKICAgICAgICAgICAgb3ItdGVpdi15ZXh0OmFTaWRlIE5SU2VjdG9yQ2FycmllcjsKICAgICAgICAgICAgdHlwZSBpbnN0YW5jZS1pZGVudGlmaWVyOwogICAgICAgIH0KCiAgICAgICAgbGVhZi1saXN0IHVzZWQtYnktbnJTZWN0b3JDYXJyaWVyIHsKICAgICAgICAgICAgZGVzY3JpcHRpb24gIkFudGVubmEgQ2FwYWJpbGl0eSB1c2VkIGJ5IE5SIFNlY3RvciBDYXJyaWVyLiI7CiAgICAgICAgICAgIG9yLXRlaXYteWV4dDpiU2lkZSBBbnRlbm5hQ2FwYWJpbGl0eTsKICAgICAgICAgICAgdHlwZSBpbnN0YW5jZS1pZGVudGlmaWVyOwogICAgICAgIH0KICAgIH0KCiAgICBvci10ZWl2LXlleHQ6YmlEaXJlY3Rpb25hbFRvcG9sb2d5UmVsYXRpb25zaGlwIEFOVEVOTkFDQVBBQklMSVRZX1VTRVNfQU5URU5OQUNBUEFCSUxJVFkgeyAvLyBTYW1lIGVudGl0eSAoMC4uMSB0byAwLi4xKQoKICAgICAgICB1c2VzIG9yLXRlaXYtdHlwZXM6VG9wX0dycF9UeXBlOwogICAgICAgIGtleSBpZDsKCiAgICAgICAgbGVhZiB1c2VkLWFudGVubmFDYXBhYmlsaXR5IHsKICAgICAgICAgICAgZGVzY3JpcHRpb24gIkFudGVubmEgQ2FwYWJpbGl0eSByZWFsaXNlZCBieSBBbnRlbm5hIENhcGFiaWxpdHkuIjsKICAgICAgICAgICAgb3ItdGVpdi15ZXh0OmFTaWRlIEFudGVubmFDYXBhYmlsaXR5OwogICAgICAgICAgICB0eXBlIGluc3RhbmNlLWlkZW50aWZpZXI7CiAgICAgICAgfQoKICAgICAgICBsZWFmIHVzZWQtYnktYW50ZW5uYUNhcGFiaWxpdHkgewogICAgICAgICAgICBkZXNjcmlwdGlvbiAiQW50ZW5uYSBDYXBhYmlsaXR5IHJlYWxpc2VzIEFudGVubmEgQ2FwYWJpbGl0eS4iOwogICAgICAgICAgICBvci10ZWl2LXlleHQ6YlNpZGUgQW50ZW5uYUNhcGFiaWxpdHk7CiAgICAgICAgICAgIHR5cGUgaW5zdGFuY2UtaWRlbnRpZmllcjsKICAgICAgICB9CiAgICB9CgogICAgb3ItdGVpdi15ZXh0OmJpRGlyZWN0aW9uYWxUb3BvbG9neVJlbGF0aW9uc2hpcCBBTlRFTk5BQ0FQQUJJTElUWV9QUk9WSURFU19BTlRFTk5BQ0FQQUJJTElUWSB7IC8vIFNhbWUgZW50aXR5ICgwLi4xIHRvIDAuLm4pCgogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpUb3BfR3JwX1R5cGU7CiAgICAgICAga2V5IGlkOwoKICAgICAgICBsZWFmIHByb3ZpZGVkLWFudGVubmFDYXBhYmlsaXR5IHsKICAgICAgICAgICAgZGVzY3JpcHRpb24gIkFudGVubmEgQ2FwYWJpbGl0eSByZWFsaXNlZCBieSBBbnRlbm5hIENhcGFiaWxpdHkuIjsKICAgICAgICAgICAgb3ItdGVpdi15ZXh0OmFTaWRlIEFudGVubmFDYXBhYmlsaXR5OwogICAgICAgICAgICB0eXBlIGluc3RhbmNlLWlkZW50aWZpZXI7CiAgICAgICAgfQoKICAgICAgICBsZWFmLWxpc3QgcHJvdmlkZWQtYnktYW50ZW5uYUNhcGFiaWxpdHkgewogICAgICAgICAgICBkZXNjcmlwdGlvbiAiQW50ZW5uYSBDYXBhYmlsaXR5IHJlYWxpc2VzIEFudGVubmEgQ2FwYWJpbGl0eS4iOwogICAgICAgICAgICBvci10ZWl2LXlleHQ6YlNpZGUgQW50ZW5uYUNhcGFiaWxpdHk7CiAgICAgICAgICAgIHR5cGUgaW5zdGFuY2UtaWRlbnRpZmllcjsKICAgICAgICB9CiAgICB9CgogICAgb3ItdGVpdi15ZXh0OmJpRGlyZWN0aW9uYWxUb3BvbG9neVJlbGF0aW9uc2hpcCBBTlRFTk5BQ0FQQUJJTElUWV9TRVJWRVNfQU5URU5OQUNBUEFCSUxJVFkgeyAvLyBTYW1lIGVudGl0eSAoMC4ubiB0byAwLi4xKQoKICAgICAgICB1c2VzIG9yLXRlaXYtdHlwZXM6VG9wX0dycF9UeXBlOwogICAgICAgIGtleSBpZDsKCiAgICAgICAgbGVhZi1saXN0IHNlcnZpY2VkLWFudGVubmFDYXBhYmlsaXR5IHsKICAgICAgICAgICAgZGVzY3JpcHRpb24gIkFudGVubmEgQ2FwYWJpbGl0eSByZWFsaXNlZCBieSBBbnRlbm5hIENhcGFiaWxpdHkuIjsKICAgICAgICAgICAgb3ItdGVpdi15ZXh0OmFTaWRlIEFudGVubmFDYXBhYmlsaXR5OwogICAgICAgICAgICB0eXBlIGluc3RhbmNlLWlkZW50aWZpZXI7CiAgICAgICAgfQoKICAgICAgICBsZWFmIHNlcnZpY2VkLWJ5LWFudGVubmFDYXBhYmlsaXR5IHsKICAgICAgICAgICAgZGVzY3JpcHRpb24gIkFudGVubmEgQ2FwYWJpbGl0eSByZWFsaXNlcyBBbnRlbm5hIENhcGFiaWxpdHkuIjsKICAgICAgICAgICAgb3ItdGVpdi15ZXh0OmJTaWRlIEFudGVubmFDYXBhYmlsaXR5OwogICAgICAgICAgICB0eXBlIGluc3RhbmNlLWlkZW50aWZpZXI7CiAgICAgICAgfQogICAgfQoKICAgIG9yLXRlaXYteWV4dDpiaURpcmVjdGlvbmFsVG9wb2xvZ3lSZWxhdGlvbnNoaXAgQU5URU5OQUNBUEFCSUxJVFlfUkVBTElTRURfQllfQU5URU5OQUNBUEFCSUxJVFkgeyAvLyBTYW1lIGVudGl0eSAoMC4ubiB0byAwLi5tKQoKICAgICAgICB1c2VzIG9yLXRlaXYtdHlwZXM6VG9wX0dycF9UeXBlOwogICAgICAgIGtleSBpZDsKCiAgICAgICAgbGVhZi1saXN0IHJlYWxpc2VkLWJ5LWFudGVubmFDYXBhYmlsaXR5IHsKICAgICAgICAgICAgZGVzY3JpcHRpb24gIkFudGVubmEgQ2FwYWJpbGl0eSByZWFsaXNlZCBieSBBbnRlbm5hIENhcGFiaWxpdHkuIjsKICAgICAgICAgICAgb3ItdGVpdi15ZXh0OmFTaWRlIEFudGVubmFDYXBhYmlsaXR5OwogICAgICAgICAgICB0eXBlIGluc3RhbmNlLWlkZW50aWZpZXI7CiAgICAgICAgfQoKICAgICAgICBsZWFmLWxpc3QgcmVhbGlzZWQtYW50ZW5uYUNhcGFiaWxpdHkgewogICAgICAgICAgICBkZXNjcmlwdGlvbiAiQW50ZW5uYSBDYXBhYmlsaXR5IHJlYWxpc2VzIEFudGVubmEgQ2FwYWJpbGl0eS4iOwogICAgICAgICAgICBvci10ZWl2LXlleHQ6YlNpZGUgQW50ZW5uYUNhcGFiaWxpdHk7CiAgICAgICAgICAgIHR5cGUgaW5zdGFuY2UtaWRlbnRpZmllcjsKICAgICAgIH0KICAgIH0KfQ==	BUILT_IN_MODULE	IN_USAGE
-o-ran-smo-teiv-rel-equipment-ran	urn:o-ran:smo-teiv-rel-equipment-ran	REL_EQUIPMENT_RAN	["o-ran-smo-teiv-equipment", "o-ran-smo-teiv-ran"]	2024-05-14	bW9kdWxlIG8tcmFuLXNtby10ZWl2LXJlbC1lcXVpcG1lbnQtcmFuIHsKICAgIHlhbmctdmVyc2lvbiAxLjE7CiAgICBuYW1lc3BhY2UgInVybjpvLXJhbjpzbW8tdGVpdi1yZWwtZXF1aXBtZW50LXJhbiI7CiAgICBwcmVmaXggb3ItdGVpdi1yZWwtZXF1aXByYW47CgogICAgaW1wb3J0IG8tcmFuLXNtby10ZWl2LWNvbW1vbi15YW5nLXR5cGVzIHsgcHJlZml4IG9yLXRlaXYtdHlwZXM7IH0KCiAgICBpbXBvcnQgby1yYW4tc21vLXRlaXYtY29tbW9uLXlhbmctZXh0ZW5zaW9ucyB7IHByZWZpeCBvci10ZWl2LXlleHQ7IH0KCiAgICBpbXBvcnQgby1yYW4tc21vLXRlaXYtZXF1aXBtZW50IHsgcHJlZml4IG9yLXRlaXYtZXF1aXA7IH0KCiAgICBpbXBvcnQgby1yYW4tc21vLXRlaXYtcmFuIHsgcHJlZml4IG9yLXRlaXYtcmFuOyB9CgogICAgb3JnYW5pemF0aW9uICJPUkFOIjsKICAgIGNvbnRhY3QgIlRoZSBBdXRob3JzIjsKICAgIGRlc2NyaXB0aW9uCiAgICAiRXF1aXBtZW50IGFuZCBSQU4gdG9wb2xvZ3kgcmVsYXRpb24gbW9kZWwuCgogICAgQ29weXJpZ2h0IChDKSAyMDI0IEVyaWNzc29uCiAgICBNb2RpZmljYXRpb25zIENvcHlyaWdodCAoQykgMjAyNCBPcGVuSW5mcmEgRm91bmRhdGlvbiBFdXJvcGUKCiAgICBUaGlzIG1vZGVsIGNvbnRhaW5zIHRoZSB0b3BvbG9neSByZWxhdGlvbnMgYmV0d2VlbiBFcXVpcG1lbnQgYW5kIFJBTi4iOwoKICAgIHJldmlzaW9uICIyMDI0LTA1LTE0IiB7CiAgICAgICAgZGVzY3JpcHRpb24gIkluaXRpYWwgcmV2aXNpb24uIjsKICAgICAgICBvci10ZWl2LXlleHQ6bGFiZWwgMC4zLjA7CiAgICB9CgogICAgb3ItdGVpdi15ZXh0OmRvbWFpbiBSRUxfRVFVSVBNRU5UX1JBTjsKCiAgICBvci10ZWl2LXlleHQ6YmlEaXJlY3Rpb25hbFRvcG9sb2d5UmVsYXRpb25zaGlwIEFOVEVOTkFNT0RVTEVfU0VSVkVTX0FOVEVOTkFDQVBBQklMSVRZIHsgLy8gMC4ubiB0byAwLi5tCgogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpUb3BfR3JwX1R5cGU7CiAgICAgICAga2V5IGlkOwoKICAgICAgICBsZWFmLWxpc3Qgc2VydmljZWQtYW50ZW5uYUNhcGFiaWxpdHkgewogICAgICAgICAgICBkZXNjcmlwdGlvbiAiQW50ZW5uYSBDYXBhYmlsaXR5IHNlcnZpY2VkIGJ5IHRoaXMgQW50ZW5uYSBNb2R1bGUuIjsKICAgICAgICAgICAgb3ItdGVpdi15ZXh0OmFTaWRlIG9yLXRlaXYtZXF1aXA6QW50ZW5uYU1vZHVsZTsKICAgICAgICAgICAgdHlwZSBpbnN0YW5jZS1pZGVudGlmaWVyOwogICAgICAgIH0KCiAgICAgICAgbGVhZi1saXN0IHNlcnZpbmctYW50ZW5uYU1vZHVsZSB7CiAgICAgICAgICAgIGRlc2NyaXB0aW9uICJBbnRlbm5hIE1vZHVsZSBzZXJ2ZXMgdGhpcyBBbnRlbm5hIENhcGFiaWxpdHkuIjsKICAgICAgICAgICAgb3ItdGVpdi15ZXh0OmJTaWRlIG9yLXRlaXYtcmFuOkFudGVubmFDYXBhYmlsaXR5OwogICAgICAgICAgICB0eXBlIGluc3RhbmNlLWlkZW50aWZpZXI7CiAgICAgICAgfQogICAgfQp9Cg==	BUILT_IN_MODULE	IN_USAGE
-o-ran-smo-teiv-equipment	urn:o-ran:smo-teiv-equipment	EQUIPMENT	[]	2024-05-14	bW9kdWxlIG8tcmFuLXNtby10ZWl2LWVxdWlwbWVudCB7CiAgICB5YW5nLXZlcnNpb24gMS4xOwogICAgbmFtZXNwYWNlICJ1cm46by1yYW46c21vLXRlaXYtZXF1aXBtZW50IjsKICAgIHByZWZpeCBvci10ZWl2LWVxdWlwOwoKICAgIGltcG9ydCBvLXJhbi1zbW8tdGVpdi1jb21tb24teWFuZy10eXBlcyB7IHByZWZpeCBvci10ZWl2LXR5cGVzOyB9CgogICAgaW1wb3J0IG8tcmFuLXNtby10ZWl2LWNvbW1vbi15YW5nLWV4dGVuc2lvbnMgeyBwcmVmaXggb3ItdGVpdi15ZXh0OyB9CgogICAgaW1wb3J0IGlldGYtZ2VvLWxvY2F0aW9uIHsKICAgICAgICBwcmVmaXggZ2VvOwogICAgICAgIHJlZmVyZW5jZSAiUkZDIDkxNzk6IEEgWUFORyBHcm91cGluZyBmb3IgR2VvZ3JhcGhpYyBMb2NhdGlvbnMiOwogICAgfQoKICAgIG9yZ2FuaXphdGlvbiAiT1JBTiI7CiAgICBjb250YWN0ICJUaGUgQXV0aG9ycyI7CiAgICBkZXNjcmlwdGlvbgogICAgIlJBTiBFcXVpcG1lbnQgdG9wb2xvZ3kgbW9kZWwuCgogICAgQ29weXJpZ2h0IChDKSAyMDI0IEVyaWNzc29uCiAgICBNb2RpZmljYXRpb25zIENvcHlyaWdodCAoQykgMjAyNCBPcGVuSW5mcmEgRm91bmRhdGlvbiBFdXJvcGUKCiAgICBUaGlzIG1vZGVsIGNvbnRhaW5zIHRoZSB0b3BvbG9neSBlbnRpdGllcyBhbmQgcmVsYXRpb25zIGluIHRoZQogICAgRXF1aXBtZW50IGRvbWFpbiwgd2hpY2ggaXMgbW9kZWxsZWQgdG8gdW5kZXJzdGFuZCB0aGUgcGh5c2ljYWwKICAgIGxvY2F0aW9uIG9mIGVxdWlwbWVudCBzdWNoIGFzIGFudGVubmFzIGFzc29jaWF0ZWQgd2l0aCBhIGNlbGwvY2FycmllcgogICAgYW5kIHRoZWlyIHJlbGV2YW50IHByb3BlcnRpZXMgZS5nLiB0aWx0LCBtYXggcG93ZXIgZXRjLiI7CgogICAgcmV2aXNpb24gIjIwMjQtMDUtMTQiIHsKICAgICAgICBkZXNjcmlwdGlvbiAiSW5pdGlhbCByZXZpc2lvbi4iOwogICAgICAgIG9yLXRlaXYteWV4dDpsYWJlbCAwLjMuMDsKICAgIH0KCiAgICBvci10ZWl2LXlleHQ6ZG9tYWluIEVRVUlQTUVOVDsKCiAgICBsaXN0IEFudGVubmFNb2R1bGUgewogICAgICAgIGRlc2NyaXB0aW9uICJBbiBBbnRlbm5hIE1vZHVsZSByZXByZXNlbnRzIHRoZQogICAgICAgICAgICAgICAgICAgIHBoeXNpY2FsIGFzcGVjdCBvZiBhbiBhbnRlbm5hLiI7CgogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpUb3BfR3JwX1R5cGU7CiAgICAgICAga2V5IGlkOwoKICAgICAgICBjb250YWluZXIgYXR0cmlidXRlcyB7CiAgICAgICAgICAgIGxlYWYgYW50ZW5uYU1vZGVsTnVtYmVyIHsKICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICJWZW5kb3Itc3BlY2lmaWMgYW50ZW5uYSBtb2RlbAogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWRlbnRpZmllci4gVGhpcyBhdHRyaWJ1dGUgaXMgcGFydCBvZgogICAgICAgICAgICAgICAgICAgICAgICAgICAgQUlTRyB2MyBBREIgU3RhbmRhcmQgYW5kIGhhcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgbm8gb3BlcmF0aW9uYWwgaW1wYWN0LiI7CiAgICAgICAgICAgICAgICB0eXBlIHN0cmluZzsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgbGVhZiBtZWNoYW5pY2FsQW50ZW5uYUJlYXJpbmcgewogICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIkFudGVubmEgYmVhcmluZyBvbiBhbnRlbm5hIHN1YnVuaXQKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoZXJlIGFudGVubmEgdW5pdCBpcyBpbnN0YWxsZWQuIjsKICAgICAgICAgICAgICAgIHR5cGUgdWludDMyOwogICAgICAgICAgICB9CgogICAgICAgICAgICBsZWFmIG1lY2hhbmljYWxBbnRlbm5hVGlsdCB7CiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiAiVGhlIGZpeGVkIGFudGVubmEgdGlsdCBvZiB0aGUgaW5zdGFsbGF0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmaW5lZCBhcyB0aGUgaW5jbGluYXRpb24gb2YgdGhlIGFudGVubmEKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQgcmVzcGVjdCB0byB0aGUgdmVydGljYWwgcGxhbmUuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBJdCBpcyBhIHNpZ25lZCB2YWx1ZS4gUG9zaXRpdmUgaW5kaWNhdGVzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3dudGlsdCwgYW5kIG5lZ2F0aXZlIGluZGljYXRlcyB1cHRpbHQuIjsKICAgICAgICAgICAgICAgIHR5cGUgdWludDMyOwogICAgICAgICAgICB9CgogICAgICAgICAgICBsZWFmIHBvc2l0aW9uV2l0aGluU2VjdG9yIHsKICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICJBbnRlbm5hIHVuaXQgcG9zaXRpb24gd2l0aGluIHNlY3Rvci4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgYXR0cmlidXRlIGlzIHBhcnQgb2YgQUlTRyB2MyBBREIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YW5kYXJkIGFuZCBoYXMgbm8gb3BlcmF0aW9uYWwgaW1wYWN0LiI7CiAgICAgICAgICAgICAgICB0eXBlIHN0cmluZzsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgbGVhZiB0b3RhbFRpbHQgewogICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIlRvdGFsIGFudGVubmEgZWxldmF0aW9uIGluY2x1ZGluZyB0aGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RhbGxlZCB0aWx0IGFuZCB0aGUgdGlsdCBhcHBsaWVkIGJ5CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgUmVtb3RlIEVsZWN0cmljYWwgVGlsdCAoUkVUKS4iOwogICAgICAgICAgICAgICAgdHlwZSB1aW50MzI7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGxlYWYgZWxlY3RyaWNhbEFudGVubmFUaWx0IHsKICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICJFbGVjdHJpY2FsbHktY29udHJvbGxlZCB0aWx0IG9mIG1haW4gYmVhbSBtYXhpbXVtCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIHJlc3BlY3QgdG8gZGlyZWN0aW9uIG9ydGhvZ29uYWwgdG8gYW50ZW5uYQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudCBheGlzIChzZWUgM0dQUCBUUyAyNS40NjYpLiBWYWx1ZSBpcyBzaWduZWQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aWx0IGRvd24gaXMgcG9zaXRpdmUsIHRpbHQgdXAgaXMgbmVnYXRpdmUuIjsKICAgICAgICAgICAgICAgIHR5cGUgdWludDMyOwogICAgICAgICAgICB9CgogICAgICAgICAgICBsZWFmLWxpc3QgYW50ZW5uYUJlYW1XaWR0aCB7CiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiAiVGhlIGFuZ3VsYXIgc3BhbiBvZiB0aGUgbWFpbiBsb2JlIG9mIHRoZSBhbnRlbm5hIHJhZGlhdGlvbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0dGVybiBpbiB0aGUgaG9yaXpvbnRhbCBwbGFuZS4gTWVhc3VyZWQgaW4gZGVncmVlcy4iOwogICAgICAgICAgICAgICAgdHlwZSB1aW50MzI7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHVzZXMgZ2VvOmdlby1sb2NhdGlvbjsKICAgICAgICB9CiAgICB9CgogICAgb3ItdGVpdi15ZXh0OmJpRGlyZWN0aW9uYWxUb3BvbG9neVJlbGF0aW9uc2hpcCBBTlRFTk5BTU9EVUxFX1VTRVNfQU5URU5OQU1PRFVMRSB7IC8vIFNhbWUgZW50aXR5ICgwLi4xIHRvIDAuLjEpCgogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpUb3BfR3JwX1R5cGU7CiAgICAgICAga2V5IGlkOwoKICAgICAgICBsZWFmLWxpc3QgdXNlZC1ieS1hbnRlbm5hTW9kdWxlIHsKICAgICAgICAgICAgZGVzY3JpcHRpb24gIkFudGVubmEgTW9kdWxlIHJlYWxpc2VkIGJ5IEFudGVubmEgTW9kdWxlLiI7CiAgICAgICAgICAgIG9yLXRlaXYteWV4dDphU2lkZSBBbnRlbm5hTW9kdWxlOwogICAgICAgICAgICB0eXBlIGluc3RhbmNlLWlkZW50aWZpZXI7CiAgICAgICB9CgogICAgICAgIGxlYWYtbGlzdCB1c2VkLWFudGVubmFNb2R1bGUgewogICAgICAgICAgICBkZXNjcmlwdGlvbiAiQW50ZW5uYSBNb2R1bGUgcmVhbGlzZXMgQW50ZW5uYSBNb2R1bGUuIjsKICAgICAgICAgICAgb3ItdGVpdi15ZXh0OmJTaWRlIEFudGVubmFNb2R1bGU7CiAgICAgICAgICAgIHR5cGUgaW5zdGFuY2UtaWRlbnRpZmllcjsKICAgICAgIH0KICAgIH0KfQ==	BUILT_IN_MODULE	IN_USAGE
+COPY ties_model.module_reference("name", "namespace", "domain", "includedModules", "revision", "content") FROM stdin;
+_3gpp-common-yang-types	urn:3gpp:sa5:_3gpp-common-yang-types	\N	[]	2023-11-06	bW9kdWxlIF8zZ3BwLWNvbW1vbi15YW5nLXR5cGVzIHsKICB5YW5nLXZlcnNpb24gMS4xOwogIG5hbWVzcGFjZSAidXJuOjNncHA6c2E1Ol8zZ3BwLWNvbW1vbi15YW5nLXR5cGVzIjsKICBwcmVmaXggInR5cGVzM2dwcCI7CgogIGltcG9ydCBpZXRmLWluZXQtdHlwZXMgeyBwcmVmaXggaW5ldDsgfQogIGltcG9ydCBpZXRmLXlhbmctdHlwZXMgeyBwcmVmaXggeWFuZzsgfQogIGltcG9ydCBfM2dwcC1jb21tb24teWFuZy1leHRlbnNpb25zIHsgcHJlZml4IHlleHQzZ3BwOyB9CgogIG9yZ2FuaXphdGlvbiAiM0dQUCBTQTUiOwogIGNvbnRhY3QgImh0dHBzOi8vd3d3LjNncHAub3JnL0R5bmFSZXBvcnQvVFNHLVdHLS1TNS0tb2ZmaWNpYWxzLmh0bT9JdGVtaWQ9NDY0IjsKICBkZXNjcmlwdGlvbiAiVGhlIG1vZGVsIGRlZmluZXMgYSBZQU5HIG1hcHBpbmcgb2YgdGhlIHRvcCBsZXZlbAogICAgaW5mb3JtYXRpb24gY2xhc3NlcyB1c2VkIGZvciBtYW5hZ2VtZW50IG9mIDVHIG5ldHdvcmtzIGFuZAogICAgbmV0d29yayBzbGljaW5nLgogICAgQ29weXJpZ2h0IDIwMjMsIDNHUFAgT3JnYW5pemF0aW9uYWwgUGFydG5lcnMgKEFSSUIsIEFUSVMsIENDU0EsIEVUU0ksIFRTRFNJLAogICAgVFRBLCBUVEMpLiBBbGwgcmlnaHRzIHJlc2VydmVkLiI7CiAgcmVmZXJlbmNlICIzR1BQIFRTIDI4LjYyMyI7CgogIHJldmlzaW9uIDIwMjMtMTEtMDYgeyByZWZlcmVuY2UgQ1ItMDMwNTsgfQogIHJldmlzaW9uIDIwMjMtMDktMTggeyByZWZlcmVuY2UgQ1ItMDI3MSA7IH0KICByZXZpc2lvbiAyMDIzLTA4LTA5IHsgcmVmZXJlbmNlIENSLTAyNjY7IH0KICByZXZpc2lvbiAyMDIzLTA1LTEwIHsgcmVmZXJlbmNlIENSLTAyNTA7IH0KICByZXZpc2lvbiAyMDIzLTAyLTE0IHsgcmVmZXJlbmNlIENSLTAyMzQ7IH0KICByZXZpc2lvbiAyMDIyLTExLTA0IHsgcmVmZXJlbmNlICJDUi0wMTk0IjsgfQogIHJldmlzaW9uIDIwMjItMTAtMjQgeyByZWZlcmVuY2UgQ1ItMDE5NjsgIH0KICByZXZpc2lvbiAyMDIyLTA3LTI2IHsgcmVmZXJlbmNlICJDUi0wMTgwIiA7IH0KICByZXZpc2lvbiAyMDIyLTAyLTA5IHsgcmVmZXJlbmNlICJDUi0wMTQ0IjsgfQogIHJldmlzaW9uIDIwMjEtMTEtMDEgeyByZWZlcmVuY2UgIkNSLTAxNDEiOyB9CgogIHJldmlzaW9uIDIwMjEtMDktMzAgewogICAgZGVzY3JpcHRpb24gIkFkZGVkIExvbmdpdHVkZSwgTGF0aXR1ZGUsIFRlbnRoT2ZEZWdyZWVzLCBPbk9mZi4iOwogICAgcmVmZXJlbmNlICJDUi0wMTM4IjsKICB9CgogIHJldmlzaW9uIDIwMjAtMTEtMDYgewogICAgZGVzY3JpcHRpb24gIlJlbW92ZWQgaW5jb3JyZWN0IFMtTlNTQUkgZGVmaW5pdGlvbnMuIjsKICAgIHJlZmVyZW5jZSAiQ1ItMDExOCI7CiAgfQoKICByZXZpc2lvbiAyMDIwLTAzLTEwIHsKICAgIGRlc2NyaXB0aW9uICJSZW1vdmVkIGZhdWx0eSB3aGVuIHN0YXRlbWVudHMuIjsKICAgIHJlZmVyZW5jZSAiU1AtMjAwMjI5IjsKICB9CgogIHJldmlzaW9uIDIwMTktMTAtMjUgewogICAgZGVzY3JpcHRpb24gIkFkZGVkIE1hbmFnZWRORlByb2ZpbGUuIjsKICAgIHJlZmVyZW5jZSAiUzUtMTk0NDU3IjsKICB9CgogIHJldmlzaW9uIDIwMTktMTAtMTYgewogICAgZGVzY3JpcHRpb24gIkFkZGVkIFNBUCBhbmQgdXNhZ2VTdGF0ZS4iOwogICAgcmVmZXJlbmNlICJTNS0xOTM1MTgiOwogIH0KCiAgcmV2aXNpb24gMjAxOS0wNi0yMyB7CiAgICByZWZlcmVuY2UgICJJbml0aWFsIHZlcnNpb24uIjsKICB9CgogIHR5cGVkZWYgRW5hYmxlZERpc2FibGVkIHsKICAgIHR5cGUgZW51bWVyYXRpb24gewogICAgICBlbnVtIERJU0FCTEVEIDsKICAgICAgZW51bSBFTkFCTEVEIDsKICAgIH0KICB9CgogIGdyb3VwaW5nIG5hbWVWYWx1ZVBhaXIgewogICAgbGVhZiBuYW1lIHsgdHlwZSBzdHJpbmc7IH0KICAgIGxlYWYgdmFsdWUgeyB0eXBlIHN0cmluZzsgfQogIH0KCiAgZ3JvdXBpbmcgUHJvY2Vzc01vbml0b3JHcnAgewogICAgZGVzY3JpcHRpb24gIlByb3ZpZGVzIGF0dHJpYnV0ZXMgdG8gbW9uaXRvciB0aGUgcHJvZ3Jlc3Mgb2YgcHJvY2Vzc2VzCiAgICAgIHdpdGggc3BlY2lmaWMgcHVycG9zZSBhbmQgbGltaXRlZCBsaWZldGltZSBydW5uaW5nIG9uIE1uUyBwcm9kdWNlcnMuCiAgICAgIEl0IG1heSBiZSB1c2VkIGFzIGRhdGEgdHlwZSBmb3IgZGVkaWNhdGVkIHByb2dyZXNzIG1vbml0b3IgYXR0cmlidXRlcwogICAgICB3aGVuIHNwZWNpZnlpbmcgdGhlIG1hbmFnZW1lbnQgcmVwcmVzZW50YXRpb24gb2YgdGhlc2UgcHJvY2Vzc2VzLgogICAgICBUaGUgYXR0cmlidXRlcyBpbiB0aGlzIGNsYXVzZSBhcmUgZGVmaW5lZCBpbiBhIGdlbmVyaWMgd2F5LgogICAgICBGb3Igc29tZSBhdHRyaWJ1dGVzIHNwZWNpYWxpc2F0aW9ucyBtYXkgYmUgcHJvdmlkZWQgd2hlbiBzcGVjaWZ5aW5nIGEKICAgICAgY29uY3JldGUgcHJvY2VzcyByZXByZXNlbnRhdGlvbi4KCiAgICAgIElmIGEgbWFuYWdlbWVudCBvcGVyYXRpb24gb24gc29tZSBJT0NzIHRyaWdnZXJzIGFuIGFzc29jaWF0ZWQKICAgICAgYXN5bmNocm9ub3VzIHByb2Nlc3MgKHdob3NlIHByb2dyZXNzIHNoYWxsIGJlIG1vbml0b3JlZCksIHRoaXMgc2hvdWxkCiAgICAgIGFsc28gcmVzdWx0IGluIGNyZWF0aW5nIGFuIGF0dHJpYnV0ZSBuYW1lZCAncHJvY2Vzc01vbml0b3InIChvZiB0eXBlCiAgICAgICdQcm9jZXNzTW9uaXRvcicpIGluIHRoZXNlIElPQyhzKS4gVGhlIHByb2Nlc3NNb25pdG9yIGF0dHJpYnV0ZSBtYXkgYmUKICAgICAgYWNjb21wYW5pZWQgYnkgdXNlLWNhc2Ugc3BlY2lmaWMgYWRkaXRpb25hbCBkYXRhIGl0ZW1zLgoKICAgICAgVGhlIHByb2dyZXNzIG9mIHRoZSBwcm9jZXNzIGlzIGRlc2NyaWJlZCBieSB0aGUgJ3N0YXR1cycgYW5kCiAgICAgICdwcm9ncmVzc1BlcmNlbnRhZ2UnIGF0dHJpYnV0ZXMuIEFkZGl0aW9uYWwgdGV4dHVhbCBxdWFsaWZpY2F0aW9ucyBmb3IKICAgICAgdGhlICdzdGF0dXMnIGF0dHJpYnV0ZSBtYXkgYmUgcHJvdmlkZWQgYnkgdGhlICdwcm9ncmVzc1N0YXRlSW5mbycgYW5kCiAgICAgICdyZXN1bHRTdGF0ZUluZm8nIGF0dHJpYnV0ZXMuCgogICAgICBXaGVuIHRoZSBwcm9jZXNzIGlzIGluc3RhbnRpYXRlZCwgdGhlICdzdGF0dXMnIGlzIHNldCB0byAnTk9UX1JVTk5JTkcnCiAgICAgIGFuZCB0aGUgJ3Byb2dyZXNzUGVyY2VudGFnZScgdG8gJzAnLiBUaGUgTW5TIHByb2R1Y2VyIGRlY2lkZXMgd2hlbiB0bwogICAgICBzdGFydCBleGVjdXRpbmcgdGhlIHByb2Nlc3MgYW5kIHRvIHRyYW5zaXRpb24gaW50byB0aGUgJ1JVTk5JTkcnIHN0YXRlLgogICAgICBUaGlzIHRpbWUgaXMgY2FwdHVyZWQgaW4gdGhlICdzdGFydFRpbWUnIGF0dHJpYnV0ZS4gQWx0ZXJuYXRpdmVseSwgdGhlCiAgICAgIHByb2Nlc3MgbWF5IHN0YXJ0IHRvIGV4ZWN1dGUgZGlyZWN0bHkgdXBvbiBpdHMgaW5zdGFudGlhdGlvbi4gT25lCiAgICAgIGFsdGVybmF0aXZlIG11c3QgYmUgc2VsZWN0ZWQgd2hlbiB1c2luZyB0aGlzIGRhdGEgdHlwZS4KCiAgICAgIER1cmluZyB0aGUgJ1JVTk5JTkcnIHN0YXRlIHRoZSAncHJvZ3Jlc3NQZXJjZW50YWdlJyBhdHRyaWJ1dGUgbWF5IGJlCiAgICAgIHJlcGVhdGVkbHkgdXBkYXRlZC4gVGhlIGV4YWN0IHNlbWFudGljIG9mIHRoaXMgYXR0cmlidXRlIGlzIHN1YmplY3QgdG8KICAgICAgZnVydGhlciBzcGVjaWFsaXNhdGlvbi4gVGhlICdwcm9ncmVzc0luZm8nIGF0dHJpYnV0ZSBtYXkgYmUgdXNlZCB0bwogICAgICBwcm92aWRlIGFkZGl0aW9uYWwgdGV4dHVhbCBpbmZvcm1hdGlvbiBpbiB0aGUgJ05PVF9SVU5OSU5HJywgJ0NBTkNFTExJTkcnCiAgICAgIGFuZCAnUlVOTklORycgc3RhdGVzLiBGdXJ0aGVyIHNwZWNpYWxpc2F0aW9uIG9mCiAgICAgICdwcm9ncmVzc1N0YXRlSW5mbycgbWF5IGJlIHByb3ZpZGVkIHdoZXJlIHRoaXMgZGF0YSB0eXBlIGlzCiAgICAgIHVzZWQuCgogICAgICBVcG9uIHN1Y2Nlc3NmdWwgY29tcGxldGlvbiBvZiB0aGUgcHJvY2VzcywgdGhlICdzdGF0dXMnIGF0dHJpYnV0ZSBpcyBzZXQKICAgICAgdG8gJ0ZJTklTSEVEJywgdGhlICdwcm9ncmVzc1BlcmNlbnRhZ2UnIHRvIDEwMCUuIFRoZSB0aW1lIGlzIGNhcHR1cmVkIGluCiAgICAgIHRoZSAnZW5kVGltZScgYXR0cmlidXRlLiBBZGRpdGlvbmFsIHRleHR1YWwgaW5mb3JtYXRpb24gbWF5IGJlIHByb3ZpZGVkCiAgICAgIGluIHRoZSAncmVzdWx0U3RhdGVJbmZvJyBhdHRyaWJ1dGUuIFRoZSB0eXBlIG9mCiAgICAgICdyZXN1bHRTdGF0ZUluZm8nIGluIHRoaXMgZGF0YSB0eXBlIGRlZmluaXRpb24gaXMgJ1N0cmluZycuCiAgICAgIEZ1cnRoZXIgc3BlY2lhbGlzYXRpb24gb2YgJ3Jlc3VsdFN0YXRlSW5mbycgbWF5IGJlIHByb3ZpZGVkCiAgICAgIHdoZXJlIHRoaXMgZGF0YSB0eXBlIGlzIHVzZWQuCgogICAgICBJbiBjYXNlIHRoZSBwcm9jZXNzIGZhaWxzIHRvIGNvbXBsZXRlIHN1Y2Nlc3NmdWxseSwgdGhlICdzdGF0dXMnCiAgICAgIGF0dHJpYnV0ZSBpcyBzZXQgdG8gJ0ZBSUxFRCcgb3IgJ1BBUlRJQUxMWV9GQUlMRUQnLCB0aGUgY3VycmVudCB2YWx1ZSBvZgogICAgICAncHJvZ3Jlc3NQZXJjZW50YWdlJyBpcyBmcm96ZW4sIGFuZCB0aGUgdGltZSBjYXB0dXJlZCBpbiAnZW5kVGltZScuIFRoZQogICAgICAncmVzdWx0U3RhdGVJbmZvJyBzcGVjaWZpZXMgdGhlIHJlYXNvbiBmb3IgdGhlIGZhaWx1cmUuCiAgICAgIFNwZWNpZmljIGZhaWx1cmUgcmVhc29ucyBtYXkgYmUgc3BlY2lmaWVkIHdoZXJlIHRoZSBkYXRhIHR5cGUgZGVmaW5lZCBpbgogICAgICB0aGlzIGNsYXVzZSBpcyB1c2VkLiBUaGUgZXhhY3Qgc2VtYW50aWMgb2YgZmFpbHVyZSBtYXkgYmUgc3ViamVjdCBmb3IKICAgICAgZnVydGhlciBzcGVjaWFsaXNhdGlvbiBhcyB3ZWxsLgoKICAgICAgSW4gY2FzZSB0aGUgcHJvY2VzcyBpcyBjYW5jZWxsZWQsIHRoZSAnc3RhdHVzJyBhdHRyaWJ1dGUgaXMgZmlyc3Qgc2V0IHRvCiAgICAgICdDQU5DRUxMSU5HJyBhbmQgd2hlbiB0aGUgcHJvY2VzcyBpcyByZWFsbHkgY2FuY2VsbGVkIHRoZW4gdG8gJ0NBTkNFTExFRCcuCiAgICAgIFRoZSB0cmFuc2l0aW9uIHRvICdDQU5DRUxMRUQnIGlzIGNhcHR1cmVkIGluIHRoZSAnZW5kVGltZScgYXR0cmlidXRlLgogICAgICBUaGUgdmFsdWUgb2YgJ3Byb2dyZXNzUGVyY2VudGFnZScgaXMgZnJvemVuLiBBZGRpdGlvbmFsIHRleHR1YWwKICAgICAgaW5mb3JtYXRpb24gbWF5IGJlIHByb3ZpZGVkIGluIHRoZSAncmVzdWx0U3RhdGVJbmZvJyBhdHRyaWJ1dGUuCgogICAgICBUaGUgJ3Jlc3VsdFN0YXRlSW5mbycgYXR0cmlidXRlIGlzIHByb3ZpZGVkIG9ubHkgZm9yIGFkZGl0aW9uYWwgdGV4dHVhbAogICAgICBxdWFsaWZpY2F0aW9uIG9mIHRoZSBzdGF0ZXMgJ0ZJTklTSEVEJywgJ0ZBSUxFRCcsICdQQVJUSUFMTFlfRkFJTEVEJyBvcgogICAgICAnQ0FOQ0VMTEVEJy4gSXQgc2hhbGwgbm90IGJlIHVzZWQgZm9yIG1ha2luZyB0aGUgb3V0Y29tZSwgdGhhdCB0aGUKICAgICAgcHJvY2VzcyBtYXkgcHJvZHVjZSBpbiBjYXNlIG9mIHN1Y2Nlc3MsIGF2YWlsYWJsZS4KCiAgICAgIFRoZSBwcm9jZXNzIG1heSBoYXZlIHRvIGJlIGNvbXBsZXRlZCB3aXRoaW4gYSBjZXJ0YWluIHRpbWUgYWZ0ZXIgaXRzCiAgICAgIGNyZWF0aW9uLCBmb3IgZXhhbXBsZSBiZWNhdXNlIHJlcXVpcmVkIGRhdGEgbWF5IG5vdCBiZSBhdmFpbGFibGUgYW55CiAgICAgIG1vcmUgYWZ0ZXIgYSBjZXJ0YWluIHRpbWUsIG9yIHRoZSBwcm9jZXNzIG91dGNvbWUgaXMgbmVlZGVkIHVudGlsIGEKICAgICAgY2VydGFpbiB0aW1lIGFuZCB3aGVuIG5vdCBwcm92aWRlZCBieSB0aGlzIHRpbWUgaXMgbm90IG5lZWRlZCBhbnkgbW9yZS4KICAgICAgVGhlIHRpbWUgdW50aWwgdGhlIE1uUyBwcm9kdWNlciBhdXRvbWF0aWNhbGx5IGNhbmNlbHMgdGhlIHByb2Nlc3MgaXMKICAgICAgaW5kaWNhdGVkIGJ5IHRoZSAndGltZXInIGF0dHJpYnV0ZS4iOwoKICAgIGxlYWYgaWQgewogICAgICB0eXBlIHN0cmluZzsKICAgICAgbWFuZGF0b3J5IHRydWU7CiAgICAgIGRlc2NyaXB0aW9uICJJZCBvZiB0aGUgcHJvY2Vzcy4gSXQgaXMgdW5pcXVlIHdpdGhpbiBhIHNpbmdsZQogICAgICAgIG11bHRpdmFsdWUgYXR0cmlidXRlIG9mIHR5cGUgUHJvY2Vzc01vbml0b3IuIjsKICAgIH0KCiAgICBsZWFmIHN0YXR1cyB7CiAgICAgIHR5cGUgZW51bWVyYXRpb24gewogICAgICAgIGVudW0gTk9UX1NUQVJURUQgOwogICAgICAgIGVudW0gUlVOTklORyA7CiAgICAgICAgZW51bSBDQU5DRUxMSU5HIDsKICAgICAgICBlbnVtIEZJTklTSEVEIDsKICAgICAgICBlbnVtIEZBSUxFRCA7CiAgICAgICAgZW51bSBQQVJUSUFMTFlfRkFJTEVEIDsKICAgICAgICBlbnVtIENBTkNFTExFRCA7CiAgICAgIH0KICAgICAgY29uZmlnIGZhbHNlOwogICAgICBkZWZhdWx0ICBSVU5OSU5HOwogICAgICBkZXNjcmlwdGlvbiAiUmVwcmVzZW50cyB0aGUgc3RhdHVzIG9mIHRoZSBhc3NvY2lhdGVkIHByb2Nlc3MsCiAgICAgICAgd2hldGhlciBpdCBmYWlscywgc3VjY2VlZHMgZXRjLgogICAgICAgIEl0IGRvZXMgbm90IHJlcHJlc2VudCB0aGUgcmV0dXJuZWQgdmFsdWVzIG9mIGEgc3VjY2Vzc2Z1bGx5IGZpbmlzaGVkCiAgICAgICAgcHJvY2Vzcy4gIjsKICAgIH0KCiAgICBsZWFmIHByb2dyZXNzUGVyY2VudGFnZSB7CiAgICAgIHR5cGUgdWludDggewogICAgICAgIHJhbmdlIDAuLjEwMDsKICAgICAgfQogICAgICBjb25maWcgZmFsc2U7CiAgICAgIGRlc2NyaXB0aW9uICJQcm9ncmVzcyBvZiB0aGUgYXNzb2NpYXRlZCBwcm9jZXNzIGFzIHBlcmNlbnRhZ2UiOwogICAgfQoKICAgIGxlYWYtbGlzdCBwcm9ncmVzc1N0YXRlSW5mbyB7CiAgICAgIHR5cGUgc3RyaW5nOwogICAgICBjb25maWcgZmFsc2U7CiAgICAgIGRlc2NyaXB0aW9uICJBZGRpdGlvbmFsIHRleHR1YWwgcXVhbGlmaWNhdGlvbiBvZiB0aGUgc3RhdGVzCiAgICAgICAgJ05PVF9TVEFSVEVEJywgJ0NBTkNFTExJTkcnIGFuZCAnUlVOTklORycuCgogICAgICAgIEZvciBzcGVjaWZpYyBwcm9jZXNzZXMsIHNwZWNpZmljIHdlbGwtZGVmaW5lZCBzdHJpbmdzIChlLmcuIHN0cmluZwogICAgICAgIHBhdHRlcm5zIG9yIGVudW1zKSBtYXkgYmUgZGVmaW5lZCBhcyBhIHNwZWNpYWxpc2F0aW9uLiI7CiAgICB9CgogICAgbGVhZiByZXN1bHRTdGF0ZUluZm8gewogICAgICB0eXBlIHN0cmluZzsKICAgICAgY29uZmlnIGZhbHNlOwogICAgICBkZXNjcmlwdGlvbiAiQWRkaXRpb25hbCB0ZXh0dWFsIHF1YWxpZmljYXRpb24gb2YgdGhlIHN0YXRlcwogICAgICAgICdGSU5JU0hFRCcsICdGQUlMRUQnLCAnUEFSVElBTExZX0ZBSUxFRCBhbmQgJ0NBTkNFTExFRCcuCiAgICAgICAgRm9yIGV4YW1wbGUsIGluIHRoZSAnRkFJTEVEJyBvciAnUEFSVElBTExZX0ZBSUxFRCcgc3RhdGUgdGhpcwogICAgICAgIGF0dHJpYnV0ZSBtYXkgYmUgdXNlZCB0byBwcm92aWRlIGVycm9yIHJlYXNvbnMuCgogICAgICAgIFRoaXMgYXR0cmlidXRlIHNoYWxsIG5vdCBiZSB1c2VkIHRvIG1ha2UgdGhlIG91dGNvbWUgb2YgdGhlIHByb2Nlc3MKICAgICAgICBhdmFpbGFibGUgZm9yIHJldHJpZXZhbCwgaWYgYW55LiBGb3IgdGhpcyBwdXJwb3NlLCBkZWRpY2F0ZWQKICAgICAgICBhdHRyaWJ1dGVzIHNoYWxsIGJlIHNwZWNpZmllZCB3aGVuIHNwZWNpZnlpbmcgdGhlIHJlcHJlc2VudGF0aW9uIG9mCiAgICAgICAgYSBzcGVjaWZpYyBwcm9jZXNzLgoKICAgICAgICBGb3Igc3BlY2lmaWMgcHJvY2Vzc2VzLCBzcGVjaWZpYyB3ZWxsLWRlZmluZWQgc3RyaW5ncyAoZS5nLiBzdHJpbmcKICAgICAgICBwYXR0ZXJucyBvciBlbnVtcykgbWF5IGJlIGRlZmluZWQgYXMgYSBzcGVjaWFsaXNhdGlvbi4iOwogICAgfQoKICAgIGxlYWYgc3RhcnRUaW1lIHsKICAgICAgdHlwZSB5YW5nOmRhdGUtYW5kLXRpbWU7CiAgICAgIGNvbmZpZyBmYWxzZTsKICAgICAgZGVzY3JpcHRpb24gIlN0YXJ0IHRpbWUgb2YgdGhlIGFzc29jaWF0ZWQgcHJvY2VzcywgaS5lLiB0aGUgdGltZSB3aGVuIHRoZQogICAgICAgIHN0YXR1cyBjaGFuZ2VkIGZyb20gJ05PVF9TVEFSVEVEJyB0byAnUlVOTklORycuIjsKICAgIH0KCiAgICBsZWFmIGVuZFRpbWUgewogICAgICB0eXBlIHlhbmc6ZGF0ZS1hbmQtdGltZTsKICAgICAgY29uZmlnIGZhbHNlOwogICAgICBkZXNjcmlwdGlvbiAiRGF0ZSBhbmQgdGltZSB3aGVuIHN0YXR1cyBjaGFuZ2VkIHRvICdTVUNDRVNTJywgJ0NBTkNFTExFRCcsCiAgICAgICAgJ0ZBSUxFRCcgb3IgJ1BBUlRJQUxMWV9GQUlMRUQnLgoKICAgICAgICBJZiB0aGUgdGltZSBpcyBpbiB0aGUgZnV0dXJlLCBpdCBpcyB0aGUgZXN0aW1hdGVkIHRpbWUKICAgICAgICB0aGUgcHJvY2VzcyB3aWxsIGVuZC4iOwogICAgfQoKICAgIGxlYWYgdGltZXIgewogICAgICB0eXBlIHVpbnQzMjsKICAgICAgdW5pdHMgbWludXRlczsKICAgICAgZGVzY3JpcHRpb24gIlRpbWUgdW50aWwgdGhlIGFzc29jaWF0ZWQgcHJvY2VzcyBpcyBhdXRvbWF0aWNhbGx5IGNhbmNlbGxlZC4KICAgICAgICBJZiBzZXQsIHRoZSBzeXN0ZW0gZGVjcmVhc2VzIHRoZSB0aW1lciB3aXRoIHRpbWUuIFdoZW4gaXQgcmVhY2hlcyB6ZXJvCiAgICAgICAgdGhlIGNhbmNlbGxhdGlvbiBvZiB0aGUgYXNzb2NpYXRlZCBwcm9jZXNzIGlzIGluaXRpYXRlZCBieSB0aGUKICAgICAgICBNblNfUHJvZHVjZXIuCiAgICAgICAgSWYgbm90IHNldCwgdGhlcmUgaXMgbm8gdGltZSBsaW1pdCBmb3IgdGhlIHByb2Nlc3MuCgogICAgICAgIE9uY2UgdGhlIHRpbWVyIGlzIHNldCwgdGhlIGNvbnN1bWVyIGNhbiBub3QgY2hhbmdlIGl0IGFueW1vcmUuCiAgICAgICAgSWYgdGhlIGNvbnN1bWVyIGhhcyBub3Qgc2V0IHRoZSB0aW1lciB0aGUgTW5TIFByb2R1Y2VyIG1heSBzZXQgaXQuIjsKICAgICAgeWV4dDNncHA6bm90Tm90aWZ5YWJsZTsKICAgIH0KICB9CgogIHR5cGVkZWYgVGVudGhPZkRlZ3JlZXMgewogICAgdHlwZSB1aW50MTYgewogICAgICByYW5nZSAwLi4zNjAwOwogICAgfQogICAgdW5pdHMgIjAuMSBkZWdyZWVzIjsKICAgIGRlc2NyaXB0aW9uICJBIHNpbmdsZSBpbnRlZ3JhbCB2YWx1ZSBjb3JyZXNwb25kaW5nIHRvIGFuIGFuZ2xlIGluIGRlZ3JlZXMKICAgICAgYmV0d2VlbiAwIGFuZCAzNjAgd2l0aCBhIHJlc29sdXRpb24gb2YgMC4xIGRlZ3JlZXMuIjsKICB9CgogIHR5cGVkZWYgTGF0aXR1ZGUgewogICAgdHlwZSBkZWNpbWFsNjQgewogICAgICBmcmFjdGlvbi1kaWdpdHMgNDsKICAgICAgcmFuZ2UgIi05MC4wMDAwLi4rOTAuMDAwMCI7CiAgICB9CiAgICBkZXNjcmlwdGlvbiAiTGF0aXR1ZGUgdmFsdWVzIjsKICB9CgogIHR5cGVkZWYgTG9uZ2l0dWRlIHsKICAgIHR5cGUgZGVjaW1hbDY0IHsKICAgICAgZnJhY3Rpb24tZGlnaXRzIDQ7CiAgICAgIHJhbmdlICItMTgwLjAwMDAuLisxODAuMDAwMCI7CiAgICB9CiAgICBkZXNjcmlwdGlvbiAiTG9uZ2l0dWRlIHZhbHVlcyI7CiAgfQoKICB0eXBlZGVmIEFsdGl0dWRlICB7CiAgICB0eXBlIGRlY2ltYWw2NCB7CiAgICAgIGZyYWN0aW9uLWRpZ2l0cyA2OwogICAgfQogICAgdW5pdHMgIm1ldGVycyI7CiAgICBkZXNjcmlwdGlvbgogICAgICAiSGVpZ2h0IGZyb20gYSByZWZlcmVuY2UgMCB2YWx1ZS4iOwogIH0KCiAgZ3JvdXBpbmcgR2VvZ3JhcGhpY2FsQ29vcmRpbmF0ZXMgewogICAgZGVzY3JpcHRpb24gIlRoaXMgZGF0YXR5cGUgcmVwcmVzZW50cyB0aGUgZ2VvZ3JhcGhpY2FsIGNvb3JkaW5hdGVzIjsKICAgIHJlZmVyZW5jZSAiI0dQUCBUUyAyOC41NTggY2xhdXNlIDYuMy44IjsKCiAgICBsZWFmIGxhdGl0dWRlIHsKICAgICAgdHlwZSBMYXRpdHVkZTsKICAgICAgbWFuZGF0b3J5IHRydWU7CiAgICB9CgogICAgbGVhZiBsb25naXR1ZGUgewogICAgICB0eXBlIExvbmdpdHVkZTsKICAgICAgbWFuZGF0b3J5IHRydWU7CiAgICB9CgogICAgbGVhZiBhbHRpdHVkZSB7CiAgICAgIHR5cGUgQWx0aXR1ZGU7CiAgICB9CgogIH0KCiAgdHlwZWRlZiBPbk9mZiB7CiAgICB0eXBlIGVudW1lcmF0aW9uIHsKICAgICAgZW51bSBPTjsKICAgICAgZW51bSBPRkY7CiAgICB9CiAgfQoKICAvLyBncm91cGluZyBNYW5hZ2VkTkZQcm9maWxlIHdpbGwgYmUgcmVtb3ZlZCBhcyBpdCBpcwogIC8vICBiZWluZyBtb3ZlZCB0byBfM2dwcC01Z2MtbnJtLW5mcHJvZmlsZQogIGdyb3VwaW5nIE1hbmFnZWRORlByb2ZpbGUgewogICAgZGVzY3JpcHRpb24gIkRlZmluZXMgcHJvZmlsZSBmb3IgbWFuYWdlZCBORiI7CiAgICByZWZlcmVuY2UgIjNHUFAgVFMgMjMuNTAxIjsKCiAgICBsZWFmIGlkeCB7IHR5cGUgdWludDMyIDsgfQoKICAgIGxlYWYgbmZJbnN0YW5jZUlEIHsKICAgICAgY29uZmlnIGZhbHNlOwogICAgICBtYW5kYXRvcnkgdHJ1ZTsKICAgICAgdHlwZSB5YW5nOnV1aWQgOwogICAgICBkZXNjcmlwdGlvbiAiVGhpcyBwYXJhbWV0ZXIgZGVmaW5lcyBwcm9maWxlIGZvciBtYW5hZ2VkIE5GLgogICAgICAgIFRoZSBmb3JtYXQgb2YgdGhlIE5GIEluc3RhbmNlIElEIHNoYWxsIGJlIGEKICAgICAgICBVbml2ZXJzYWxseSBVbmlxdWUgSWRlbnRpZmllciAoVVVJRCkgdmVyc2lvbiA0LAogICAgICAgIGFzIGRlc2NyaWJlZCBpbiBJRVRGIFJGQyA0MTIyICIgOwogICAgICB5ZXh0M2dwcDppblZhcmlhbnQ7CiAgICB9CgogICAgbGVhZi1saXN0IG5mVHlwZSB7CiAgICAgIGNvbmZpZyBmYWxzZTsKICAgICAgbWluLWVsZW1lbnRzIDE7CiAgICAgIHR5cGUgTmZUeXBlOwogICAgICBkZXNjcmlwdGlvbiAiVHlwZSBvZiB0aGUgTmV0d29yayBGdW5jdGlvbiIgOwogICAgfQoKICAgIGxlYWYgaG9zdEFkZHIgewogICAgICBtYW5kYXRvcnkgdHJ1ZTsKICAgICAgdHlwZSBpbmV0Omhvc3QgOwogICAgICBkZXNjcmlwdGlvbiAiSG9zdCBhZGRyZXNzIG9mIGEgTkYiOwogICAgfQoKICAgIGxlYWYgYXV0aHpJbmZvIHsKICAgICAgdHlwZSBzdHJpbmcgOwogICAgICBkZXNjcmlwdGlvbiAiVGhpcyBwYXJhbWV0ZXIgZGVmaW5lcyBORiBTcGVjaWZpYyBTZXJ2aWNlIGF1dGhvcml6YXRpb24KICAgICAgICBpbmZvcm1hdGlvbi4gSXQgc2hhbGwgaW5jbHVkZSB0aGUgTkYgdHlwZSAocykgYW5kIE5GIHJlYWxtcy9vcmlnaW5zCiAgICAgICAgYWxsb3dlZCB0byBjb25zdW1lIE5GIFNlcnZpY2Uocykgb2YgTkYgU2VydmljZSBQcm9kdWNlci4iOwogICAgICByZWZlcmVuY2UgIlNlZSBUUyAyMy41MDEiIDsKICAgIH0KCiAgICBsZWFmIGxvY2F0aW9uIHsKICAgICAgdHlwZSBzdHJpbmcgOwogICAgICBkZXNjcmlwdGlvbiAiSW5mb3JtYXRpb24gYWJvdXQgdGhlIGxvY2F0aW9uIG9mIHRoZSBORiBpbnN0YW5jZQogICAgICAgIChlLmcuIGdlb2dyYXBoaWMgbG9jYXRpb24sIGRhdGEgY2VudGVyKSBkZWZpbmVkIGJ5IG9wZXJhdG9yIjsKICAgICAgcmVmZXJlbmNlICJUUyAyOS41MTAiIDsKICAgIH0KCiAgICBsZWFmIGNhcGFjaXR5IHsKICAgICAgbWFuZGF0b3J5IHRydWU7CiAgICAgIHR5cGUgdWludDE2IDsKICAgICAgZGVzY3JpcHRpb24gIlRoaXMgcGFyYW1ldGVyIGRlZmluZXMgc3RhdGljIGNhcGFjaXR5IGluZm9ybWF0aW9uCiAgICAgICAgaW4gdGhlIHJhbmdlIG9mIDAtNjU1MzUsIGV4cHJlc3NlZCBhcyBhIHdlaWdodCByZWxhdGl2ZSB0byBvdGhlcgogICAgICAgIE5GIGluc3RhbmNlcyBvZiB0aGUgc2FtZSB0eXBlOyBpZiBjYXBhY2l0eSBpcyBhbHNvIHByZXNlbnQgaW4gdGhlCiAgICAgICAgbmZTZXJ2aWNlTGlzdCBwYXJhbWV0ZXJzLCB0aG9zZSB3aWxsIGhhdmUgcHJlY2VkZW5jZSBvdmVyIHRoaXMgdmFsdWUuIjsKICAgICAgcmVmZXJlbmNlICJUUyAyOS41MTAiIDsKICAgIH0KCiAgICBsZWFmIG5GU3J2R3JvdXBJZCB7CiAgICAgIHR5cGUgc3RyaW5nIDsKICAgICAgZGVzY3JpcHRpb24gIlRoaXMgcGFyYW1ldGVyIGRlZmluZXMgaWRlbnRpdHkgb2YgdGhlIGdyb3VwIHRoYXQgaXMKICAgICAgICBzZXJ2ZWQgYnkgdGhlIE5GIGluc3RhbmNlLgogICAgICAgIE1heSBiZSBjb25maWcgZmFsc2Ugb3IgdHJ1ZSBkZXBlbmRpbmcgb24gdGhlIE1hbmFnZWRGdW5jdGlvbi4KICAgICAgICBDb25maWc9dHJ1ZSBmb3IgVWRyaW5mby4gQ29uZmlnPWZhbHNlIGZvciBVZG1JbmZvIGFuZCBBdXNmSW5mby4KICAgICAgICBTaGFsbCBiZSBwcmVzZW50IGlmIC4uL25mVHlwZSA9IFVETSBvciBBVVNGIG9yIFVEUi4gIjsKICAgICAgcmVmZXJlbmNlICJUUyAyOS41MTAiIDsKICAgIH0KCiAgICBsZWFmLWxpc3Qgc3VwcG9ydGVkRGF0YVNldElkcyB7CiAgICAgIHR5cGUgZW51bWVyYXRpb24gewogICAgICAgIGVudW0gU1VCU0NSSVBUSU9OOwogICAgICAgIGVudW0gUE9MSUNZOwogICAgICAgIGVudW0gRVhQT1NVUkU7CiAgICAgICAgZW51bSBBUFBMSUNBVElPTjsKICAgICAgfQogICAgICBkZXNjcmlwdGlvbiAiTGlzdCBvZiBzdXBwb3J0ZWQgZGF0YSBzZXRzIGluIHRoZSBVRFIgaW5zdGFuY2UuCiAgICAgICAgTWF5IGJlIHByZXNlbnQgaWYgLi4vbmZUeXBlID0gVURSIjsKICAgICAgcmVmZXJlbmNlICJUUyAyOS41MTAiIDsKICAgIH0KCiAgICBsZWFmLWxpc3Qgc21mU2VydmluZ0FyZWFzIHsKICAgICAgdHlwZSBzdHJpbmcgOwogICAgICBkZXNjcmlwdGlvbiAiRGVmaW5lcyB0aGUgU01GIHNlcnZpY2UgYXJlYShzKSB0aGUgVVBGIGNhbiBzZXJ2ZS4KICAgICAgICBTaGFsbCBiZSBwcmVzZW50IGlmIC4uL25mVHlwZSA9IFVQRiI7CiAgICAgIHJlZmVyZW5jZSAiVFMgMjkuNTEwIiA7CiAgICB9CgogICAgbGVhZiBwcmlvcml0eSB7CiAgICAgIHR5cGUgdWludDE2OwogICAgICBkZXNjcmlwdGlvbiAiVGhpcyBwYXJhbWV0ZXIgZGVmaW5lcyBQcmlvcml0eSAocmVsYXRpdmUgdG8gb3RoZXIgTkZzCiAgICAgICAgb2YgdGhlIHNhbWUgdHlwZSkgaW4gdGhlIHJhbmdlIG9mIDAtNjU1MzUsIHRvIGJlIHVzZWQgZm9yIE5GIHNlbGVjdGlvbjsKICAgICAgICBsb3dlciB2YWx1ZXMgaW5kaWNhdGUgYSBoaWdoZXIgcHJpb3JpdHkuIElmIHByaW9yaXR5IGlzIGFsc28gcHJlc2VudAogICAgICAgIGluIHRoZSBuZlNlcnZpY2VMaXN0IHBhcmFtZXRlcnMsIHRob3NlIHdpbGwgaGF2ZSBwcmVjZWRlbmNlIG92ZXIKICAgICAgICB0aGlzIHZhbHVlLiBTaGFsbCBiZSBwcmVzZW50IGlmIC4uL25mVHlwZSA9IEFNRiAiOwogICAgICByZWZlcmVuY2UgIlRTIDI5LjUxMCIgOwogICAgfQogIH0KCiAgdHlwZWRlZiB1c2FnZVN0YXRlIHsKICAgIHR5cGUgZW51bWVyYXRpb24gewogICAgICBlbnVtIElETEU7CiAgICAgIGVudW0gQUNUSVZFOwogICAgICBlbnVtIEJVU1k7CiAgICB9CiAgICBkZXNjcmlwdGlvbiAiSXQgZGVzY3JpYmVzIHdoZXRoZXIgb3Igbm90IHRoZSByZXNvdXJjZSBpcyBhY3RpdmVseSBpbgogICAgICB1c2UgYXQgYSBzcGVjaWZpYyBpbnN0YW50LCBhbmQgaWYgc28sIHdoZXRoZXIgb3Igbm90IGl0IGhhcyBzcGFyZQogICAgICBjYXBhY2l0eSBmb3IgYWRkaXRpb25hbCB1c2VycyBhdCB0aGF0IGluc3RhbnQuIFRoZSB2YWx1ZSBpcyBSRUFELU9OTFkuIjsKICAgIHJlZmVyZW5jZSAiSVRVIFQgUmVjb21tZW5kYXRpb24gWC43MzEiOwogIH0KCiAgZ3JvdXBpbmcgU0FQR3JwIHsKICAgIGxlYWYgaG9zdCB7CiAgICAgIHR5cGUgaW5ldDpob3N0OwogICAgICBtYW5kYXRvcnkgdHJ1ZTsKICAgIH0KICAgIGxlYWYgcG9ydCB7CiAgICAgIHR5cGUgaW5ldDpwb3J0LW51bWJlcjsKICAgICAgbWFuZGF0b3J5IHRydWU7CiAgICB9CiAgICBkZXNjcmlwdGlvbiAiU2VydmljZSBhY2Nlc3MgcG9pbnQuIjsKICAgIHJlZmVyZW5jZSAiVFMgMjguNjIyIjsKICB9CgogIHR5cGVkZWYgTWNjIHsKICAgIGRlc2NyaXB0aW9uICJUaGUgbW9iaWxlIGNvdW50cnkgY29kZSBjb25zaXN0cyBvZiB0aHJlZSBkZWNpbWFsIGRpZ2l0cywKICAgICAgVGhlIGZpcnN0IGRpZ2l0IG9mIHRoZSBtb2JpbGUgY291bnRyeSBjb2RlIGlkZW50aWZpZXMgdGhlIGdlb2dyYXBoaWMKICAgICAgcmVnaW9uICh0aGUgZGlnaXRzIDEgYW5kIDggYXJlIG5vdCB1c2VkKToiOwogICAgdHlwZSBzdHJpbmcgewogICAgICBwYXR0ZXJuICdbMDItNzldWzAtOV1bMC05XSc7CiAgICB9CiAgICByZWZlcmVuY2UgIjNHUFAgVFMgMjMuMDAzIHN1YmNsYXVzZSAyLjIgYW5kIDEyLjEiOwogIH0KCiAgdHlwZWRlZiBNbmMgewogICAgZGVzY3JpcHRpb24gIlRoZSBtb2JpbGUgbmV0d29yayBjb2RlIGNvbnNpc3RzIG9mIHR3byBvciB0aHJlZQogICAgICBkZWNpbWFsIGRpZ2l0cyAoZm9yIGV4YW1wbGU6IE1OQyBvZiAwMDEgaXMgbm90IHRoZSBzYW1lIGFzIE1OQyBvZiAwMSkiOwogICAgdHlwZSBzdHJpbmcgewogICAgICBwYXR0ZXJuICdbMC05XVswLTldWzAtOV18WzAtOV1bMC05XSc7CiAgICB9CiAgICByZWZlcmVuY2UgIjNHUFAgVFMgMjMuMDAzIHN1YmNsYXVzZSAyLjIgYW5kIDEyLjEiOwogIH0KCiAgZ3JvdXBpbmcgUExNTklkIHsKICAgIGxlYWYgbWNjIHsKICAgICAgbWFuZGF0b3J5IHRydWU7CiAgICAgIHR5cGUgTWNjOwogICAgfQogICAgbGVhZiBtbmMgewogICAgICBtYW5kYXRvcnkgdHJ1ZTsKICAgICAgdHlwZSBNbmM7CiAgICB9CiAgICByZWZlcmVuY2UgIlRTIDM4LjQxMyBjbGF1c2UgOS4zLjMuNSI7CiAgfQoKICB0eXBlZGVmIE5jaSB7CiAgICBkZXNjcmlwdGlvbiAiTlIgQ2VsbCBJZGVudGl0eS4gVGhlIE5DSSBzaGFsbCBiZSBvZiBmaXhlZCBsZW5ndGggb2YgMzYgYml0cwogICAgICBhbmQgc2hhbGwgYmUgY29kZWQgdXNpbmcgZnVsbCBoZXhhZGVjaW1hbCByZXByZXNlbnRhdGlvbi4KICAgICAgVGhlIGV4YWN0IGNvZGluZyBvZiB0aGUgTkNJIGlzIHRoZSByZXNwb25zaWJpbGl0eSBvZiBlYWNoIFBMTU4gb3BlcmF0b3IiOwogICAgcmVmZXJlbmNlICJUUyAyMy4wMDMiOwogICAgdHlwZSB1bmlvbiB7CiAgICAgIHR5cGUgc3RyaW5nIHsKICAgICAgICBsZW5ndGggMzY7CiAgICAgICAgcGF0dGVybiAnWzAxXSsnOwogICAgICB9CiAgICAgIHR5cGUgc3RyaW5nIHsKICAgICAgICBsZW5ndGggOTsKICAgICAgICBwYXR0ZXJuICdbYS1mQS1GMC05XSonOwogICAgICB9CiAgICB9CiAgfQoKICB0eXBlZGVmIE9wZXJhdGlvbmFsU3RhdGUgewogICAgcmVmZXJlbmNlICIzR1BQIFRTIDI4LjYyNSBhbmQgSVRVLVQgWC43MzEiOwogICAgdHlwZSBlbnVtZXJhdGlvbiB7CiAgICAgIGVudW0gRElTQUJMRUQgewogICAgICAgIHZhbHVlIDA7CiAgICAgICAgZGVzY3JpcHRpb24gIlRoZSByZXNvdXJjZSBpcyB0b3RhbGx5IGlub3BlcmFibGUuIjsKICAgICAgfQoKICAgICAgZW51bSBFTkFCTEVEIHsKICAgICAgICB2YWx1ZSAxOwogICAgICAgIGRlc2NyaXB0aW9uICJUaGUgcmVzb3VyY2UgaXMgcGFydGlhbGx5IG9yIGZ1bGx5IG9wZXJhYmxlLiI7CiAgICAgIH0KCiAgICB9CiAgfQoKICB0eXBlZGVmIEJhc2ljQWRtaW5pc3RyYXRpdmVTdGF0ZSB7CiAgICByZWZlcmVuY2UgIjNHUFAgVFMgMjguNjI1IGFuZCBJVFUtVCBYLjczMSI7CiAgICB0eXBlIGVudW1lcmF0aW9uIHsKICAgICAgZW51bSBMT0NLRUQgewogICAgICAgIHZhbHVlIDA7CiAgICAgICAgZGVzY3JpcHRpb24gIlRoZSByZXNvdXJjZSBpcyBhZG1pbmlzdHJhdGl2ZWx5IHByb2hpYml0ZWQgZnJvbSBwZXJmb3JtaW5nCiAgICAgICAgICAgICAgICAgc2VydmljZXMgZm9yIGl0cyB1c2Vycy4iOwogICAgICB9CgogICAgICBlbnVtIFVOTE9DS0VEIHsKICAgICAgICB2YWx1ZSAxOwogICAgICAgIGRlc2NyaXB0aW9uICJUaGUgcmVzb3VyY2UgaXMgYWRtaW5pc3RyYXRpdmVseSBwZXJtaXR0ZWQgdG8gcGVyZm9ybQogICAgICAgICAgc2VydmljZXMgZm9yIGl0cyB1c2Vycy4gVGhpcyBpcyBpbmRlcGVuZGVudCBvZiBpdHMgaW5oZXJlbnQKICAgICAgICAgIG9wZXJhYmlsaXR5LiI7CiAgICAgIH0KICAgIH0KICB9CgogIHR5cGVkZWYgQWRtaW5pc3RyYXRpdmVTdGF0ZSB7CiAgICByZWZlcmVuY2UgIjNHUFAgVFMgMjguNjI1IGFuZCBJVFUtVCBYLjczMSI7CiAgICB0eXBlIGVudW1lcmF0aW9uIHsKICAgICAgZW51bSBMT0NLRUQgewogICAgICAgIHZhbHVlIDA7CiAgICAgICAgZGVzY3JpcHRpb24gIlRoZSByZXNvdXJjZSBpcyBhZG1pbmlzdHJhdGl2ZWx5IHByb2hpYml0ZWQgZnJvbSBwZXJmb3JtaW5nCiAgICAgICAgICAgICAgICAgc2VydmljZXMgZm9yIGl0cyB1c2Vycy4iOwogICAgICB9CgogICAgICBlbnVtIFVOTE9DS0VEIHsKICAgICAgICB2YWx1ZSAxOwogICAgICAgIGRlc2NyaXB0aW9uICJUaGUgcmVzb3VyY2UgaXMgYWRtaW5pc3RyYXRpdmVseSBwZXJtaXR0ZWQgdG8gcGVyZm9ybQogICAgICAgICAgc2VydmljZXMgZm9yIGl0cyB1c2Vycy4gVGhpcyBpcyBpbmRlcGVuZGVudCBvZiBpdHMgaW5oZXJlbnQKICAgICAgICAgIG9wZXJhYmlsaXR5LiI7CiAgICAgIH0KCiAgICAgIGVudW0gU0hVVFRJTkdET1dOIHsKICAgICAgICB2YWx1ZSAyOwogICAgICAgIGRlc2NyaXB0aW9uICJVc2Ugb2YgdGhlIHJlc291cmNlIGlzIGFkbWluaXN0cmF0aXZlbHkgcGVybWl0dGVkIHRvCiAgICAgICAgICBleGlzdGluZyBpbnN0YW5jZXMgb2YgdXNlIG9ubHkuIFdoaWxlIHRoZSBzeXN0ZW0gcmVtYWlucyBpbgogICAgICAgICAgdGhlIHNodXR0aW5nIGRvd24gc3RhdGUgdGhlIG1hbmFnZXIgb3IgdGhlIG1hbmFnZWQgZWxlbWVudAogICAgICAgICAgbWF5IGF0IGFueSB0aW1lIGNhdXNlIHRoZSByZXNvdXJjZSB0byB0cmFuc2l0aW9uIHRvIHRoZQogICAgICAgICAgbG9ja2VkIHN0YXRlLiI7CiAgICAgIH0KICAgIH0KICB9CgogIHR5cGVkZWYgQXZhaWxhYmlsaXR5U3RhdHVzIHsKICAgICAgdHlwZSBlbnVtZXJhdGlvbiB7CiAgICAgICAgICBlbnVtIElOX1RFU1Q7CiAgICAgICAgICBlbnVtIEZBSUxFRDsKICAgICAgICAgIGVudW0gUE9XRVJfT0ZGOwogICAgICAgICAgZW51bSBPRkZfTElORTsKICAgICAgICAgIGVudW0gT0ZGX0RVVFk7CiAgICAgICAgICBlbnVtIERFUEVOREVOQ1k7CiAgICAgICAgICBlbnVtIERFR1JBREVEOwogICAgICAgICAgZW51bSBOT1RfSU5TVEFMTEVEOwogICAgICAgICAgZW51bSBMT0dfRlVMTDsKICAgICAgIH0KICB9CgogIHR5cGVkZWYgQ2VsbFN0YXRlIHsKICAgICAgdHlwZSBlbnVtZXJhdGlvbiB7CiAgICAgICAgZW51bSBJRExFOwogICAgICAgIGVudW0gSU5BQ1RJVkU7CiAgICAgICAgZW51bSBBQ1RJVkU7CiAgICAgfQogIH0KCiAgdHlwZWRlZiBOcnBjaSB7CiAgICB0eXBlIHVpbnQzMjsKICAgIGRlc2NyaXB0aW9uICJQaHlzaWNhbCBDZWxsIElkZW50aXR5IChQQ0kpIG9mIHRoZSBOUiBjZWxsLiI7CiAgICByZWZlcmVuY2UgIlRTIDM2LjIxMSBzdWJjbGF1c2UgNi4xMSI7CiAgfQoKICB0eXBlZGVmIFRhYyB7CiAgICB0eXBlIGludDMyIHsKICAgICAgcmFuZ2UgMC4uMTY3NzcyMTUgOwogICAgfQogICAgZGVzY3JpcHRpb24gIlRyYWNraW5nIEFyZWEgQ29kZSI7CiAgICByZWZlcmVuY2UgIlRTIDIzLjAwMyBjbGF1c2UgMTkuNC4yLjMiOwogIH0KCiAgZ3JvdXBpbmcgVGFpR3JwIHsKICAgIGRlc2NyaXB0aW9uICJUaGlzIDw8ZGF0YVR5cGU+PiBkZWZpbmVzIGEgVHJhY2tpbmcgQXJlYSBJZGVudGl0eSAoVEFJKQogICAgICBhcyBzcGVjaWZpZWQgaW4gY2xhdXNlIDI4LjYgb2YgVFMgMjMuMDAzLCBjbGF1c2UgOC4yIG9mIFRTIDM4LjMwMAogICAgICBhbmQgY2xhdXNlIDkuMy4zLjExIG9mIFRTIDM4LjQxMy4gSXQgaXMgY29tcG9zZWQgb2YgdGhlIFBMTU4KICAgICAgaWRlbnRpZmllciAoUExNTi1JZCwgd2hpY2ggaXMgY29tcG9zZWQgb2YgdGhlIE1DQyBhbmQgTU5DKSBhbmQKICAgICAgdGhlIFRyYWNraW5nIEFyZWEgQ29kZSAoVEFDKS4gIjsKICAgIGxpc3QgcGxtbklkIHsKICAgICAgZGVzY3JpcHRpb24gIlBMTU4gSWRlbnRpdHkuIjsKICAgICAgbWluLWVsZW1lbnRzIDE7CiAgICAgIG1heC1lbGVtZW50cyAxOwogICAgICBrZXkgIm1jYyBtbmMiOwogICAgICB1c2VzIHR5cGVzM2dwcDpQTE1OSWQ7CiAgICB9CgogICAgbGVhZiB0YWMgeyB0eXBlIFRhYzsgfQogIH0KCiAgZ3JvdXBpbmcgR2VvQ29vcmRpbmF0ZUdycCB7CiAgICBkZXNjcmlwdGlvbiAiR2VvZ3JhcGhpY2FsIGxvY2F0aW9uIG9uIGVhcnRoIjsKICAgIGxlYWYgbGF0aXR1ZGUgewogICAgICB0eXBlIGRlY2ltYWw2NCB7CiAgICAgICAgZnJhY3Rpb24tZGlnaXRzIDQ7CiAgICAgICAgcmFuZ2UgLTkwLi45MCA7CiAgICAgIH0KICAgICAgbWFuZGF0b3J5IHRydWU7CiAgICAgIGRlc2NyaXB0aW9uICJMYXRpdHVkZSBiYXNlZCBvbiBXb3JsZCBHZW9kZXRpYyBTeXN0ZW0gKDE5ODQgdmVyc2lvbikKICAgICAgICBnbG9iYWwgcmVmZXJlbmNlIGZyYW1lIChXR1MgODQpLiBQb3NpdGl2ZSB2YWx1ZXMgY29ycmVzcG9uZCB0byB0aGUKICAgICAgICBub3J0aGVybiBoZW1pc3BoZXJlLiI7CiAgICAgIH0KCiAgICBsZWFmIGxvbmdpdHVkZSB7CiAgICAgIHR5cGUgZGVjaW1hbDY0IHsKICAgICAgICBmcmFjdGlvbi1kaWdpdHMgNDsKICAgICAgICByYW5nZSAtMTgwLi4xODAgOwogICAgICB9CiAgICAgIG1hbmRhdG9yeSB0cnVlOwogICAgICBkZXNjcmlwdGlvbiAiTG9uZ2l0dWRlIGJhc2VkIG9uIFdvcmxkIEdlb2RldGljIFN5c3RlbSAoMTk4NCB2ZXJzaW9uKQogICAgICAgIGdsb2JhbCByZWZlcmVuY2UgZnJhbWUgKFdHUyA4NCkuIFBvc2l0aXZlIHZhbHVlcyBjb3JyZXNwb25kIHRvCiAgICAgICAgZGVncmVlcyBlYXN0IG9mIDAgZGVncmVlcyBsb25naXR1ZGUuIjsKICAgIH0KICB9CgogIGdyb3VwaW5nIEdlb0FyZWFHcnAgewogICAgZGVzY3JpcHRpb24gIlRoaXMgZGF0YSB0eXBlIGRlZmluZXMgYSBnZW9ncmFwaGljYWwgYXJlYS4KICAgICAgVGhlIGdlby1hcmVhIGlzIGRlZmluZWQgdXNpbmcgYSBjb252ZXggcG9seWdvbiBpbiB0aGUgYXR0cmlidXRlCiAgICAgICdjb252ZXhHZW9Qb2x5Z29uJy4iOwoKICAgIGxpc3QgY29udmV4R2VvUG9seWdvbiB7CiAgICAgIGRlc2NyaXB0aW9uICJTcGVjaWZpZXMgdGhlIGdlb2dyYXBoaWNhbCBhcmVhIHdpdGggYSBjb252ZXggcG9seWdvbi4KICAgICAgICBUaGUgY29udmV4IHBvbHlnb24gaXMgc3BlY2lmaWVkIGJ5IGl0cyBjb3JuZXJzLiI7CiAgICAgICAga2V5ICJsYXRpdHVkZSBsb25naXR1ZGUiOwogICAgICBtaW4tZWxlbWVudHMgMzsKICAgICAgb3JkZXJlZC1ieSB1c2VyOwoKICAgICAgdXNlcyBHZW9Db29yZGluYXRlR3JwOwogICAgfQogIH0KCiAgdHlwZWRlZiBBbWZSZWdpb25JZCB7CiAgICB0eXBlIHVuaW9uIHsKICAgICAgdHlwZSB1aW50OCA7CiAgICAgIHR5cGUgc3RyaW5nIHsKICAgICAgICBsZW5ndGggODsKICAgICAgICBwYXR0ZXJuICdbMDFdKic7CiAgICAgIH0KICAgIH0KICAgIHJlZmVyZW5jZSAiY2xhdXNlIDIuMTAuMSBvZiAzR1BQIFRTIDIzLjAwMyI7CiAgfQoKICB0eXBlZGVmIEFtZlNldElkIHsKICAgIHR5cGUgdW5pb24gewogICAgICB0eXBlIHVpbnQxNiB7CiAgICAgICAgcmFuZ2UgJzAuLjEwMjMnOwogICAgICB9CiAgICAgIHR5cGUgc3RyaW5nIHsKICAgICAgICBsZW5ndGggODsKICAgICAgICBwYXR0ZXJuICdbMDFdKic7CiAgICAgIH0KICAgIH0KICAgIHJlZmVyZW5jZSAiY2xhdXNlIDIuMTAuMSBvZiAzR1BQIFRTIDIzLjAwMyI7CiAgfQoKICB0eXBlZGVmIEFtZlBvaW50ZXIgewogICAgdHlwZSB1bmlvbiB7CiAgICAgIHR5cGUgdWludDggewogICAgICAgIHJhbmdlICcwLi42Myc7CiAgICAgIH0KICAgICAgdHlwZSBzdHJpbmcgewogICAgICAgIGxlbmd0aCA2OwogICAgICAgIHBhdHRlcm4gJ1swMV0qJzsKICAgICAgfQogICAgfQogICAgcmVmZXJlbmNlICJjbGF1c2UgMi4xMC4xIG9mIDNHUFAgVFMgMjMuMDAzIjsKICB9CgogIGdyb3VwaW5nIEFtZklkZW50aWZpZXIgewogICAgbGVhZiBhbWZSZWdpb25JZCB7CiAgICAgIHR5cGUgQW1mUmVnaW9uSWQ7CiAgICB9CiAgICBsZWFmIGFtZlNldElkIHsKICAgICAgdHlwZSBBbWZTZXRJZDsKICAgIH0KICAgIGxlYWYgYW1mUG9pbnRlciB7CiAgICAgIHR5cGUgQW1mUG9pbnRlcjsKICAgIH0KICAgIGRlc2NyaXB0aW9uICJUaGUgQU1GSSBpcyBjb25zdHJ1Y3RlZCBmcm9tIGFuIEFNRiBSZWdpb24gSUQsCiAgICAgIGFuIEFNRiBTZXQgSUQgYW5kIGFuIEFNRiBQb2ludGVyLgogICAgICBUaGUgQU1GIFJlZ2lvbiBJRCBpZGVudGlmaWVzIHRoZSByZWdpb24sCiAgICAgIHRoZSBBTUYgU2V0IElEIHVuaXF1ZWx5IGlkZW50aWZpZXMgdGhlIEFNRiBTZXQgd2l0aGluIHRoZSBBTUYgUmVnaW9uLCBhbmQKICAgICAgdGhlIEFNRiBQb2ludGVyIHVuaXF1ZWx5IGlkZW50aWZpZXMgdGhlIEFNRiB3aXRoaW4gdGhlIEFNRiBTZXQuICI7CiAgfQoKLy8gdHlwZSBkZWZpbml0aW9ucyBlc3BlY2lhbGx5IGZvciBjb3JlIE5GcwoKICB0eXBlZGVmIE5mVHlwZSB7CiAgICB0eXBlIGVudW1lcmF0aW9uIHsKICAgICAgZW51bSBOUkY7CiAgICAgIGVudW0gVURNOwogICAgICBlbnVtIEFNRjsKICAgICAgZW51bSBTTUY7CiAgICAgIGVudW0gQVVTRjsKICAgICAgZW51bSBORUY7CiAgICAgIGVudW0gUENGOwogICAgICBlbnVtIFNNU0Y7CiAgICAgIGVudW0gTlNTRjsKICAgICAgZW51bSBVRFI7CiAgICAgIGVudW0gTE1GOwogICAgICBlbnVtIEdNTEM7CiAgICAgIGVudW0gNUdfRUlSOwogICAgICBlbnVtIFNFUFA7CiAgICAgIGVudW0gVVBGOwogICAgICBlbnVtIE4zSVdGOwogICAgICBlbnVtIEFGOwogICAgICBlbnVtIFVEU0Y7CiAgICAgIGVudW0gQlNGOwogICAgICBlbnVtIENIRjsKICAgIH0KICB9CgogIHR5cGVkZWYgTm90aWZpY2F0aW9uVHlwZSB7CiAgICB0eXBlIGVudW1lcmF0aW9uIHsKICAgICAgZW51bSBOMV9NRVNTQUdFUzsKICAgICAgZW51bSBOMl9JTkZPUk1BVElPTjsKICAgICAgZW51bSBMT0NBVElPTl9OT1RJRklDQVRJT047CiAgICB9CiAgfQoKICB0eXBlZGVmIExvYWQgewogICAgZGVzY3JpcHRpb24gIkxhdGVzdCBrbm93biBsb2FkIGluZm9ybWF0aW9uIG9mIHRoZSBORiwgcGVyY2VudGFnZSAiOwogICAgdHlwZSB1aW50OCB7CiAgICAgIHJhbmdlIDAuLjEwMDsKICAgIH0KICB9CgogIHR5cGVkZWYgTjFNZXNzYWdlQ2xhc3MgewogICAgdHlwZSBlbnVtZXJhdGlvbiB7CiAgICAgIGVudW0gNUdNTTsKICAgICAgZW51bSBTTTsKICAgICAgZW51bSBMUFA7CiAgICAgIGVudW0gU01TOwogICAgfQogIH0KCiAgdHlwZWRlZiBOMkluZm9ybWF0aW9uQ2xhc3MgewogICAgdHlwZSBlbnVtZXJhdGlvbiB7CiAgICAgIGVudW0gU007CiAgICAgIGVudW0gTlJQUEE7CiAgICAgIGVudW0gUFdTOwogICAgICBlbnVtIFBXU19CQ0FMOwogICAgICBlbnVtIFBXU19SRjsKICAgIH0KICB9CgogIGdyb3VwaW5nIERlZmF1bHROb3RpZmljYXRpb25TdWJzY3JpcHRpb24gewoKICAgIGxlYWYgbm90aWZpY2F0aW9uVHlwZSB7CiAgICAgIHR5cGUgTm90aWZpY2F0aW9uVHlwZTsKICAgIH0KCiAgICBsZWFmIGNhbGxiYWNrVXJpIHsKICAgICAgdHlwZSBpbmV0OnVyaTsKICAgIH0KCiAgICBsZWFmIG4xTWVzc2FnZUNsYXNzIHsKICAgICAgdHlwZSBOMU1lc3NhZ2VDbGFzczsKICAgIH0KCiAgICBsZWFmIG4ySW5mb3JtYXRpb25DbGFzcyB7CiAgICAgIHR5cGUgTjJJbmZvcm1hdGlvbkNsYXNzOwogICAgfQogIH0KCiAgZ3JvdXBpbmcgSXB2NEFkZHJlc3NSYW5nZSB7CiAgbGVhZiBzdGFydCB7CiAgICB0eXBlIGluZXQ6aXB2NC1hZGRyZXNzOwogICAgfQogIGxlYWYgZW5kIHsKICAgIHR5cGUgaW5ldDppcHY0LWFkZHJlc3M7CiAgICB9CiAgfQoKICBncm91cGluZyBJcHY2UHJlZml4UmFuZ2UgewogIGxlYWYgc3RhcnQgewogICAgdHlwZSBpbmV0OmlwdjYtcHJlZml4OwogICAgfQogIGxlYWYgZW5kIHsKICAgIHR5cGUgaW5ldDppcHY2LXByZWZpeDsKICAgIH0KICB9CgogIHR5cGVkZWYgTnNpSWQgewogICAgdHlwZSBzdHJpbmc7CiAgfQoKICB0eXBlZGVmIFVlTW9iaWxpdHlMZXZlbCB7CiAgICB0eXBlIGVudW1lcmF0aW9uIHsKICAgICAgZW51bSBTVEFUSU9OQVJZOwogICAgICBlbnVtIE5PTUFESUM7CiAgICAgIGVudW0gUkVTVFJJQ1RFRF9NT0JJTElUWTsKICAgICAgZW51bSBGVUxMWV9NT0JJTElUWTsKICAgIH0KICB9CgogIHR5cGVkZWYgUmVzb3VyY2VTaGFyaW5nTGV2ZWwgewogICAgICB0eXBlIGVudW1lcmF0aW9uIHsKICAgICAgICBlbnVtIFNIQVJFRDsKICAgICAgICBlbnVtIE5PVF9TSEFSRUQ7CiAgICAgIH0KICB9CgogIHR5cGVkZWYgVHhEaXJlY3Rpb24gewogICAgICB0eXBlIGVudW1lcmF0aW9uIHsKICAgICAgICBlbnVtIERMOwogICAgICAgIGVudW0gVUw7CiAgICAgICAgZW51bSBETF9BTkRfVUw7CiAgICAgIH0KICB9CgogIGdyb3VwaW5nIEFkZHJlc3NXaXRoVmxhbiB7CiAgICBsZWFmIGlwQWRkcmVzcyB7CiAgICAgIHR5cGUgaW5ldDppcC1hZGRyZXNzOwogICAgfQogICAgbGVhZiB2bGFuSWQgewogICAgICAgdHlwZSB1aW50MTY7CiAgICB9CiAgfQoKICAvKiBEaXN0aW5ndWlzaGVkTmFtZSBwYXR0ZXJuIGlzIGJ1aWx0IHVwIGJhc2VkIG9uIHRoZQogICAgRUJORiBpbiAzMi4zMDAgY2xhdXNlIDcuMyAgRUJORiBvZiBETiBTdHJpbmcgUmVwcmVzZW50YXRpb24KCiAgICBsZWFmIEROIHsgdHlwZSBzdHJpbmcgeyAgIC8vICBTYW1lIHBhdHRlcm4gYXMgTG9jYWxETgogICAgICBwYXR0ZXJuICdbQS1aXVteLD0rPD4jO1xcIlxyXG4qLl0qPShbXiw9Kzw+IztcXCJcclxuKiBdfChcXFthLWZBLUYwLTldezJ9KSkoKFteLD0rPD4jO1xcIlxyXG4qXXwoXFxbYS1mQS1GMC05XXsyfSkpKihbXiw9Kzw+IztcXCJcclxuKiBdfChcXFthLWZBLUYwLTldezJ9KSkpPygsW0EtWl1bXiw9Kzw+IztcXCJcclxuKi5dKj0oW14sPSs8PiM7XFwiXHJcbiogXXwoXFxbYS1mQS1GMC05XXsyfSkpKChbXiw9Kzw+IztcXCJcclxuKl18KFxcW2EtZkEtRjAtOV17Mn0pKSooW14sPSs8PiM7XFwiXHJcbiogXXwoXFxbYS1mQS1GMC05XXsyfSkpKT8pKic7CiAgICB9IH0KCiAgICBsZWFmIGZ1bGxMb2NhbEROIHsgdHlwZSBzdHJpbmcgeyAgIC8vIExvY2FsUkROICwgeyBSRE5TZXBhcmF0b3IgLCBMb2NhbFJETiB9ICAgIFJETlNlcGFyYXRvciBpcyBhIHNpbmdsZSAsIG5vIHNwYWNlIG9yIFxSIGFsbG93ZWQgICBNZS5teWtleT0xIGFsbG93ZWQKICAgICAgLy8gIChmdWxsTG9jYWxSRE4pKCwoZnVsbExvY2FsUkROKSkqCiAgICAgIHBhdHRlcm4gJygoW0EtWl1bXiw9Kzw+IztcXCJcclxuKi5dKnwoW0EtWl1bXiw9Kzw+IztcXCJcclxuKi5dKlwuW2Etel1bXiw9Kzw+IztcXCJcclxuKi5dKikpPSgoW14sPSs8PiM7XFwiXHJcbiogXXwoXFxbYS1mQS1GMC05XXsyfSkpKChbXiw9Kzw+IztcXCJcclxuKl18KFxcW2EtZkEtRjAtOV17Mn0pKSooW14sPSs8PiM7XFwiXHJcbiogXXwoXFxbYS1mQS1GMC05XXsyfSkpKT8pKSgsKChbQS1aXVteLD0rPD4jO1xcIlxyXG4qLl0qfChbQS1aXVteLD0rPD4jO1xcIlxyXG4qLl0qXC5bYS16XVteLD0rPD4jO1xcIlxyXG4qLl0qKSk9KChbXiw9Kzw+IztcXCJcclxuKiBdfChcXFthLWZBLUYwLTldezJ9KSkoKFteLD0rPD4jO1xcIlxyXG4qXXwoXFxbYS1mQS1GMC05XXsyfSkpKihbXiw9Kzw+IztcXCJcclxuKiBdfChcXFthLWZBLUYwLTldezJ9KSkpPykpKSonOwogICAgfSB9CgogICAgbGVhZiBMb2NhbEROIHsgdHlwZSBzdHJpbmcgeyAgIC8vIExvY2FsUkROICwgeyBSRE5TZXBhcmF0b3IgLCBMb2NhbFJETiB9ICAgIFJETlNlcGFyYXRvciBpcyBhIHNpbmdsZSAsIG5vIHNwYWNlIG9yIFxSIGFsbG93ZWQKICAgICAgLy8gIExvY2FsUkROKCxMb2NhbFJETikqCiAgICAgIHBhdHRlcm4gJ1tBLVpdW14sPSs8PiM7XFwiXHJcbiouXSo9KFteLD0rPD4jO1xcIlxyXG4qIF18KFxcW2EtZkEtRjAtOV17Mn0pKSgoW14sPSs8PiM7XFwiXHJcbipdfChcXFthLWZBLUYwLTldezJ9KSkqKFteLD0rPD4jO1xcIlxyXG4qIF18KFxcW2EtZkEtRjAtOV17Mn0pKSk/KCxbQS1aXVteLD0rPD4jO1xcIlxyXG4qLl0qPShbXiw9Kzw+IztcXCJcclxuKiBdfChcXFthLWZBLUYwLTldezJ9KSkoKFteLD0rPD4jO1xcIlxyXG4qXXwoXFxbYS1mQS1GMC05XXsyfSkpKihbXiw9Kzw+IztcXCJcclxuKiBdfChcXFthLWZBLUYwLTldezJ9KSkpPykqJzsKICAgIH0gfQoKICAgIGxlYWYgZnVsbExvY2FsUkROIHsgdHlwZSBzdHJpbmcgeyAgIC8vIHNhbWUgYXMgZnVsbExvY2FsRE5BdHRyaWJ1dGVUeXBlQW5kVmFsdWUKICAgICAgcGF0dGVybiAnKFtBLVpdW14sPSs8PiM7XFwiXHJcbiouXSp8KFtBLVpdW14sPSs8PiM7XFwiXHJcbiouXSpcLlthLXpdW14sPSs8PiM7XFwiXHJcbiouXSopKT0oKFteLD0rPD4jO1xcIlxyXG4qIF18KFxcW2EtZkEtRjAtOV17Mn0pKSgoW14sPSs8PiM7XFwiXHJcbipdfChcXFthLWZBLUYwLTldezJ9KSkqKFteLD0rPD4jO1xcIlxyXG4qIF18KFxcW2EtZkEtRjAtOV17Mn0pKSk/KSc7CiAgICB9IH0KCiAgICBsZWFmIExvY2FsUkROIHsgdHlwZSBzdHJpbmcgeyAgIC8vIHNhbWUgYXMgTG9jYWxETkF0dHJpYnV0ZVR5cGVBbmRWYWx1ZQogICAgICBwYXR0ZXJuICdbQS1aXVteLD0rPD4jO1xcIlxyXG4qLl0qPShbXiw9Kzw+IztcXCJcclxuKiBdfChcXFthLWZBLUYwLTldezJ9KSkoKFteLD0rPD4jO1xcIlxyXG4qXXwoXFxbYS1mQS1GMC05XXsyfSkpKihbXiw9Kzw+IztcXCJcclxuKiBdfChcXFthLWZBLUYwLTldezJ9KSkpPyc7CiAgICB9IH0KCiAgICBsZWFmIGZ1bGxMb2NhbEROQXR0cmlidXRlVHlwZUFuZFZhbHVlIHsgdHlwZSBzdHJpbmcgeyAvLyBMb2NhbEROQXR0cmlidXRlVHlwZSAsIEF0dHJpYnV0ZVR5cGVBbmRWYWx1ZVNlcGFyYXRvciAsIFJlZ3VsYXJBdHRyaWJ1dGVWYWx1ZQogICAgICAvLyBwYXR0ZXJuIExvY2FsRE5BdHRyaWJ1dGVUeXBlPVJlZ3VsYXJBdHRyaWJ1dGVWYWx1ZQogICAgICBwYXR0ZXJuICcoW0EtWl1bXiw9Kzw+IztcXCJcclxuKi5dKnwoW0EtWl1bXiw9Kzw+IztcXCJcclxuKi5dKlwuW2Etel1bXiw9Kzw+IztcXCJcclxuKi5dKikpPSgoW14sPSs8PiM7XFwiXHJcbiogXXwoXFxbYS1mQS1GMC05XXsyfSkpKChbXiw9Kzw+IztcXCJcclxuKl18KFxcW2EtZkEtRjAtOV17Mn0pKSooW14sPSs8PiM7XFwiXHJcbiogXXwoXFxbYS1mQS1GMC05XXsyfSkpKT8pJzsKICAgIH0gfQoKICAgICAgLy8gbGltaXRhdGlvbjogTmFtZXNPZkNsYXNzQW5kTmFtaW5nQXR0cmlidXRlbm90IHN1cHBvcnRlZCBNZS5teWtleT0xCiAgICBsZWFmIExvY2FsRE5BdHRyaWJ1dGVUeXBlQW5kVmFsdWUgeyB0eXBlIHN0cmluZyB7CiAgICAgIC8vIGVibmYxICAgICAgICAgIExvY2FsRE5BdHRyaWJ1dGVUeXBlICwgQXR0cmlidXRlVHlwZUFuZFZhbHVlU2VwYXJhdG9yICwgUmVndWxhckF0dHJpYnV0ZVZhbHVlCiAgICAgIC8vIGVibmYyLWxpbWl0ZWQgIE5hbWVPZkNsYXNzV2l0aElkQXR0cmlidXRlICwgQXR0cmlidXRlVHlwZUFuZFZhbHVlU2VwYXJhdG9yICwgUmVndWxhckF0dHJpYnV0ZVZhbHVlCiAgICAgIC8vIHBhdHRlcm4gICAgICAgIE5hbWVPZkNsYXNzV2l0aElkQXR0cmlidXRlPVJlZ3VsYXJBdHRyaWJ1dGVWYWx1ZQogICAgICBwYXR0ZXJuICdbQS1aXVteLD0rPD4jO1xcIlxyXG4qLl0qPShbXiw9Kzw+IztcXCJcclxuKiBdfChcXFthLWZBLUYwLTldezJ9KSkoKFteLD0rPD4jO1xcIlxyXG4qXXwoXFxbYS1mQS1GMC05XXsyfSkpKihbXiw9Kzw+IztcXCJcclxuKiBdfChcXFthLWZBLUYwLTldezJ9KSkpPyc7CiAgICB9IH0KCiAgICBsZWFmIExvY2FsRE5BdHRyaWJ1dGVUeXBlIHsgdHlwZSBzdHJpbmcgeyAgIC8vIE5hbWVPZkNsYXNzV2l0aElkQXR0cmlidXRlIHwgTmFtZXNPZkNsYXNzQW5kTmFtaW5nQXR0cmlidXRlICBSRE5TZXBhcmF0b3IgaXMgYSBzaW5nbGUgLCBubyBzcGFjZSBvciBcUiBhbGxvd2VkCiAgICAgIC8vICBOYW1lT2ZDbGFzc1dpdGhJZEF0dHJpYnV0ZXxOYW1lc09mQ2xhc3NBbmROYW1pbmdBdHRyaWJ1dGUKICAgICAgcGF0dGVybiAnW0EtWl1bXiw9Kzw+IztcXCJcclxuKi5dKnwoW0EtWl1bXiw9Kzw+IztcXCJcclxuKi5dKlwuW2Etel1bXiw9Kzw+IztcXCJcclxuKi5dKiknOwogICAgfSB9CgogICAgbGVhZiBSZWd1bGFyQXR0cmlidXRlVmFsdWUgeyB0eXBlIHN0cmluZyB7ICAgICAgIC8vICggQXR0cmlidXRlVmFsdWVDaGFyIC0gU3BhY2VDaGFyICkgLCBbIHsgQXR0cmlidXRlVmFsdWVDaGFyIH0gLCAoIEF0dHJpYnV0ZVZhbHVlQ2hhciAtIFNwYWNlQ2hhciApIF0KICAgICAgcGF0dGVybiAnKFteLD0rPD4jO1xcIlxyXG4qIF18KFxcW2EtZkEtRjAtOV17Mn0pKSgoW14sPSs8PiM7XFwiXHJcbipdfChcXFthLWZBLUYwLTldezJ9KSkqKFteLD0rPD4jO1xcIlxyXG4qIF18KFxcW2EtZkEtRjAtOV17Mn0pKSk/JyA7CiAgICB9IH0KCiAgICBsZWFmIE5hbWVzT2ZDbGFzc0FuZE5hbWluZ0F0dHJpYnV0ZSAgeyB0eXBlIHN0cmluZyB7ICAvLyBDbGFzc05hbWUgLCBDbGFzc05hbWluZ0F0dHJpYnV0ZVNlcGFyYXRvciAsIE5hbWluZ0F0dHJpYnV0ZU5hbWUKICAgICAgLy8gcGF0dGVybjogQ2xhc3NOYW1lXC5OYW1pbmdBdHRyaWJ1dGVOYW1lCiAgICAgIHBhdHRlcm4gJ1tBLVpdW14sPSs8PiM7XFwiXHJcbiouXSpcLlthLXpdW14sPSs8PiM7XFwiXHJcbiouXSonIDsKICAgIH0gfQoKICAgIGxlYWYgcmVzdHJpY3RpdmVDbGFzc05hbWUgeyB0eXBlIHN0cmluZyB7ICAgICAvLwogICAgICBwYXR0ZXJuICdbYS16QS1aXVthLXpBLVowLTktX10qJyA7CiAgICB9IH0KCiAgICBsZWFmIENsYXNzTmFtZSB7IHR5cGUgc3RyaW5nIHsgICAgIC8vIENhcGl0YWxMZXR0ZXJDaGFyICwgeyBMb2NhbEROQXR0cmlidXRlVHlwZUNoYXIgfQogICAgICBwYXR0ZXJuICdbQS1aXVteLD0rPD4jO1xcIlxyXG4qLl0qJyA7CiAgICB9IH0KCiAgICBsZWFmIE5hbWluZ0F0dHJpYnV0ZU5hbWUgeyB0eXBlIHN0cmluZyB7ICAgLy8gU21hbGxMZXR0ZXJDaGFyICwgeyBMb2NhbEROQXR0cmlidXRlVHlwZUNoYXIgfQogICAgICBwYXR0ZXJuICdbYS16XVteLD0rPD4jO1xcIlxyXG4qLl0qJyA7CiAgICB9IH0KCiAgKi8KICB0eXBlZGVmIERpc3Rpbmd1aXNoZWROYW1lIHsKICAgIHR5cGUgc3RyaW5nIHsKICAgICAgcGF0dGVybiAnW0EtWl1bXiw9Kzw+IztcXCJcclxuKi5dKj0oW14sPSs8PiM7XFwiXHJcbiogXXwnCiAgICAgICsgJyhcXFthLWZBLUYwLTldezJ9KSkoKFteLD0rPD4jO1xcIlxyXG4qXXwoXFxbYS1mQS1GMC05XXsyfSkpKicKICAgICAgKyAnKFteLD0rPD4jO1xcIlxyXG4qIF18KFxcW2EtZkEtRjAtOV17Mn0pKSk/JwogICAgICArICcoLFtBLVpdW14sPSs8PiM7XFwiXHJcbiouXSo9KFteLD0rPD4jO1xcIlxyXG4qIF18KFxcW2EtZkEtRjAtOV17Mn0pKScKICAgICAgKyAnKChbXiw9Kzw+IztcXCJcclxuKl18KFxcW2EtZkEtRjAtOV17Mn0pKSonCiAgICAgICsgJyhbXiw9Kzw+IztcXCJcclxuKiBdfChcXFthLWZBLUYwLTldezJ9KSkpPykqJzsKICAgIH0KICAgIGRlc2NyaXB0aW9uICJSZXByZXNlbnRzIHRoZSAzR1BQIHN0YW5kYXJkIGZvciBEaXN0aW5ndWlzaGVkTmFtZS4KCiAgICAgIExpbWl0YXRpb25zOgogICAgICAtIFJETlNlcGFyYXRvcjogZG9uJ3QgYWxsb3cgU3BhY2VDaGFyIG9yIENhcnJpYWdlUmV0dXJuQ2hhcgogICAgICAtIE51bGxETjogRGlzYWxsb3cgbnVsbEROIHRoYXQgaXMgdGhlIHNhbWUgYXMgbm90IHByb3ZpZGluZyBhIEROCiAgICAgIC0gTmFtZXNPZkNsYXNzQW5kTmFtaW5nQXR0cmlidXRlIGZvcm1hdCBub3QgYWxsb3dlZAogICAgICAgIChlZy4gTWFuYWdlZEVsZW1lbnQubXlrZXk9MzQ1NDM2KSI7CiAgICByZWZlcmVuY2UgICIzR1BQIFRTIDMyLjMwMCI7CiAgfQoKICB0eXBlZGVmIFFPZmZzZXRSYW5nZSAgewogICAgdHlwZSBpbnQ4IHsKICAgICAgcmFuZ2UgIi0yNCB8IC0yMiB8IC0yMCB8IC0xOCB8IC0xNiB8IC0xNCB8IC0xMiB8IC0xMCB8IC04IHwgLTYgfCAiICsKICAgICAgICAiIC01IHwgLTQgfCAtMyB8IC0yIHwgLTEgfCAwIHwgMSB8IDIgfCAzIHwgNCB8IDUgfCA2IHwgOCB8IDEwIHwgIiArCiAgICAgICAgIiAxMiB8IDE0IHwgMTYgfCAxOCB8IDIwIHwgMjIgfCAyNCI7CiAgICB9CiAgICB1bml0cyBkQjsKICB9CgogIGdyb3VwaW5nIFJlcG9ydGluZ0N0cmwgewogICAgY2hvaWNlIHJlcG9ydGluZ0N0cmwgewogICAgICBtYW5kYXRvcnkgdHJ1ZTsKICAgICAgZGVzY3JpcHRpb24gIgogICAgICAgIFRoaXMgY2hvaWNlIGRlZmluZXMgdGhlIG1ldGhvZCBmb3IgcmVwb3J0aW5nIGNvbGxlY3RlZCBwZXJmb3JtYW5jZQogICAgICAgIG1ldHJpY3MgdG8gTW5TIGNvbnN1bWVycyBhcyB3ZWxsIGFzIHRoZSBwYXJhbWV0ZXJzIGZvciBjb25maWd1cmluZyB0aGUKICAgICAgICByZXBvcnRpbmcgZnVuY3Rpb24uIEl0IGlzIGEgY2hvaWNlIGJldHdlZW4gdGhlIGNvbnRyb2wgcGFyYW1ldGVyCiAgICAgICAgcmVxdWlyZWQgZm9yIHRoZSByZXBvcnRpbmcgbWV0aG9kcywgd2hvc2UgcHJlc2VuY2Ugc2VsZWN0cyB0aGUKICAgICAgICByZXBvcnRpbmcgbWV0aG9kIGFzIGZvbGxvd3M6CgogICAgICAgIC0gV2hlbiBvbmx5IHRoZSBmaWxlUmVwb3J0aW5nUGVyaW9kIGF0dHJpYnV0ZSBpcyBwcmVzZW50LCB0aGUgTW5TCiAgICAgICAgcHJvZHVjZXIgc2hhbGwgc3RvcmUgZmlsZXMgb24gdGhlIE1uUyBwcm9kdWNlciBhdCBhIGxvY2F0aW9uIHNlbGVjdGVkCiAgICAgICAgYnkgdGhlIE1uUyBwcm9kdWNlciBhbmQsIG9uIGNvbmRpdGlvbiB0aGF0IGFuIGFwcHJvcHJpYXRlIHN1YnNjcmlwdGlvbgogICAgICAgIGlzIGluIHBsYWNlLCBpbmZvcm0gdGhlIE1uUyBjb25zdW1lciBhYm91dCB0aGUgYXZhaWxhYmlsaXR5IG9mIG5ldwogICAgICAgIGZpbGVzIGFuZCB0aGUgZmlsZSBsb2NhdGlvbiB1c2luZyB0aGUgbm90aWZ5RmlsZVJlYWR5IG5vdGlmaWNhdGlvbi4KICAgICAgICBJbiBjYXNlIHRoZSBwcmVwYXJhdGlvbiBvZiBhIGZpbGUgZmFpbHMsICdub3RpZnlGaWxlUHJlcGFyYXRpb25FcnJvcicKICAgICAgICBzaGFsbCBiZSBzZW50IGluc3RlYWQuCgogICAgICAgIC0gV2hlbiB0aGUgJ2ZpbGVSZXBvcnRpbmdQZXJpb2QnIGFuZCAnbm90aWZpY2F0aW9uUmVjaXBpZW50QWRkcmVzcycKICAgICAgICBhdHRyaWJ1dGVzIGFyZSBwcmVzZW50LCB0aGVuIHRoZSBNblMgcHJvZHVjZXIgc2hhbGwgYmVoYXZlIGxpa2UKICAgICAgICBkZXNjcmliZWQgZm9yIHRoZSBjYXNlIHRoYXQgb25seSB0aGUgJ2ZpbGVSZXBvcnRpbmdQZXJpb2QnIGlzIHByZXNlbnQuCiAgICAgICAgSW4gYWRkaXRpb24sIHRoZSBNblMgcHJvZHVjZXIgc2hhbGwgY3JlYXRlIG9uIGJlaGFsZiBvZiB0aGUgTW5TCiAgICAgICAgY29uc3VtZXIgYSBzdWJzY3JpcHRpb24sIHVzaW5nICdOdGZTdWJzY3JpcHRpb25Db250cm9sJywgZm9yIHRoZQogICAgICAgIG5vdGlmaWNhdGlvbiB0eXBlcyAnbm90aWZ5TU9JQ3JlYXRpb24nIGFuZCAnbm90aWZ5TU9JRGVsZXRpb24nIHJlbGF0ZWQKICAgICAgICB0byB0aGUgJ0ZpbGUnIGluc3RhbmNlcyB0aGF0IHdpbGwgYmUgcHJvZHVjZWQgbGF0ZXIuIEluIGNhc2UgYW4gZXhpc3RpbmcKICAgICAgICBzdWJzY3JpcHRpb24gZG9lcyBhbHJlYWR5IGluY2x1ZGUgdGhlICdGaWxlJyBpbnN0YW5jZXMgdG8gYmUgcHJvZHVjZWQsCiAgICAgICAgbm8gbmV3IHN1YnNjcmlwdGlvbiBzaGFsbCBiZSBjcmVhdGVkLiBUaGUKICAgICAgICAnbm90aWZpY2F0aW9uUmVjaXBpZW50QWRkcmVzcycgYXR0cmlidXRlIGluIHRoZSBjcmVhdGVkCiAgICAgICAgJ050ZlN1YnNjcmlwdGlvbkNvbnRyb2wnIGluc3RhbmNlIHNoYWxsIGJlIHNldCB0byB0aGUgdmFsdWUgb2YgdGhlCiAgICAgICAgJ25vdGlmaWNhdGlvblJlY2lwaWVudEFkZHJlc3MnIGluIHRoZSByZWxhdGVkICdQZXJmTWV0cmljSm9iJy4gVGhpcwogICAgICAgIGZlYXR1cmUgaXMgY2FsbGVkIGltcGxpY2l0IG5vdGlmaWNhdGlvbiBzdWJzY3JpcHRpb24sIGFzIG9wcG9zZWQgdG8gdGhlCiAgICAgICAgY2FzZSB3aGVyZSB0aGUgTW5TIGNvbnN1bWVyIGNyZWF0ZXMgdGhlIHN1YnNjcmlwdGlvbiAoZXhwbGljaXQKICAgICAgICBub3RpZmljYXRpb24gc3Vic2NyaXB0aW9uKS4gV2hlbiB0aGUgcmVsYXRlZCAnUGVyZk1ldHJpY0pvYicgaXMKICAgICAgICBkZWxldGVkLCB0aGUgJ050ZlN1YnNjcmlwdGlvbkNvbnRyb2wnIGluc3RhbmNlIGNyZWF0ZWQgZHVlIHRvIHRoZQogICAgICAgIHJlcXVlc3QgZm9yIGltcGxpY2l0IHN1YnNjcmlwdGlvbiBzaGFsbCBiZSBkZWxldGVkIGFzIHdlbGwuCgogICAgICAgIC0gV2hlbiBvbmx5IHRoZSBmaWxlUmVwb3J0aW5nUGVyaW9kIGFuZCBmaWxlTG9jYXRpb24gYXR0cmlidXRlcyBhcmUKICAgICAgICBwcmVzZW50LCB0aGUgTW5TIHByb2R1Y2VyIHNoYWxsIHN0b3JlIHRoZSBmaWxlcyBvbiBhIE1uUyBjb25zdW1lciwgdGhhdAogICAgICAgIGNhbiBiZSBhbnkgZW50aXR5IHN1Y2ggYXMgYSBmaWxlIHNlcnZlciwgYXQgdGhlIGxvY2F0aW9uIHNwZWNpZmllZCBieQogICAgICAgIGZpbGVMb2NhdGlvbi4gTm8gbm90aWZpY2F0aW9uIGlzIGVtaXR0ZWQgYnkgdGhlIE1uUyBwcm9kdWNlci4KCiAgICAgICAgLSBXaGVuIG9ubHkgdGhlIHN0cmVhbVRhcmdldCBhdHRyaWJ1dGUgaXMgcHJlc2VudCwgdGhlIE1uUyBwcm9kdWNlcgogICAgICAgIHNoYWxsIHN0cmVhbSB0aGUgZGF0YSB0byB0aGUgbG9jYXRpb24gc3BlY2lmaWVkIGJ5IHN0cmVhbVRhcmdldC4KCiAgICAgICAgRm9yIHRoZSBmaWxlLWJhc2VkIHJlcG9ydGluZyBtZXRob2RzIHRoZSBmaWxlUmVwb3J0aW5nUGVyaW9kIGF0dHJpYnV0ZQogICAgICAgIHNwZWNpZmllcyB0aGUgdGltZSB3aW5kb3cgZHVyaW5nIHdoaWNoIGNvbGxlY3RlZCBtZWFzdXJlbWVudHMgYXJlCiAgICAgICAgc3RvcmVkIGludG8gdGhlIHNhbWUgZmlsZSBiZWZvcmUgdGhlIGZpbGUgaXMgY2xvc2VkIGFuZCBhIG5ldyBmaWxlIGlzCiAgICAgICAgb3BlbmVkLiI7CgogICAgICBjYXNlIGZpbGUtYmFzZWQtcmVwb3J0aW5nIHsKICAgICAgICBsZWFmIGZpbGVSZXBvcnRpbmdQZXJpb2QgewogICAgICAgICAgdHlwZSB1aW50MzIgewogICAgICAgICAgICByYW5nZSAxLi5tYXg7CiAgICAgICAgICB9CiAgICAgICAgICB1bml0cyBtaW51dGVzOwogICAgICAgICAgbWFuZGF0b3J5IHRydWU7CiAgICAgICAgICBkZXNjcmlwdGlvbiAiRm9yIHRoZSBmaWxlLWJhc2VkIHJlcG9ydGluZyBtZXRob2QgdGhpcyBpcyB0aGUgdGltZQogICAgICAgICAgICB3aW5kb3cgZHVyaW5nIHdoaWNoIGNvbGxlY3RlZCBtZWFzdXJlbWVudHMgYXJlIHN0b3JlZCBpbnRvIHRoZSBzYW1lCiAgICAgICAgICAgIGZpbGUgYmVmb3JlIHRoZSBmaWxlIGlzIGNsb3NlZCBhbmQgYSBuZXcgZmlsZSBpcyBvcGVuZWQuCiAgICAgICAgICAgIFRoZSB0aW1lLXBlcmlvZCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgdGhlIGdyYW51bGFyaXR5UGVyaW9kLgoKICAgICAgICAgICAgQXBwbGljYWJsZSB3aGVuIHRoZSBmaWxlLWJhc2VkIHJlcG9ydGluZyBtZXRob2QgaXMgc3VwcG9ydGVkLiI7CiAgICAgICAgfQogICAgICAgIGNob2ljZSByZXBvcnRpbmctdGFyZ2V0IHsKICAgICAgICAgIGNhc2UgZmlsZS10YXJnZXQgewogICAgICAgICAgICBsZWFmIGZpbGVMb2NhdGlvbiB7CiAgICAgICAgICAgIHR5cGUgc3RyaW5nIDsKICAgICAgICAgICAgZGVzY3JpcHRpb24gIkFwcGxpY2FibGUgYW5kIG11c3QgYmUgcHJlc2VudCB3aGVuIHRoZSBmaWxlLWJhc2VkCiAgICAgICAgICAgICAgcmVwb3J0aW5nIG1ldGhvZCBpcyBzdXBwb3J0ZWQsIGFuZCB0aGUgZmlsZXMgYXJlIHN0b3JlZCBvbiB0aGUgTW5TCiAgICAgICAgICAgICAgY29uc3VtZXIuIjsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgY2FzZSBub3RpZmljYXRpb24tdGFyZ2V0IHsKICAgICAgICAgICAgbGVhZiBub3RpZmljYXRpb25SZWNpcGllbnRBZGRyZXNzIHsKICAgICAgICAgICAgdHlwZSBzdHJpbmc7CiAgICAgICAgICAgIGRlc2NyaXB0aW9uICJNdXN0IGJlIHByZXNlbnQgd2hlbiB0aGUgbm90aWZpY2F0aW9uLWJhc2VkIHJlcG9ydGluZwogICAgICAgICAgICAgIG1ldGhvZCBpcyBzdXBwb3J0ZWQsIGFuZCB0aGUgdGhlIGZpbGVzIGFyZSBhdmFpbGFibGUgYXMKICAgICAgICAgICAgICBub3RpZmljYXRpb25zIGZvciB0aGUgTW5TIGNvbnN1bWVyIHRvIHN1YnNjcmliZSB0by4iOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgZGVzY3JpcHRpb24gIldoZW4gbmV0aWhlciBmaWxlTG9jYXRpb24gb3Igbm90aWZpY2F0aW9uUmVjaXBpZW50QWRkcmVzcwogICAgICAgICAgYXJlIHByZXNlbnQsIHRoZSBmaWxlcyBhcmUgc3RvcmVkIGFuZCBhdmFpbGFibGUgdG8gdGhlIE1uUyBjb25zdW1lcgogICAgICAgICAgaWYgdGhlIE1uUyBzdWJzY3JpYmVzIHRvIHRoZSBub3RpZnlGaWxlUmVhZHkgbm90aWZpY2F0aW9uLiI7CiAgICAgICAgfQogICAgICB9CgogICAgICBjYXNlIHN0cmVhbS1iYXNlZC1yZXBvcnRpbmcgewogICAgICAgIGxlYWYgc3RyZWFtVGFyZ2V0IHsKICAgICAgICAgIHR5cGUgc3RyaW5nOwogICAgICAgICAgbWFuZGF0b3J5IHRydWU7CiAgICAgICAgICBkZXNjcmlwdGlvbiAiQXBwbGljYWJsZSB3aGVuIHN0cmVhbS1iYXNlZCByZXBvcnRpbmcgbWV0aG9kIGlzCiAgICAgICAgICAgIHN1cHBvcnRlZC4iOwogICAgICAgIH0KICAgICAgfQogICAgfQogIH0KfQo=
+ietf-geo-location	urn:ietf:params:xml:ns:yang:ietf-geo-location	\N	[]	2022-02-11	bW9kdWxlIGlldGYtZ2VvLWxvY2F0aW9uIHsKICB5YW5nLXZlcnNpb24gMS4xOwogIG5hbWVzcGFjZSAidXJuOmlldGY6cGFyYW1zOnhtbDpuczp5YW5nOmlldGYtZ2VvLWxvY2F0aW9uIjsKICBwcmVmaXggZ2VvOwogIGltcG9ydCBpZXRmLXlhbmctdHlwZXMgewogICAgcHJlZml4IHlhbmc7CiAgICByZWZlcmVuY2UgIlJGQyA2OTkxOiBDb21tb24gWUFORyBEYXRhIFR5cGVzIjsKICB9CgogIG9yZ2FuaXphdGlvbgogICAgIklFVEYgTkVUTU9EIFdvcmtpbmcgR3JvdXAgKE5FVE1PRCkiOwogIGNvbnRhY3QKICAgIldHIFdlYjogICA8aHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy93Zy9uZXRtb2QvPgogICAgV0cgTGlzdDogIDxtYWlsdG86bmV0bW9kQGlldGYub3JnPgoKICAgIEVkaXRvcjogICBDaHJpc3RpYW4gSG9wcHMKICAgICAgICAgICAgICA8bWFpbHRvOmNob3Bwc0BjaG9wcHMub3JnPiI7CgogIGRlc2NyaXB0aW9uCiAgICAiVGhpcyBtb2R1bGUgZGVmaW5lcyBhIGdyb3VwaW5nIG9mIGEgY29udGFpbmVyIG9iamVjdCBmb3IKICAgICBzcGVjaWZ5aW5nIGEgbG9jYXRpb24gb24gb3IgYXJvdW5kIGFuIGFzdHJvbm9taWNhbCBvYmplY3QgKGUuZy4sCiAgICAgJ2VhcnRoJykuCgogICAgIFRoZSBrZXkgd29yZHMgJ01VU1QnLCAnTVVTVCBOT1QnLCAnUkVRVUlSRUQnLCAnU0hBTEwnLCAnU0hBTEwKICAgICBOT1QnLCAnU0hPVUxEJywgJ1NIT1VMRCBOT1QnLCAnUkVDT01NRU5ERUQnLCAnTk9UIFJFQ09NTUVOREVEJywKICAgICAnTUFZJywgYW5kICdPUFRJT05BTCcgaW4gdGhpcyBkb2N1bWVudCBhcmUgdG8gYmUgaW50ZXJwcmV0ZWQgYXMKICAgICBkZXNjcmliZWQgaW4gQkNQIDE0IChSRkMgMjExOSkgKFJGQyA4MTc0KSB3aGVuLCBhbmQgb25seSB3aGVuLAogICAgIHRoZXkgYXBwZWFyIGluIGFsbCBjYXBpdGFscywgYXMgc2hvd24gaGVyZS4KCiAgICAgQ29weXJpZ2h0IChjKSAyMDIyIElFVEYgVHJ1c3QgYW5kIHRoZSBwZXJzb25zIGlkZW50aWZpZWQgYXMKICAgICBhdXRob3JzIG9mIHRoZSBjb2RlLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KCiAgICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3JtcywKICAgICB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBpcyBwZXJtaXR0ZWQgcHVyc3VhbnQgdG8sCiAgICAgYW5kIHN1YmplY3QgdG8gdGhlIGxpY2Vuc2UgdGVybXMgY29udGFpbmVkIGluLCB0aGUKICAgICBSZXZpc2VkIEJTRCBMaWNlbnNlIHNldCBmb3J0aCBpbiBTZWN0aW9uIDQuYyBvZiB0aGUKICAgICBJRVRGIFRydXN0J3MgTGVnYWwgUHJvdmlzaW9ucyBSZWxhdGluZyB0byBJRVRGIERvY3VtZW50cwogICAgIChodHRwczovL3RydXN0ZWUuaWV0Zi5vcmcvbGljZW5zZS1pbmZvKS4KCiAgICAgVGhpcyB2ZXJzaW9uIG9mIHRoaXMgWUFORyBtb2R1bGUgaXMgcGFydCBvZiBSRkMgOTE3OQogICAgIChodHRwczovL3d3dy5yZmMtZWRpdG9yLm9yZy9pbmZvL3JmYzkxNzkpOyBzZWUgdGhlIFJGQyBpdHNlbGYKICAgICBmb3IgZnVsbCBsZWdhbCBub3RpY2VzLiI7CgogIHJldmlzaW9uIDIwMjItMDItMTEgewogICAgZGVzY3JpcHRpb24KICAgICAgIkluaXRpYWwgUmV2aXNpb24iOwogICAgcmVmZXJlbmNlCiAgICAgICJSRkMgOTE3OTogQSBZQU5HIEdyb3VwaW5nIGZvciBHZW9ncmFwaGljIExvY2F0aW9ucyI7CiAgfQoKICBmZWF0dXJlIGFsdGVybmF0ZS1zeXN0ZW1zIHsKICAgIGRlc2NyaXB0aW9uCiAgICAgICJUaGlzIGZlYXR1cmUgbWVhbnMgdGhlIGRldmljZSBzdXBwb3J0cyBzcGVjaWZ5aW5nIGxvY2F0aW9ucwogICAgICAgdXNpbmcgYWx0ZXJuYXRlIHN5c3RlbXMgZm9yIHJlZmVyZW5jZSBmcmFtZXMuIjsKICB9CgogIGdyb3VwaW5nIGdlby1sb2NhdGlvbiB7CiAgICBkZXNjcmlwdGlvbgogICAgICAiR3JvdXBpbmcgdG8gaWRlbnRpZnkgYSBsb2NhdGlvbiBvbiBhbiBhc3Ryb25vbWljYWwgb2JqZWN0LiI7CgogICAgY29udGFpbmVyIGdlby1sb2NhdGlvbiB7CiAgICAgIGRlc2NyaXB0aW9uCiAgICAgICAgIkEgbG9jYXRpb24gb24gYW4gYXN0cm9ub21pY2FsIGJvZHkgKGUuZy4sICdlYXJ0aCcpCiAgICAgICAgIHNvbWV3aGVyZSBpbiBhIHVuaXZlcnNlLiI7CgogICAgICBjb250YWluZXIgcmVmZXJlbmNlLWZyYW1lIHsKICAgICAgICBkZXNjcmlwdGlvbgogICAgICAgICAgIlRoZSBGcmFtZSBvZiBSZWZlcmVuY2UgZm9yIHRoZSBsb2NhdGlvbiB2YWx1ZXMuIjsKCiAgICAgICAgbGVhZiBhbHRlcm5hdGUtc3lzdGVtIHsKICAgICAgICAgIGlmLWZlYXR1cmUgImFsdGVybmF0ZS1zeXN0ZW1zIjsKICAgICAgICAgIHR5cGUgc3RyaW5nOwogICAgICAgICAgZGVzY3JpcHRpb24KICAgICAgICAgICAgIlRoZSBzeXN0ZW0gaW4gd2hpY2ggdGhlIGFzdHJvbm9taWNhbCBib2R5IGFuZAogICAgICAgICAgICAgZ2VvZGV0aWMtZGF0dW0gaXMgZGVmaW5lZC4gIE5vcm1hbGx5LCB0aGlzIHZhbHVlIGlzIG5vdAogICAgICAgICAgICAgcHJlc2VudCBhbmQgdGhlIHN5c3RlbSBpcyB0aGUgbmF0dXJhbCB1bml2ZXJzZTsgaG93ZXZlciwKICAgICAgICAgICAgIHdoZW4gcHJlc2VudCwgdGhpcyB2YWx1ZSBhbGxvd3MgZm9yIHNwZWNpZnlpbmcgYWx0ZXJuYXRlCiAgICAgICAgICAgICBzeXN0ZW1zIChlLmcuLCB2aXJ0dWFsIHJlYWxpdGllcykuICBBbiBhbHRlcm5hdGUtc3lzdGVtCiAgICAgICAgICAgICBtb2RpZmllcyB0aGUgZGVmaW5pdGlvbiAoYnV0IG5vdCB0aGUgdHlwZSkgb2YgdGhlIG90aGVyCiAgICAgICAgICAgICB2YWx1ZXMgaW4gdGhlIHJlZmVyZW5jZSBmcmFtZS4iOwogICAgICAgIH0KICAgICAgICBsZWFmIGFzdHJvbm9taWNhbC1ib2R5IHsKICAgICAgICAgIHR5cGUgc3RyaW5nIHsKICAgICAgICAgICAgcGF0dGVybiAnWyAtQFxbLVxeXy1+XSonOwogICAgICAgICAgfQogICAgICAgICAgZGVmYXVsdCAiZWFydGgiOwogICAgICAgICAgZGVzY3JpcHRpb24KICAgICAgICAgICAgIkFuIGFzdHJvbm9taWNhbCBib2R5IGFzIG5hbWVkIGJ5IHRoZSBJbnRlcm5hdGlvbmFsCiAgICAgICAgICAgICBBc3Ryb25vbWljYWwgVW5pb24gKElBVSkgb3IgYWNjb3JkaW5nIHRvIHRoZSBhbHRlcm5hdGUKICAgICAgICAgICAgIHN5c3RlbSBpZiBzcGVjaWZpZWQuICBFeGFtcGxlcyBpbmNsdWRlICdzdW4nIChvdXIgc3RhciksCiAgICAgICAgICAgICAnZWFydGgnIChvdXIgcGxhbmV0KSwgJ21vb24nIChvdXIgbW9vbiksICdlbmNlbGFkdXMnIChhCiAgICAgICAgICAgICBtb29uIG9mIFNhdHVybiksICdjZXJlcycgKGFuIGFzdGVyb2lkKSwgYW5kCiAgICAgICAgICAgICAnNjdwL2NodXJ5dW1vdi1nZXJhc2ltZW5rbyAoYSBjb21ldCkuICBUaGUgQVNDSUkgdmFsdWUKICAgICAgICAgICAgIFNIT1VMRCBoYXZlIHVwcGVyY2FzZSBjb252ZXJ0ZWQgdG8gbG93ZXJjYXNlIGFuZCBub3QKICAgICAgICAgICAgIGluY2x1ZGUgY29udHJvbCBjaGFyYWN0ZXJzIChpLmUuLCB2YWx1ZXMgMzIuLjY0LCBhbmQKICAgICAgICAgICAgIDkxLi4xMjYpLiAgQW55IHByZWNlZGluZyAndGhlJyBpbiB0aGUgbmFtZSBTSE9VTEQgTk9UIGJlCiAgICAgICAgICAgICBpbmNsdWRlZC4iOwogICAgICAgICAgcmVmZXJlbmNlCiAgICAgICAgICAgICJodHRwczovL3d3dy5pYXUub3JnLyI7CiAgICAgICAgfQogICAgICAgIGNvbnRhaW5lciBnZW9kZXRpYy1zeXN0ZW0gewogICAgICAgICAgZGVzY3JpcHRpb24KICAgICAgICAgICAgIlRoZSBnZW9kZXRpYyBzeXN0ZW0gb2YgdGhlIGxvY2F0aW9uIGRhdGEuIjsKICAgICAgICAgIGxlYWYgZ2VvZGV0aWMtZGF0dW0gewogICAgICAgICAgICB0eXBlIHN0cmluZyB7CiAgICAgICAgICAgICAgcGF0dGVybiAnWyAtQFxbLVxeXy1+XSonOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGRlc2NyaXB0aW9uCiAgICAgICAgICAgICAgIkEgZ2VvZGV0aWMtZGF0dW0gZGVmaW5pbmcgdGhlIG1lYW5pbmcgb2YgbGF0aXR1ZGUsCiAgICAgICAgICAgICAgIGxvbmdpdHVkZSwgYW5kIGhlaWdodC4gIFRoZSBkZWZhdWx0IHdoZW4gdGhlCiAgICAgICAgICAgICAgIGFzdHJvbm9taWNhbCBib2R5IGlzICdlYXJ0aCcgaXMgJ3dncy04NCcsIHdoaWNoIGlzCiAgICAgICAgICAgICAgIHVzZWQgYnkgdGhlIEdsb2JhbCBQb3NpdGlvbmluZyBTeXN0ZW0gKEdQUykuICBUaGUKICAgICAgICAgICAgICAgQVNDSUkgdmFsdWUgU0hPVUxEIGhhdmUgdXBwZXJjYXNlIGNvbnZlcnRlZCB0bwogICAgICAgICAgICAgICBsb3dlcmNhc2UgYW5kIG5vdCBpbmNsdWRlIGNvbnRyb2wgY2hhcmFjdGVycwogICAgICAgICAgICAgICAoaS5lLiwgdmFsdWVzIDMyLi42NCwgYW5kIDkxLi4xMjYpLiAgVGhlIElBTkEgcmVnaXN0cnkKICAgICAgICAgICAgICAgZnVydGhlciByZXN0cmljdHMgdGhlIHZhbHVlIGJ5IGNvbnZlcnRpbmcgYWxsIHNwYWNlcwogICAgICAgICAgICAgICAoJyAnKSB0byBkYXNoZXMgKCctJykuCiAgICAgICAgICAgICAgIFRoZSBzcGVjaWZpY2F0aW9uIGZvciB0aGUgZ2VvZGV0aWMtZGF0dW0gaW5kaWNhdGVzCiAgICAgICAgICAgICAgIGhvdyBhY2N1cmF0ZWx5IGl0IG1vZGVscyB0aGUgYXN0cm9ub21pY2FsIGJvZHkgaW4KICAgICAgICAgICAgICAgcXVlc3Rpb24sIGJvdGggZm9yIHRoZSAnaG9yaXpvbnRhbCcKICAgICAgICAgICAgICAgbGF0aXR1ZGUvbG9uZ2l0dWRlIGNvb3JkaW5hdGVzIGFuZCBmb3IgaGVpZ2h0CiAgICAgICAgICAgICAgIGNvb3JkaW5hdGVzLiI7CiAgICAgICAgICAgIHJlZmVyZW5jZQogICAgICAgICAgICAgICJSRkMgOTE3OTogQSBZQU5HIEdyb3VwaW5nIGZvciBHZW9ncmFwaGljIExvY2F0aW9ucywKICAgICAgICAgICAgICAgU2VjdGlvbiA2LjEiOwogICAgICAgICAgfQogICAgICAgICAgbGVhZiBjb29yZC1hY2N1cmFjeSB7CiAgICAgICAgICAgIHR5cGUgZGVjaW1hbDY0IHsKICAgICAgICAgICAgICBmcmFjdGlvbi1kaWdpdHMgNjsKICAgICAgICAgICAgfQogICAgICAgICAgICBkZXNjcmlwdGlvbgogICAgICAgICAgICAgICJUaGUgYWNjdXJhY3kgb2YgdGhlIGxhdGl0dWRlL2xvbmdpdHVkZSBwYWlyIGZvcgogICAgICAgICAgICAgICBlbGxpcHNvaWRhbCBjb29yZGluYXRlcywgb3IgdGhlIFgsIFksIGFuZCBaIGNvbXBvbmVudHMKICAgICAgICAgICAgICAgZm9yIENhcnRlc2lhbiBjb29yZGluYXRlcy4gIFdoZW4gY29vcmQtYWNjdXJhY3kgaXMKICAgICAgICAgICAgICAgc3BlY2lmaWVkLCBpdCBpbmRpY2F0ZXMgaG93IHByZWNpc2VseSB0aGUgY29vcmRpbmF0ZXMKICAgICAgICAgICAgICAgaW4gdGhlIGFzc29jaWF0ZWQgbGlzdCBvZiBsb2NhdGlvbnMgaGF2ZSBiZWVuCiAgICAgICAgICAgICAgIGRldGVybWluZWQgd2l0aCByZXNwZWN0IHRvIHRoZSBjb29yZGluYXRlIHN5c3RlbQogICAgICAgICAgICAgICBkZWZpbmVkIGJ5IHRoZSBnZW9kZXRpYy1kYXR1bS4gIEZvciBleGFtcGxlLCB0aGVyZQogICAgICAgICAgICAgICBtaWdodCBiZSB1bmNlcnRhaW50eSBkdWUgdG8gbWVhc3VyZW1lbnQgZXJyb3IgaWYgYW4KICAgICAgICAgICAgICAgZXhwZXJpbWVudGFsIG1lYXN1cmVtZW50IHdhcyBtYWRlIHRvIGRldGVybWluZSBlYWNoCiAgICAgICAgICAgICAgIGxvY2F0aW9uLiI7CiAgICAgICAgICB9CiAgICAgICAgICBsZWFmIGhlaWdodC1hY2N1cmFjeSB7CiAgICAgICAgICAgIHR5cGUgZGVjaW1hbDY0IHsKICAgICAgICAgICAgICBmcmFjdGlvbi1kaWdpdHMgNjsKICAgICAgICAgICAgfQogICAgICAgICAgICB1bml0cyAibWV0ZXJzIjsKICAgICAgICAgICAgZGVzY3JpcHRpb24KICAgICAgICAgICAgICAiVGhlIGFjY3VyYWN5IG9mIHRoZSBoZWlnaHQgdmFsdWUgZm9yIGVsbGlwc29pZGFsCiAgICAgICAgICAgICAgIGNvb3JkaW5hdGVzOyB0aGlzIHZhbHVlIGlzIG5vdCB1c2VkIHdpdGggQ2FydGVzaWFuCiAgICAgICAgICAgICAgIGNvb3JkaW5hdGVzLiAgV2hlbiBoZWlnaHQtYWNjdXJhY3kgaXMgc3BlY2lmaWVkLCBpdAogICAgICAgICAgICAgICBpbmRpY2F0ZXMgaG93IHByZWNpc2VseSB0aGUgaGVpZ2h0cyBpbiB0aGUKICAgICAgICAgICAgICAgYXNzb2NpYXRlZCBsaXN0IG9mIGxvY2F0aW9ucyBoYXZlIGJlZW4gZGV0ZXJtaW5lZAogICAgICAgICAgICAgICB3aXRoIHJlc3BlY3QgdG8gdGhlIGNvb3JkaW5hdGUgc3lzdGVtIGRlZmluZWQgYnkgdGhlCiAgICAgICAgICAgICAgIGdlb2RldGljLWRhdHVtLiAgRm9yIGV4YW1wbGUsIHRoZXJlIG1pZ2h0IGJlCiAgICAgICAgICAgICAgIHVuY2VydGFpbnR5IGR1ZSB0byBtZWFzdXJlbWVudCBlcnJvciBpZiBhbgogICAgICAgICAgICAgICBleHBlcmltZW50YWwgbWVhc3VyZW1lbnQgd2FzIG1hZGUgdG8gZGV0ZXJtaW5lIGVhY2gKICAgICAgICAgICAgICAgbG9jYXRpb24uIjsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgICAgY2hvaWNlIGxvY2F0aW9uIHsKICAgICAgICBkZXNjcmlwdGlvbgogICAgICAgICAgIlRoZSBsb2NhdGlvbiBkYXRhIGVpdGhlciBpbiBsYXRpdHVkZS9sb25naXR1ZGUgb3IKICAgICAgICAgICBDYXJ0ZXNpYW4gdmFsdWVzIjsKICAgICAgICBjYXNlIGVsbGlwc29pZCB7CiAgICAgICAgICBsZWFmIGxhdGl0dWRlIHsKICAgICAgICAgICAgdHlwZSBkZWNpbWFsNjQgewogICAgICAgICAgICAgIGZyYWN0aW9uLWRpZ2l0cyAxNjsKICAgICAgICAgICAgfQogICAgICAgICAgICB1bml0cyAiZGVjaW1hbCBkZWdyZWVzIjsKICAgICAgICAgICAgZGVzY3JpcHRpb24KICAgICAgICAgICAgICAiVGhlIGxhdGl0dWRlIHZhbHVlIG9uIHRoZSBhc3Ryb25vbWljYWwgYm9keS4gIFRoZQogICAgICAgICAgICAgICBkZWZpbml0aW9uIGFuZCBwcmVjaXNpb24gb2YgdGhpcyBtZWFzdXJlbWVudCBpcwogICAgICAgICAgICAgICBpbmRpY2F0ZWQgYnkgdGhlIHJlZmVyZW5jZS1mcmFtZS4iOwogICAgICAgICAgfQogICAgICAgICAgbGVhZiBsb25naXR1ZGUgewogICAgICAgICAgICB0eXBlIGRlY2ltYWw2NCB7CiAgICAgICAgICAgICAgZnJhY3Rpb24tZGlnaXRzIDE2OwogICAgICAgICAgICB9CiAgICAgICAgICAgIHVuaXRzICJkZWNpbWFsIGRlZ3JlZXMiOwogICAgICAgICAgICBkZXNjcmlwdGlvbgogICAgICAgICAgICAgICJUaGUgbG9uZ2l0dWRlIHZhbHVlIG9uIHRoZSBhc3Ryb25vbWljYWwgYm9keS4gIFRoZQogICAgICAgICAgICAgICBkZWZpbml0aW9uIGFuZCBwcmVjaXNpb24gb2YgdGhpcyBtZWFzdXJlbWVudCBpcwogICAgICAgICAgICAgICBpbmRpY2F0ZWQgYnkgdGhlIHJlZmVyZW5jZS1mcmFtZS4iOwogICAgICAgICAgfQogICAgICAgICAgbGVhZiBoZWlnaHQgewogICAgICAgICAgICB0eXBlIGRlY2ltYWw2NCB7CiAgICAgICAgICAgICAgZnJhY3Rpb24tZGlnaXRzIDY7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdW5pdHMgIm1ldGVycyI7CiAgICAgICAgICAgIGRlc2NyaXB0aW9uCiAgICAgICAgICAgICAgIkhlaWdodCBmcm9tIGEgcmVmZXJlbmNlIDAgdmFsdWUuICBUaGUgcHJlY2lzaW9uIGFuZAogICAgICAgICAgICAgICAnMCcgdmFsdWUgaXMgZGVmaW5lZCBieSB0aGUgcmVmZXJlbmNlLWZyYW1lLiI7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGNhc2UgY2FydGVzaWFuIHsKICAgICAgICAgIGxlYWYgeCB7CiAgICAgICAgICAgIHR5cGUgZGVjaW1hbDY0IHsKICAgICAgICAgICAgICBmcmFjdGlvbi1kaWdpdHMgNjsKICAgICAgICAgICAgfQogICAgICAgICAgICB1bml0cyAibWV0ZXJzIjsKICAgICAgICAgICAgZGVzY3JpcHRpb24KICAgICAgICAgICAgICAiVGhlIFggdmFsdWUgYXMgZGVmaW5lZCBieSB0aGUgcmVmZXJlbmNlLWZyYW1lLiI7CiAgICAgICAgICB9CiAgICAgICAgICBsZWFmIHkgewogICAgICAgICAgICB0eXBlIGRlY2ltYWw2NCB7CiAgICAgICAgICAgICAgZnJhY3Rpb24tZGlnaXRzIDY7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdW5pdHMgIm1ldGVycyI7CiAgICAgICAgICAgIGRlc2NyaXB0aW9uCiAgICAgICAgICAgICAgIlRoZSBZIHZhbHVlIGFzIGRlZmluZWQgYnkgdGhlIHJlZmVyZW5jZS1mcmFtZS4iOwogICAgICAgICAgfQogICAgICAgICAgbGVhZiB6IHsKICAgICAgICAgICAgdHlwZSBkZWNpbWFsNjQgewogICAgICAgICAgICAgIGZyYWN0aW9uLWRpZ2l0cyA2OwogICAgICAgICAgICB9CiAgICAgICAgICAgIHVuaXRzICJtZXRlcnMiOwogICAgICAgICAgICBkZXNjcmlwdGlvbgogICAgICAgICAgICAgICJUaGUgWiB2YWx1ZSBhcyBkZWZpbmVkIGJ5IHRoZSByZWZlcmVuY2UtZnJhbWUuIjsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgICAgY29udGFpbmVyIHZlbG9jaXR5IHsKICAgICAgICBkZXNjcmlwdGlvbgogICAgICAgICAgIklmIHRoZSBvYmplY3QgaXMgaW4gbW90aW9uLCB0aGUgdmVsb2NpdHkgdmVjdG9yIGRlc2NyaWJlcwogICAgICAgICAgIHRoaXMgbW90aW9uIGF0IHRoZSB0aW1lIGdpdmVuIGJ5IHRoZSB0aW1lc3RhbXAuICBGb3IgYQogICAgICAgICAgIGZvcm11bGEgdG8gY29udmVydCB0aGVzZSB2YWx1ZXMgdG8gc3BlZWQgYW5kIGhlYWRpbmcsIHNlZQogICAgICAgICAgIFJGQyA5MTc5LiI7CiAgICAgICAgcmVmZXJlbmNlCiAgICAgICAgICAiUkZDIDkxNzk6IEEgWUFORyBHcm91cGluZyBmb3IgR2VvZ3JhcGhpYyBMb2NhdGlvbnMiOwoKICAgICAgICBsZWFmIHYtbm9ydGggewogICAgICAgICAgdHlwZSBkZWNpbWFsNjQgewogICAgICAgICAgICBmcmFjdGlvbi1kaWdpdHMgMTI7CiAgICAgICAgICB9CiAgICAgICAgICB1bml0cyAibWV0ZXJzIHBlciBzZWNvbmQiOwogICAgICAgICAgZGVzY3JpcHRpb24KICAgICAgICAgICAgInYtbm9ydGggaXMgdGhlIHJhdGUgb2YgY2hhbmdlIChpLmUuLCBzcGVlZCkgdG93YXJkcwogICAgICAgICAgICAgdHJ1ZSBub3J0aCBhcyBkZWZpbmVkIGJ5IHRoZSBnZW9kZXRpYy1zeXN0ZW0uIjsKICAgICAgICB9CgogICAgICAgIGxlYWYgdi1lYXN0IHsKICAgICAgICAgIHR5cGUgZGVjaW1hbDY0IHsKICAgICAgICAgICAgZnJhY3Rpb24tZGlnaXRzIDEyOwogICAgICAgICAgfQogICAgICAgICAgdW5pdHMgIm1ldGVycyBwZXIgc2Vjb25kIjsKICAgICAgICAgIGRlc2NyaXB0aW9uCiAgICAgICAgICAgICJ2LWVhc3QgaXMgdGhlIHJhdGUgb2YgY2hhbmdlIChpLmUuLCBzcGVlZCkgcGVycGVuZGljdWxhcgogICAgICAgICAgICAgdG8gdGhlIHJpZ2h0IG9mIHRydWUgbm9ydGggYXMgZGVmaW5lZCBieQogICAgICAgICAgICAgdGhlIGdlb2RldGljLXN5c3RlbS4iOwogICAgICAgIH0KCiAgICAgICAgbGVhZiB2LXVwIHsKICAgICAgICAgIHR5cGUgZGVjaW1hbDY0IHsKICAgICAgICAgICAgZnJhY3Rpb24tZGlnaXRzIDEyOwogICAgICAgICAgfQogICAgICAgICAgdW5pdHMgIm1ldGVycyBwZXIgc2Vjb25kIjsKICAgICAgICAgIGRlc2NyaXB0aW9uCiAgICAgICAgICAgICJ2LXVwIGlzIHRoZSByYXRlIG9mIGNoYW5nZSAoaS5lLiwgc3BlZWQpIGF3YXkgZnJvbSB0aGUKICAgICAgICAgICAgIGNlbnRlciBvZiBtYXNzLiI7CiAgICAgICAgfQogICAgICB9CiAgICAgIGxlYWYgdGltZXN0YW1wIHsKICAgICAgICB0eXBlIHlhbmc6ZGF0ZS1hbmQtdGltZTsKICAgICAgICBkZXNjcmlwdGlvbgogICAgICAgICAgIlJlZmVyZW5jZSB0aW1lIHdoZW4gbG9jYXRpb24gd2FzIHJlY29yZGVkLiI7CiAgICAgIH0KICAgICAgbGVhZiB2YWxpZC11bnRpbCB7CiAgICAgICAgdHlwZSB5YW5nOmRhdGUtYW5kLXRpbWU7CiAgICAgICAgZGVzY3JpcHRpb24KICAgICAgICAgICJUaGUgdGltZXN0YW1wIGZvciB3aGljaCB0aGlzIGdlby1sb2NhdGlvbiBpcyB2YWxpZCB1bnRpbC4KICAgICAgICAgICBJZiB1bnNwZWNpZmllZCwgdGhlIGdlby1sb2NhdGlvbiBoYXMgbm8gc3BlY2lmaWMKICAgICAgICAgICBleHBpcmF0aW9uIHRpbWUuIjsKICAgICAgfQogICAgfQogIH0KfQo=
+o-ran-smo-teiv-common-yang-extensions	urn:o-ran:smo-teiv-common-yang-extensions	\N	[]	2024-05-24	bW9kdWxlIG8tcmFuLXNtby10ZWl2LWNvbW1vbi15YW5nLWV4dGVuc2lvbnMgewogICAgeWFuZy12ZXJzaW9uIDEuMTsKICAgIG5hbWVzcGFjZSAidXJuOm8tcmFuOnNtby10ZWl2LWNvbW1vbi15YW5nLWV4dGVuc2lvbnMiOwogICAgcHJlZml4IG9yLXRlaXYteWV4dDsKCiAgICBvcmdhbml6YXRpb24gIk9SQU4iOwogICAgY29udGFjdCAiVGhlIEF1dGhvcnMiOwogICAgZGVzY3JpcHRpb24KICAgICJUb3BvbG9neSBhbmQgSW52ZW50b3J5IFlBTkcgZXh0ZW5zaW9ucyBtb2RlbC4KCiAgICBDb3B5cmlnaHQgKEMpIDIwMjQgRXJpY3Nzb24KICAgIE1vZGlmaWNhdGlvbnMgQ29weXJpZ2h0IChDKSAyMDI0IE9wZW5JbmZyYSBGb3VuZGF0aW9uIEV1cm9wZQoKICAgIFRoaXMgbW9kZWwgY29udGFpbnMgZXh0ZW5zaW9ucyB0byB0aGUgWUFORyBsYW5ndWFnZSB0aGF0IHRvcG9sb2d5IGFuZAogICAgaW52ZW50b3J5IG1vZGVscyB3aWxsIHVzZSB0byBkZWZpbmUgYW5kIGFubm90YXRlIHR5cGVzIGFuZCByZWxhdGlvbnNoaXBzLiI7CgogICAgcmV2aXNpb24gIjIwMjQtMDUtMjQiIHsKICAgICAgICBkZXNjcmlwdGlvbiAiSW5pdGlhbCByZXZpc2lvbi4iOwogICAgICAgIG9yLXRlaXYteWV4dDpsYWJlbCAwLjMuMDsKICAgIH0KCiAgICBleHRlbnNpb24gYmlEaXJlY3Rpb25hbFRvcG9sb2d5UmVsYXRpb25zaGlwIHsKICAgICAgICBkZXNjcmlwdGlvbgogICAgICAgICAgICAiRGVmaW5lcyBhIGJpLWRpcmVjdGlvbmFsIHJlbGF0aW9uc2hpcCBpbiB0aGUgdG9wb2xvZ3kuCgogICAgICAgICAgICBBIGJpLWRpcmVjdGlvbmFsLWFzc29jaWF0aW9uIChCREEpIGlzIGEgcmVsYXRpb25zaGlwIGNvbXByaXNpbmcgb2YKICAgICAgICAgICAgYW4gQS1zaWRlIGFuZCBhIEItc2lkZS4gVGhlIEEtc2lkZSBpcyBjb25zaWRlcmVkIHRoZSBvcmlnaW5hdGluZwogICAgICAgICAgICBzaWRlIG9mIHRoZSByZWxhdGlvbnNoaXA7IHRoZSBCLXNpZGUgaXMgY29uc2lkZXJlZCB0aGUgdGVybWluYXRpbmcKICAgICAgICAgICAgc2lkZSBvZiB0aGUgcmVsYXRpb25zaGlwLiBUaGUgb3JkZXIgb2YgQS1zaWRlIGFuZCBCLXNpZGUgaXMgb2YKICAgICAgICAgICAgaW1wb3J0YW5jZSBhbmQgTVVTVCBOT1QgYmUgY2hhbmdlZCBvbmNlIGRlZmluZWQuCgogICAgICAgICAgICBCb3RoIEEtc2lkZSBhbmQgQi1zaWRlIGFyZSBkZWZpbmVkIG9uIGEgdHlwZSwgYW5kIGFyZSBnaXZlbiBhIHJvbGUuCiAgICAgICAgICAgIEEgdHlwZSBtYXkgaGF2ZSBtdWx0aXBsZSBvcmlnaW5hdGluZyBhbmQvb3IgdGVybWluYXRpbmcgc2lkZXMgb2YgYQogICAgICAgICAgICByZWxhdGlvbnNoaXAsIGFsbCBkaXN0aW5ndWlzaGVkIGJ5IHJvbGUgbmFtZS4KCiAgICAgICAgICAgIFRoZSBzdGF0ZW1lbnQgTVVTVCBvbmx5IGJlIGEgc3Vic3RhdGVtZW50IG9mIHRoZSAnbW9kdWxlJyBzdGF0ZW1lbnQuCiAgICAgICAgICAgIE11bHRpcGxlICdiaS1kaXJlY3Rpb25hbC10b3BvbG9neS1yZWxhdGlvbnNoaXAnIHN0YXRlbWVudHMgYXJlCiAgICAgICAgICAgIGFsbG93ZWQgcGVyIHBhcmVudCBzdGF0ZW1lbnQuCgogICAgICAgICAgICBTdWJzdGF0ZW1lbnRzIHRvIHRoZSAnYmktZGlyZWN0aW9uYWwtdG9wb2xvZ3ktcmVsYXRpb25zaGlwJyBkZWZpbmUKICAgICAgICAgICAgdGhlIEEtc2lkZSBhbmQgdGhlIEItc2lkZSwgcmVzcGVjdGl2ZWx5LCBhbmQgb3B0aW9uYWxseSBwcm9wZXJ0aWVzCiAgICAgICAgICAgIG9mIHRoZSByZWxhdGlvbnNoaXAuIERhdGEgbm9kZXMgb2YgdHlwZXMgJ2xlYWYnIGFuZCAnbGVhZi1saXN0JyBhcmUKICAgICAgICAgICAgdXNlZCBmb3IgdGhpcyBwdXJwb3NlLiBPbmUgb2YgdGhlIGRhdGEgbm9kZXMgTVVTVCBiZSBhbm5vdGF0ZWQgd2l0aAogICAgICAgICAgICB0aGUgJ2Etc2lkZScgZXh0ZW5zaW9uOyBhbm90aGVyIGRhdGEgbm9kZSBNVVNUIGJlIGFubm90YXRlZCB3aXRoIHRoZQogICAgICAgICAgICAnYi1zaWRlJyBleHRlbnNpb24uIE90aGVyIGRhdGEgbm9kZXMgZGVmaW5lIHByb3BlcnRpZXMgb2YgdGhlCiAgICAgICAgICAgIHJlbGF0aW9uc2hpcC4KCiAgICAgICAgICAgIFRoZSBhcmd1bWVudCBpcyB0aGUgbmFtZSBvZiB0aGUgcmVsYXRpb25zaGlwLiBUaGUgcmVsYXRpb25zaGlwIG5hbWUKICAgICAgICAgICAgaXMgc2NvcGVkIHRvIHRoZSBuYW1lc3BhY2Ugb2YgdGhlIGRlY2xhcmluZyBtb2R1bGUgYW5kIE1VU1QgYmUKICAgICAgICAgICAgdW5pcXVlIHdpdGhpbiB0aGUgc2NvcGUuIjsKCiAgICAgICAgYXJndW1lbnQgcmVsYXRpb25zaGlwTmFtZTsKICAgIH0KCiAgICBleHRlbnNpb24gYVNpZGUgewogICAgICAgIGRlc2NyaXB0aW9uCiAgICAgICAgICAgICJEZWZpbmVzIHRoZSBBLXNpZGUgb2YgYSByZWxhdGlvbnNoaXAuCgogICAgICAgICAgICBUaGUgc3RhdGVtZW50IE1VU1Qgb25seSBiZSBhIHN1YnN0YXRlbWVudCBvZiBhICdsZWFmJyBvciAnbGVhZi1saXN0JwogICAgICAgICAgICBzdGF0ZW1lbnQsIHdoaWNoIGl0c2VsZiBtdXN0IGJlIGEgc3Vic3RhdGVtZW50IG9mIHRoZQogICAgICAgICAgICAndW5pLWRpcmVjdGlvbmFsLXRvcG9sb2d5LXJlbGF0aW9uc2hpcCcgc3RhdGVtZW50LgoKICAgICAgICAgICAgVGhlIGRhdGEgdHlwZSBvZiB0aGUgcGFyZW50ICdsZWFmJyBvciAnbGVhZi1saXN0JyBNVVNUIGJlCiAgICAgICAgICAgICdpbnN0YW5jZS1pZGVudGlmaWVyJy4gQ29uc3RyYWludHMgTUFZIGJlIHVzZWQgYXMgcGFydCBvZiB0aGUgcGFyZW50CiAgICAgICAgICAgICdsZWFmJyBvciAnbGVhZi1saXN0JyB0byBlbmZvcmNlIGNhcmRpbmFsaXR5LgoKICAgICAgICAgICAgVGhlIGlkZW50aWZpZXIgb2YgdGhlIHBhcmVudCAnbGVhZicgb3IgJ2xlYWYtbGlzdCcgaXMgdXNlZCBhcyBuYW1lCiAgICAgICAgICAgIG9mIHRoZSByb2xlIG9mIHRoZSBBLXNpZGUgb2YgdGhlIHJlbGF0aW9uc2hpcC4gVGhlIG5hbWUgb2YgdGhlIHJvbGUKICAgICAgICAgICAgaXMgc2NvcGVkIHRvIHRoZSB0eXBlIG9uIHdoaWNoIHRoZSBBLXNpZGUgaXMgZGVmaW5lZCBhbmQgTVVTVCBiZQogICAgICAgICAgICB1bmlxdWUgd2l0aGluIHRoZSBzY29wZS4KCiAgICAgICAgICAgIFdoaWxlIHRoZSBwYXJlbnQgJ2xlYWYnIG9yICdsZWFmLWxpc3QnIGRvZXMgbm90IHJlc3VsdCBpbiBhIHByb3BlcnR5CiAgICAgICAgICAgIG9mIHRoZSByZWxhdGlvbnNoaXAsIGl0IGlzIFJFQ09NTUVOREVEIHRvIGF2b2lkIHVzaW5nIHRoZSBuYW1lIG9mIGFuCiAgICAgICAgICAgIGV4aXN0aW5nIHR5cGUgcHJvcGVydHkgYXMgcm9sZSBuYW1lIHRvIGF2b2lkIHBvdGVudGlhbCBhbWJpZ3VpdGllcwogICAgICAgICAgICBiZXR3ZWVuIHByb3BlcnRpZXMgb2YgYSB0eXBlLCBhbmQgcm9sZXMgb2YgYSByZWxhdGlvbnNoaXAgb24gdGhlCiAgICAgICAgICAgIHR5cGUuCgogICAgICAgICAgICBUaGUgYXJndW1lbnQgaXMgdGhlIG5hbWUgb2YgdGhlIHR5cGUgb24gd2hpY2ggdGhlIEEtc2lkZSByZXNpZGVzLgogICAgICAgICAgICBJZiB0aGUgdHlwZSBpcyBkZWNsYXJlZCBpbiBhbm90aGVyIG1vZHVsZSwgdGhlIHR5cGUgbXVzdCBiZQogICAgICAgICAgICBwcmVmaXhlZCwgYW5kIGEgY29ycmVzcG9uZGluZyAnaW1wb3J0JyBzdGF0ZW1lbnQgYmUgdXNlZCB0byBkZWNsYXJlCiAgICAgICAgICAgIHRoZSBwcmVmaXguIjsKCiAgICAgICAgYXJndW1lbnQgYVNpZGVUeXBlOwogICAgfQoKICAgIGV4dGVuc2lvbiBiU2lkZSB7CiAgICAgICAgZGVzY3JpcHRpb24KICAgICAgICAgICAgIkRlZmluZXMgdGhlIEItc2lkZSBvZiBhIHJlbGF0aW9uc2hpcC4KCiAgICAgICAgICAgIFRoZSBzdGF0ZW1lbnQgTVVTVCBvbmx5IGJlIGEgc3Vic3RhdGVtZW50IG9mIGEgJ2xlYWYnIG9yICdsZWFmLWxpc3QnCiAgICAgICAgICAgIHN0YXRlbWVudCwgd2hpY2ggaXRzZWxmIG11c3QgYmUgYSBzdWJzdGF0ZW1lbnQgb2YgdGhlCiAgICAgICAgICAgICd1bmktZGlyZWN0aW9uYWwtdG9wb2xvZ3ktcmVsYXRpb25zaGlwJyBzdGF0ZW1lbnQuCgogICAgICAgICAgICBUaGUgZGF0YSB0eXBlIG9mIHRoZSBwYXJlbnQgJ2xlYWYnIG9yICdsZWFmLWxpc3QnIE1VU1QgYmUKICAgICAgICAgICAgJ2luc3RhbmNlLWlkZW50aWZpZXInLiBDb25zdHJhaW50cyBNQVkgYmUgdXNlZCBhcyBwYXJ0IG9mIHRoZSBwYXJlbnQKICAgICAgICAgICAgJ2xlYWYnIG9yICdsZWFmLWxpc3QnIHRvIGVuZm9yY2UgY2FyZGluYWxpdHkuCgogICAgICAgICAgICBUaGUgaWRlbnRpZmllciBvZiB0aGUgcGFyZW50ICdsZWFmJyBvciAnbGVhZi1saXN0JyBpcyB1c2VkIGFzIG5hbWUKICAgICAgICAgICAgb2YgdGhlIHJvbGUgb2YgdGhlIEItc2lkZSBvZiB0aGUgcmVsYXRpb25zaGlwLiBUaGUgbmFtZSBvZiB0aGUgcm9sZQogICAgICAgICAgICBpcyBzY29wZWQgdG8gdGhlIHR5cGUgb24gd2hpY2ggdGhlIEItc2lkZSBpcyBkZWZpbmVkIGFuZCBNVVNUIGJlCiAgICAgICAgICAgIHVuaXF1ZSB3aXRoaW4gdGhlIHNjb3BlLgoKICAgICAgICAgICAgV2hpbGUgdGhlIHBhcmVudCAnbGVhZicgb3IgJ2xlYWYtbGlzdCcgZG9lcyBub3QgcmVzdWx0IGluIGEgcHJvcGVydHkKICAgICAgICAgICAgb2YgdGhlIHJlbGF0aW9uc2hpcCwgaXQgaXMgUkVDT01NRU5ERUQgdG8gYXZvaWQgdXNpbmcgdGhlIG5hbWUgb2YgYW4KICAgICAgICAgICAgZXhpc3RpbmcgdHlwZSBwcm9wZXJ0eSBhcyByb2xlIG5hbWUgdG8gYXZvaWQgcG90ZW50aWFsIGFtYmlndWl0aWVzCiAgICAgICAgICAgIGJldHdlZW4gcHJvcGVydGllcyBvZiBhIHR5cGUsIGFuZCByb2xlcyBvZiBhIHJlbGF0aW9uc2hpcCBvbiB0aGUKICAgICAgICAgICAgdHlwZS4KCiAgICAgICAgICAgIFRoZSBhcmd1bWVudCBpcyB0aGUgbmFtZSBvZiB0aGUgdHlwZSBvbiB3aGljaCB0aGUgQi1zaWRlIHJlc2lkZXMuCiAgICAgICAgICAgIElmIHRoZSB0eXBlIGlzIGRlY2xhcmVkIGluIGFub3RoZXIgbW9kdWxlLCB0aGUgdHlwZSBtdXN0IGJlCiAgICAgICAgICAgIHByZWZpeGVkLCBhbmQgYSBjb3JyZXNwb25kaW5nICdpbXBvcnQnIHN0YXRlbWVudCBiZSB1c2VkIHRvIGRlY2xhcmUKICAgICAgICAgICAgdGhlIHByZWZpeC4iOwoKICAgICAgICBhcmd1bWVudCBiU2lkZVR5cGU7CiAgICB9CgogICAgZXh0ZW5zaW9uIGRvbWFpbiB7CiAgICAgICAgZGVzY3JpcHRpb24gIktleXdvcmQgdXNlZCB0byBjYXJyeSBkb21haW4gaW5mb3JtYXRpb24uIjsKICAgICAgICBhcmd1bWVudCBkb21haW5OYW1lOwogICAgfQoKICAgIGV4dGVuc2lvbiBsYWJlbCB7CiAgICAgICAgZGVzY3JpcHRpb24KICAgICAgICAgICAgIlRoZSBsYWJlbCBjYW4gYmUgdXNlZCB0byBnaXZlIG1vZHVsZXMgYW5kIHN1Ym1vZHVsZXMgYSBzZW1hbnRpYwogICAgICAgICAgICB2ZXJzaW9uLCBpbiBhZGRpdGlvbiB0byB0aGVpciByZXZpc2lvbi4KCiAgICAgICAgICAgIFRoZSBmb3JtYXQgb2YgdGhlIGxhYmVsIGlzIOKAmHgueS564oCZIOKAkyBleHByZXNzZWQgYXMgcGF0dGVybiwgaXQgaXMKICAgICAgICAgICAgWzAtOV0rXFwuWzAtOV0rXFwuWzAtOV0rCgogICAgICAgICAgICBUaGUgc3RhdGVtZW50IE1VU1Qgb25seSBiZSBhIHN1YnN0YXRlbWVudCBvZiB0aGUgcmV2aXNpb24gc3RhdGVtZW50LgogICAgICAgICAgICBaZXJvIG9yIG9uZSByZXZpc2lvbiBsYWJlbCBzdGF0ZW1lbnRzIHBlciBwYXJlbnQgc3RhdGVtZW50IGFyZQogICAgICAgICAgICBhbGxvd2VkLgoKICAgICAgICAgICAgUmV2aXNpb24gbGFiZWxzIE1VU1QgYmUgdW5pcXVlIGFtb25nc3QgYWxsIHJldmlzaW9ucyBvZiBhIG1vZHVsZSBvcgogICAgICAgICAgICBzdWJtb2R1bGUuIjsKCiAgICAgICAgYXJndW1lbnQgc2VtdmVyc2lvbjsKICAgIH0KfQ==
+o-ran-smo-teiv-common-yang-types	urn:o-ran:smo-teiv-common-yang-types	\N	[]	2024-05-24	bW9kdWxlIG8tcmFuLXNtby10ZWl2LWNvbW1vbi15YW5nLXR5cGVzIHsKICAgIHlhbmctdmVyc2lvbiAxLjE7CiAgICBuYW1lc3BhY2UgInVybjpvLXJhbjpzbW8tdGVpdi1jb21tb24teWFuZy10eXBlcyI7CiAgICBwcmVmaXggb3ItdGVpdi10eXBlczsKCiAgICBpbXBvcnQgby1yYW4tc21vLXRlaXYtY29tbW9uLXlhbmctZXh0ZW5zaW9ucyB7IHByZWZpeCBvci10ZWl2LXlleHQ7IH0KCiAgICBpbXBvcnQgXzNncHAtY29tbW9uLXlhbmctdHlwZXMgeyBwcmVmaXggdHlwZXMzZ3BwOyB9CgogICAgb3JnYW5pemF0aW9uICJPUkFOIjsKICAgIGNvbnRhY3QgIlRoZSBBdXRob3JzIjsKICAgIGRlc2NyaXB0aW9uCiAgICAiVG9wb2xvZ3kgYW5kIEludmVudG9yeSBjb21tb24gdHlwZXMgbW9kZWwuCgogICAgQ29weXJpZ2h0IChDKSAyMDI0IEVyaWNzc29uCiAgICBNb2RpZmljYXRpb25zIENvcHlyaWdodCAoQykgMjAyNCBPcGVuSW5mcmEgRm91bmRhdGlvbiBFdXJvcGUKCiAgICBUaGlzIG1vZGVsIGNvbnRhaW5zIHJlLXVzYWJsZSBkYXRhIHR5cGVzIHRoYXQgdG9wb2xvZ3kgYW5kIGludmVudG9yeSBtb2RlbHMKICAgIHdpbGwgZnJlcXVlbnRseSB1c2UgYXMgcGFydCBvZiB0eXBlcyBhbmQgcmVsYXRpb25zaGlwcy4iOwoKICAgIHJldmlzaW9uICIyMDI0LTA1LTI0IiB7CiAgICAgICAgZGVzY3JpcHRpb24gIkluaXRpYWwgcmV2aXNpb24uIjsKICAgICAgICBvci10ZWl2LXlleHQ6bGFiZWwgMC4zLjA7CiAgICB9CgogICAgZ3JvdXBpbmcgVG9wX0dycF9UeXBlIHsKICAgICAgICBkZXNjcmlwdGlvbiAiR3JvdXBpbmcgY29udGFpbmluZyB0aGUga2V5IGF0dHJpYnV0ZSBjb21tb24gdG8gYWxsIHR5cGVzLgogICAgICAgICAgICBBbGwgdHlwZXMgTVVTVCB1c2UgdGhpcyBncm91cGluZy4iOwoKICAgICAgICBsZWFmIGlkIHsKICAgICAgICAgICAgdHlwZSBzdHJpbmc7CiAgICAgICAgICAgIGRlc2NyaXB0aW9uICJVbmlxdWUgaWRlbnRpZmllciBvZiB0b3BvbG9neSBlbnRpdGllcy4gUmVwcmVzZW50cyB0aGUKICAgICAgICAgICAgICAgIEVudGl0eSBJbnN0YW5jZSBJZGVudGlmaWVyLiI7CiAgICAgICAgfQogICAgfQoKICAgIGNvbnRhaW5lciBkZWNvcmF0b3JzIHsKICAgICAgICBkZXNjcmlwdGlvbgogICAgICAgICAgICAiVGhpcyBjb250YWluZXIgc2VydmVzIGFzIGV4dGVuc2lvbiBwb2ludCBmb3IgYXBwbGljYXRpb25zIHdpc2hpbmcKICAgICAgICAgICAgdG8gZGVmaW5lIHRoZWlyIG93biBkZWNvcmF0b3JzLiBUaGlzIGlzIGRvbmUgdmlhIGF1Z21lbnRhdGlvbnMuIFRoZXkKICAgICAgICAgICAgY2FuIG9ubHkgYmUgZGVmaW5lZCBpbiBuYW1lIHZhbHVlIHBhaXIuCgogICAgICAgICAgICBUaGlzIGlzIGEgY29uc3VtZXIgZGF0YSBhbmQgY2FuIGJlIGF0dGFjaGVkIHRvIFRvcG9sb2d5IEVudGl0eSBvcgogICAgICAgICAgICBUb3BvbG9neSBSZWxhdGlvbiBpbnN0YW5jZSwgb3V0c2lkZSBvZiB0aGUgZGVjbGFyZWQgVG9wb2xvZ3kgRW50aXR5CiAgICAgICAgICAgIG9yIFRvcG9sb2d5IFJlbGF0aW9uc2hpcCdzIGF0dHJpYnV0ZXMuIFRoaXMgY2Fubm90IGJlIGluc3RhbnRpYXRlZCwKICAgICAgICAgICAgYW5kIGl0IE1VU1QgTk9UIGJlIGF1Z21lbnRlZCBvciBkZXZpYXRlZCBpbiBhbnkgd2F5LCB1bmxlc3Mgc3RhdGVkCiAgICAgICAgICAgIG90aGVyd2lzZS4iOwogICAgfQoKICAgIGxlYWYtbGlzdCBjbGFzc2lmaWVycyB7CiAgICAgICAgZGVzY3JpcHRpb24KICAgICAgICAgICAgIkNvbnN1bWVyIGRlZmluZWQgdGFncyB0byB0b3BvbG9neSBlbnRpdGllcyBhbmQgcmVsYXRpb25zaGlwcy4KCiAgICAgICAgICAgIFRoaXMgaXMgYSBjb25zdW1lciBkYXRhIGFuZCBjYW4gYmUgYXR0YWNoZWQgdG8gVG9wb2xvZ3kgRW50aXR5IG9yCiAgICAgICAgICAgIFRvcG9sb2d5IFJlbGF0aW9uIGluc3RhbmNlLCBvdXRzaWRlIG9mIHRoZSBkZWNsYXJlZCBUb3BvbG9neSBFbnRpdHkKICAgICAgICAgICAgb3IgVG9wb2xvZ3kgUmVsYXRpb25zaGlwJ3MgYXR0cmlidXRlcy4gVGhpcyBjYW5ub3QgYmUgaW5zdGFudGlhdGVkLAogICAgICAgICAgICBhbmQgaXQgTVVTVCBOT1QgYmUgYXVnbWVudGVkIG9yIGRldmlhdGVkIGluIGFueSB3YXksIHVubGVzcyBzdGF0ZWQKICAgICAgICAgICAgb3RoZXJ3aXNlLiI7CgogICAgICAgIHR5cGUgaWRlbnRpdHlyZWYgeyBiYXNlIGNsYXNzaWZpZXI7IH0KICAgIH0KCiAgICBsZWFmLWxpc3Qgc291cmNlSWRzIHsKICAgICAgICBkZXNjcmlwdGlvbgogICAgICAgICAgICAiQW4gb3JkZXJlZCBsaXN0IG9mIGlkZW50aXRpZXMgdGhhdCByZXByZXNlbnQgdGhlIHNldCBvZiBuYXRpdmUKICAgICAgICAgICAgc291cmNlIGlkZW50aWZpZXJzIGZvciBwYXJ0aWNpcGF0aW5nIGVudGl0aWVzLgoKICAgICAgICAgICAgVGhpcyBpcyBhIGNvbnN1bWVyIGRhdGEgYW5kIGNhbiBiZSBhdHRhY2hlZCB0byBUb3BvbG9neSBFbnRpdHkgb3IKICAgICAgICAgICAgVG9wb2xvZ3kgUmVsYXRpb24gaW5zdGFuY2UsIG91dHNpZGUgb2YgdGhlIGRlY2xhcmVkIFRvcG9sb2d5IEVudGl0eQogICAgICAgICAgICBvciBUb3BvbG9neSBSZWxhdGlvbnNoaXAncyBhdHRyaWJ1dGVzLiBUaGlzIGNhbm5vdCBiZSBpbnN0YW50aWF0ZWQsCiAgICAgICAgICAgIGFuZCBpdCBNVVNUIE5PVCBiZSBhdWdtZW50ZWQgb3IgZGV2aWF0ZWQgaW4gYW55IHdheSwgdW5sZXNzIHN0YXRlZAogICAgICAgICAgICBvdGhlcndpc2UuIjsKCiAgICAgICAgdHlwZSBzdHJpbmc7CiAgICAgICAgb3JkZXJlZC1ieSB1c2VyOwogICAgfQoKICAgIGNvbnRhaW5lciBtZXRhZGF0YSB7CiAgICAgICAgZGVzY3JpcHRpb24KICAgICAgICAgICAgIlRoaXMgY29udGFpbmVyIHNlcnZlcyBhcyBleHRlbnNpb24gcG9pbnQgdG8gZGVmaW5lIG1ldGFkYXRhLiBUaGV5CiAgICAgICAgICAgIGNhbiBvbmx5IGJlIGRlZmluZWQgaW4gbmFtZSB2YWx1ZSBwYWlyLgoKICAgICAgICAgICAgVGhpcyBpcyBhIGNvbnN1bWVyIGRhdGEgYW5kIGNhbiBiZSBhdHRhY2hlZCB0byBUb3BvbG9neSBFbnRpdHkgb3IKICAgICAgICAgICAgVG9wb2xvZ3kgUmVsYXRpb24gaW5zdGFuY2UsIG91dHNpZGUgb2YgdGhlIGRlY2xhcmVkIFRvcG9sb2d5IEVudGl0eQogICAgICAgICAgICBvciBUb3BvbG9neSBSZWxhdGlvbnNoaXAncyBhdHRyaWJ1dGVzLiBUaGlzIGNhbm5vdCBiZSBpbnN0YW50aWF0ZWQsCiAgICAgICAgICAgIGFuZCBpdCBNVVNUIE5PVCBiZSBhdWdtZW50ZWQgb3IgZGV2aWF0ZWQgaW4gYW55IHdheSwgdW5sZXNzIHN0YXRlZAogICAgICAgICAgICBvdGhlcndpc2UuIjsKICAgIH0KCiAgICBpZGVudGl0eSBjbGFzc2lmaWVyewogICAgICAgIGRlc2NyaXB0aW9uICJUaGUgY2xhc3NpZmllciBpcyB1c2VkIGFzIGEgYmFzZSB0byBwcm92aWRlIGFsbCBjbGFzc2lmaWVycwogICAgICAgICAgICB3aXRoIGlkZW50aXR5LiAiOwogICAgfQp9
+o-ran-smo-teiv-equipment	urn:o-ran:smo-teiv-equipment	EQUIPMENT	[]	2024-05-24	bW9kdWxlIG8tcmFuLXNtby10ZWl2LWVxdWlwbWVudCB7CiAgICB5YW5nLXZlcnNpb24gMS4xOwogICAgbmFtZXNwYWNlICJ1cm46by1yYW46c21vLXRlaXYtZXF1aXBtZW50IjsKICAgIHByZWZpeCBvci10ZWl2LWVxdWlwOwoKICAgIGltcG9ydCBvLXJhbi1zbW8tdGVpdi1jb21tb24teWFuZy10eXBlcyB7IHByZWZpeCBvci10ZWl2LXR5cGVzOyB9CgogICAgaW1wb3J0IG8tcmFuLXNtby10ZWl2LWNvbW1vbi15YW5nLWV4dGVuc2lvbnMgeyBwcmVmaXggb3ItdGVpdi15ZXh0OyB9CgogICAgaW1wb3J0IGlldGYtZ2VvLWxvY2F0aW9uIHsKICAgICAgICBwcmVmaXggZ2VvOwogICAgICAgIHJlZmVyZW5jZSAiUkZDIDkxNzk6IEEgWUFORyBHcm91cGluZyBmb3IgR2VvZ3JhcGhpYyBMb2NhdGlvbnMiOwogICAgfQoKICAgIG9yZ2FuaXphdGlvbiAiT1JBTiI7CiAgICBjb250YWN0ICJUaGUgQXV0aG9ycyI7CiAgICBkZXNjcmlwdGlvbgogICAgIkVxdWlwbWVudCB0b3BvbG9neSBtb2RlbC4KCiAgICBDb3B5cmlnaHQgKEMpIDIwMjQgRXJpY3Nzb24KICAgIE1vZGlmaWNhdGlvbnMgQ29weXJpZ2h0IChDKSAyMDI0IE9wZW5JbmZyYSBGb3VuZGF0aW9uIEV1cm9wZQoKICAgIFRoaXMgbW9kZWwgY29udGFpbnMgdGhlIHRvcG9sb2d5IGVudGl0aWVzIGFuZCByZWxhdGlvbnMgaW4gdGhlIEVxdWlwbWVudAogICAgZG9tYWluLCB3aGljaCBpcyBtb2RlbGxlZCB0byB1bmRlcnN0YW5kIHRoZSBwaHlzaWNhbCBsb2NhdGlvbiBvZiBlcXVpcG1lbnQKICAgIHN1Y2ggYXMgYW50ZW5uYXMgYXNzb2NpYXRlZCB3aXRoIGEgY2VsbC9jYXJyaWVyIGFuZCB0aGVpciByZWxldmFudAogICAgcHJvcGVydGllcyBlLmcuIHRpbHQsIG1heCBwb3dlciBldGMuIjsKCiAgICByZXZpc2lvbiAiMjAyNC0wNS0yNCIgewogICAgICAgIGRlc2NyaXB0aW9uICJJbml0aWFsIHJldmlzaW9uLiI7CiAgICAgICAgb3ItdGVpdi15ZXh0OmxhYmVsIDAuMy4wOwogICAgfQoKICAgIG9yLXRlaXYteWV4dDpkb21haW4gRVFVSVBNRU5UOwoKICAgIGxpc3QgQW50ZW5uYU1vZHVsZSB7CiAgICAgICAgZGVzY3JpcHRpb24gIkFuIEFudGVubmEgTW9kdWxlIHJlcHJlc2VudHMgdGhlIHBoeXNpY2FsIGFzcGVjdCBvZiBhbgogICAgICAgICAgICBhbnRlbm5hLiI7CgogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpUb3BfR3JwX1R5cGU7CiAgICAgICAga2V5IGlkOwoKICAgICAgICBjb250YWluZXIgYXR0cmlidXRlcyB7CiAgICAgICAgICAgIGxlYWYgYW50ZW5uYU1vZGVsTnVtYmVyIHsKICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICJWZW5kb3Itc3BlY2lmaWMgYW50ZW5uYSBtb2RlbCBpZGVudGlmaWVyLiBUaGlzCiAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlIGlzIHBhcnQgb2YgQUlTRyB2MyBBREIgU3RhbmRhcmQgYW5kIGhhcyBubwogICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbmFsIGltcGFjdC4iOwogICAgICAgICAgICAgICAgdHlwZSBzdHJpbmc7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGxlYWYgbWVjaGFuaWNhbEFudGVubmFCZWFyaW5nIHsKICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICJBbnRlbm5hIGJlYXJpbmcgb24gYW50ZW5uYSBzdWJ1bml0IHdoZXJlIGFudGVubmEKICAgICAgICAgICAgICAgICAgICB1bml0IGlzIGluc3RhbGxlZC4iOwogICAgICAgICAgICAgICAgdHlwZSBpbnQzMjsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgbGVhZiBtZWNoYW5pY2FsQW50ZW5uYVRpbHQgewogICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIlRoZSBmaXhlZCBhbnRlbm5hIHRpbHQgb2YgdGhlIGluc3RhbGxhdGlvbiwgZGVmaW5lZAogICAgICAgICAgICAgICAgICAgIGFzIHRoZSBpbmNsaW5hdGlvbiBvZiB0aGUgYW50ZW5uYSBlbGVtZW50IHJlc3BlY3QgdG8gdGhlCiAgICAgICAgICAgICAgICAgICAgdmVydGljYWwgcGxhbmUuIEl0IGlzIGEgc2lnbmVkIHZhbHVlLiBQb3NpdGl2ZSBpbmRpY2F0ZXMKICAgICAgICAgICAgICAgICAgICBkb3dudGlsdCwgYW5kIG5lZ2F0aXZlIGluZGljYXRlcyB1cHRpbHQuIjsKICAgICAgICAgICAgICAgIHR5cGUgaW50MzI7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGxlYWYgcG9zaXRpb25XaXRoaW5TZWN0b3IgewogICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIkFudGVubmEgdW5pdCBwb3NpdGlvbiB3aXRoaW4gc2VjdG9yLiBUaGlzIGF0dHJpYnV0ZQogICAgICAgICAgICAgICAgICAgIGlzIHBhcnQgb2YgQUlTRyB2MyBBREIgU3RhbmRhcmQgYW5kIGhhcyBubyBvcGVyYXRpb25hbAogICAgICAgICAgICAgICAgICAgIGltcGFjdC4iOwogICAgICAgICAgICAgICAgdHlwZSBzdHJpbmc7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGxlYWYgdG90YWxUaWx0IHsKICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICJUb3RhbCBhbnRlbm5hIGVsZXZhdGlvbiBpbmNsdWRpbmcgdGhlIGluc3RhbGxlZAogICAgICAgICAgICAgICAgICAgIHRpbHQgYW5kIHRoZSB0aWx0IGFwcGxpZWQgYnkgdGhlIFJlbW90ZSBFbGVjdHJpY2FsCiAgICAgICAgICAgICAgICAgICAgVGlsdCAoUkVUKS4iOwogICAgICAgICAgICAgICAgdHlwZSBpbnQzMjsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgbGVhZiBlbGVjdHJpY2FsQW50ZW5uYVRpbHQgewogICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIkVsZWN0cmljYWxseS1jb250cm9sbGVkIHRpbHQgb2YgbWFpbiBiZWFtIG1heGltdW0KICAgICAgICAgICAgICAgICAgICB3aXRoIHJlc3BlY3QgdG8gZGlyZWN0aW9uIG9ydGhvZ29uYWwgdG8gYW50ZW5uYSBlbGVtZW50CiAgICAgICAgICAgICAgICAgICAgYXhpcyAoc2VlIDNHUFAgVFMgMjUuNDY2KS4gVmFsdWUgaXMgc2lnbmVkOyB0aWx0IGRvd24gaXMKICAgICAgICAgICAgICAgICAgICBwb3NpdGl2ZSwgdGlsdCB1cCBpcyBuZWdhdGl2ZS4iOwogICAgICAgICAgICAgICAgdHlwZSBpbnQzMjsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgbGVhZi1saXN0IGFudGVubmFCZWFtV2lkdGggewogICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIlRoZSBhbmd1bGFyIHNwYW4gb2YgdGhlIG1haW4gbG9iZSBvZiB0aGUgYW50ZW5uYQogICAgICAgICAgICAgICAgICAgIHJhZGlhdGlvbiBwYXR0ZXJuIGluIHRoZSBob3Jpem9udGFsIHBsYW5lLiBNZWFzdXJlZCBpbgogICAgICAgICAgICAgICAgICAgIGRlZ3JlZXMuIjsKICAgICAgICAgICAgICAgIHR5cGUgdWludDMyOwogICAgICAgICAgICB9CgogICAgICAgICAgICB1c2VzIGdlbzpnZW8tbG9jYXRpb247CiAgICAgICAgfQogICAgfQp9
+o-ran-smo-teiv-ran	urn:o-ran:smo-teiv-ran	RAN	[]	2024-05-24	bW9kdWxlIG8tcmFuLXNtby10ZWl2LXJhbiB7CiAgICB5YW5nLXZlcnNpb24gMS4xOwogICAgbmFtZXNwYWNlICJ1cm46by1yYW46c21vLXRlaXYtcmFuIjsKICAgIHByZWZpeCBvci10ZWl2LXJhbjsKCiAgICBpbXBvcnQgby1yYW4tc21vLXRlaXYtY29tbW9uLXlhbmctdHlwZXMge3ByZWZpeCBvci10ZWl2LXR5cGVzOyB9CgogICAgaW1wb3J0IG8tcmFuLXNtby10ZWl2LWNvbW1vbi15YW5nLWV4dGVuc2lvbnMge3ByZWZpeCBvci10ZWl2LXlleHQ7IH0KCiAgICBpbXBvcnQgXzNncHAtY29tbW9uLXlhbmctdHlwZXMgeyBwcmVmaXggdHlwZXMzZ3BwOyB9CgogICAgaW1wb3J0IGlldGYtZ2VvLWxvY2F0aW9uIHsKICAgICAgICBwcmVmaXggZ2VvOwogICAgICAgIHJlZmVyZW5jZSAiUkZDIDkxNzk6IEEgWUFORyBHcm91cGluZyBmb3IgR2VvZ3JhcGhpYyBMb2NhdGlvbnMiOwogICAgfQoKICAgIG9yZ2FuaXphdGlvbiAiT1JBTiI7CiAgICBjb250YWN0ICJUaGUgQXV0aG9ycyI7CiAgICBkZXNjcmlwdGlvbgogICAgIlJBTiB0b3BvbG9neSBtb2RlbC4KCiAgICBDb3B5cmlnaHQgKEMpIDIwMjQgRXJpY3Nzb24KICAgIE1vZGlmaWNhdGlvbnMgQ29weXJpZ2h0IChDKSAyMDI0IE9wZW5JbmZyYSBGb3VuZGF0aW9uIEV1cm9wZQoKICAgIFRoaXMgbW9kZWwgY29udGFpbnMgdGhlIHRvcG9sb2d5IGVudGl0aWVzIGFuZCByZWxhdGlvbnMgaW4gdGhlIFJBTiBkb21haW4sCiAgICB3aGljaCByZXByZXNlbnRzIHRoZSBmdW5jdGlvbmFsIGNhcGFiaWxpdHkgb2YgdGhlIGRlcGxveWVkIFJBTiB0aGF0IGFyZQogICAgcmVsZXZhbnQgdG8gckFwcHMgdXNlIGNhc2VzLiI7CgogICAgcmV2aXNpb24gIjIwMjQtMDUtMjQiIHsKICAgICAgICBkZXNjcmlwdGlvbiAiSW5pdGlhbCByZXZpc2lvbi4iOwogICAgICAgIG9yLXRlaXYteWV4dDpsYWJlbCAwLjMuMDsKICAgIH0KCiAgICBvci10ZWl2LXlleHQ6ZG9tYWluIFJBTjsKCiAgICBsaXN0IEdOQkRVRnVuY3Rpb24gewogICAgICAgIGRlc2NyaXB0aW9uICJnTm9kZUIgRGlzdHJpYnV0ZWQgVW5pdCAoZ05CLURVKS4KCiAgICAgICAgICAgIEEgZ05CIG1heSBjb25zaXN0IG9mIGEgZ05CLUNlbnRyYWxpemVkIFVuaXQgKGdOQi1DVSkgYW5kIGEgZ05CLURVLgogICAgICAgICAgICBUaGUgQ1UgcHJvY2Vzc2VzIG5vbi1yZWFsIHRpbWUgcHJvdG9jb2xzIGFuZCBzZXJ2aWNlcywgYW5kIHRoZSBEVQogICAgICAgICAgICBwcm9jZXNzZXMgUEhZIGxldmVsIHByb3RvY29sIGFuZCByZWFsIHRpbWUgc2VydmljZXMuIFRoZSBnTkItQ1UgYW5kCiAgICAgICAgICAgIHRoZSBnTkItRFUgdW5pdHMgYXJlIGNvbm5lY3RlZCB2aWEgRjEgbG9naWNhbCBpbnRlcmZhY2UuCgogICAgICAgICAgICBUaGUgZm9sbG93aW5nIGlzIHRydWUgZm9yIGEgZ05CLURVOgogICAgICAgICAgICBJcyBjb25uZWN0ZWQgdG8gdGhlIGdOQi1DVS1DUCB0aHJvdWdoIHRoZSBGMS1DIGludGVyZmFjZS4gSXMKICAgICAgICAgICAgY29ubmVjdGVkIHRvIHRoZSBnTkItQ1UtVVAgdGhyb3VnaCB0aGUgRjEtVSBpbnRlcmZhY2UuIE9uZSBnTkItRFUgaXMKICAgICAgICAgICAgY29ubmVjdGVkIHRvIG9ubHkgb25lIGdOQi1DVS1DUC4gT25lIGdOQi1EVSBjYW4gYmUgY29ubmVjdGVkIHRvCiAgICAgICAgICAgIG11bHRpcGxlIGdOQi1DVS1VUHMgdW5kZXIgdGhlIGNvbnRyb2wgb2YgdGhlIHNhbWUgZ05CLUNVLUNQLgoKICAgICAgICAgICAgTm90ZTogQSBnTkIgbWF5IGNvbnNpc3Qgb2YgYSBnTkItQ1UtQ1AsIG11bHRpcGxlIGdOQi1DVS1VUHMgYW5kCiAgICAgICAgICAgIG11bHRpcGxlIGdOQi1EVXMuIGdOQi1EVSBpcyBhIGNvbmNyZXRlIGNsYXNzIHRoYXQgZXh0ZW5kcyB0aGUgTkctUkFOCiAgICAgICAgICAgIG5vZGUgb2JqZWN0LiBJbiBUb3BvbG9neSwgeW91IGNhbiBjcmVhdGUsIHJlYWQsIHVwZGF0ZSwgYW5kIGRlbGV0ZQogICAgICAgICAgICB0aGUgZ05CLURVIG9iamVjdC4iOwoKICAgICAgICB1c2VzIG9yLXRlaXYtdHlwZXM6VG9wX0dycF9UeXBlOwogICAgICAgIGtleSBpZDsKCiAgICAgICAgY29udGFpbmVyIGF0dHJpYnV0ZXMgewogICAgICAgICAgICBjb250YWluZXIgZFVwTE1OSWQgewogICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIlBMTU4gaWRlbnRpZmllciB1c2VkIGFzIHBhcnQgb2YgUE0gRXZlbnRzIGRhdGEiOwogICAgICAgICAgICAgICAgdXNlcyB0eXBlczNncHA6UExNTklkOwogICAgICAgICAgICB9CgogICAgICAgICAgICBsZWFmIGdOQkRVSWQgewogICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIlVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgRFUgd2l0aGluIGEgZ05vZGVCIjsKICAgICAgICAgICAgICAgIHR5cGUgaW50NjQ7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGxlYWYgZ05CSWQgewogICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIklkZW50aXR5IG9mIGdOb2RlQiB3aXRoaW4gYSBQTE1OIjsKICAgICAgICAgICAgICAgIHR5cGUgaW50NjQ7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGxlYWYgZ05CSWRMZW5ndGggewogICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIkxlbmd0aCBvZiBnTkJJZCBiaXQgc3RyaW5nIHJlcHJlc2VudGF0aW9uIjsKICAgICAgICAgICAgICAgIHR5cGUgaW50MzI7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgbGlzdCBFTm9kZUJGdW5jdGlvbiB7CiAgICAgICAgZGVzY3JpcHRpb24gIkFuIEV2b2x2ZWQgTm9kZSBCIChlTm9kZUIpIGlzIHRoZSBvbmx5IG1hbmRhdG9yeSBub2RlIGluCiAgICAgICAgICAgIHRoZSByYWRpbyBhY2Nlc3MgbmV0d29yayAoUkFOKSBvZiBMb25nLVRlcm0gRXZvbHV0aW9uIChMVEUpLiBUaGUKICAgICAgICAgICAgZU5vZGVCIGlzIGEgY29tcGxleCBiYXNlIHN0YXRpb24gdGhhdCBoYW5kbGVzIHJhZGlvIGNvbW11bmljYXRpb25zCiAgICAgICAgICAgIGluIHRoZSBjZWxsIGFuZCBjYXJyaWVzIG91dCByYWRpbyByZXNvdXJjZSBtYW5hZ2VtZW50IGFuZCBoYW5kb3ZlcgogICAgICAgICAgICBkZWNpc2lvbnMuIFVubGlrZSAyLzNHIHdpcmVsZXNzIFJBTiwgdGhlcmUgaXMgbm8gY2VudHJhbGl6ZWQgcmFkaW8KICAgICAgICAgICAgbmV0d29yayBjb250cm9sbGVyIGluIExURS4gSXQgaXMgdGhlIGhhcmR3YXJlIHRoYXQgaXMgY29ubmVjdGVkIHRvCiAgICAgICAgICAgIHRoZSBtb2JpbGUgcGhvbmUgbmV0d29yayB0aGF0IGNvbW11bmljYXRlcyBkaXJlY3RseSB3aXRoIG1vYmlsZQogICAgICAgICAgICBoYW5kc2V0cyAoVXNlciBFcXVpcG1lbnQpLCBsaWtlIGEgYmFzZSB0cmFuc2NlaXZlciBzdGF0aW9uIChCVFMpIGluCiAgICAgICAgICAgIEdTTSBuZXR3b3Jrcy4gVGhpcyBzaW1wbGlmaWVzIHRoZSBhcmNoaXRlY3R1cmUgYW5kIGFsbG93cyBsb3dlcgogICAgICAgICAgICByZXNwb25zZSB0aW1lcy4iOwoKICAgICAgICB1c2VzIG9yLXRlaXYtdHlwZXM6VG9wX0dycF9UeXBlOwogICAgICAgIGtleSBpZDsKCiAgICAgICAgY29udGFpbmVyIGF0dHJpYnV0ZXMgewogICAgICAgICAgICBsZWFmIGVOQklkIHsKICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICJUaGUgRU5vZGVCIElEIHRoYXQgZm9ybXMgcGFydCBvZiB0aGUgQ2VsbCBHbG9iYWwKICAgICAgICAgICAgICAgICAgICBJZGVudGl0eSwgYW5kIGlzIGFsc28gdXNlZCB0byBpZGVudGlmeSB0aGUgbm9kZSBvdmVyIHRoZSBTMQogICAgICAgICAgICAgICAgICAgIGludGVyZmFjZSI7CiAgICAgICAgICAgICAgICB0eXBlIGludDMyOwogICAgICAgICAgICAgICAgZGVmYXVsdCAxMTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgY29udGFpbmVyIGVOb2RlQlBsbW5JZCB7CiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiAiVGhlIEVOb2RlQiBQdWJsaWMgTGFuZCBNb2JpbGUgTmV0d29yayAoUExNTikgSUQKICAgICAgICAgICAgICAgICAgICB0aGF0IGZvcm1zIHBhcnQgb2YgdGhlIEVOb2RlQiBHbG9iYWwgSUQgdXNlZCB0byBpZGVudGlmeSB0aGUKICAgICAgICAgICAgICAgICAgICBub2RlIG92ZXIgdGhlIFMxIGludGVyZmFjZS4gTm90ZTogVGhlIHZhbHVlCiAgICAgICAgICAgICAgICAgICAgKE1DQz0wMDEsIE1OQz0wMSkgaW5kaWNhdGVzIHRoYXQgdGhlIFBMTU4gaXMgbm90IGluaXRpYXRlZC4KICAgICAgICAgICAgICAgICAgICBUaGUgdmFsdWUgY2FuIG5vdCBiZSB1c2VkIGFzIGEgdmFsaWQgUExNTiBJZGVudGl0eS4iOwoKICAgICAgICAgICAgICAgIGxlYWYgbWNjIHsKICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiAiVGhlIE1DQyBwYXJ0IG9mIGEgUExNTiBpZGVudGl0eSB1c2VkIGluIHRoZQogICAgICAgICAgICAgICAgICAgICAgICByYWRpbyBuZXR3b3JrLiI7CiAgICAgICAgICAgICAgICAgICAgdHlwZSBpbnQzMiB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlIDAuLjk5OTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBsZWFmIG1uYyB7CiAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIlRoZSBNTkMgcGFydCBvZiBhIFBMTU4gaWRlbnRpdHkgdXNlZCBpbiB0aGUKICAgICAgICAgICAgICAgICAgICAgICAgcmFkaW8gbmV0d29yay4iOwogICAgICAgICAgICAgICAgICAgIHR5cGUgaW50MzIgewogICAgICAgICAgICAgICAgICAgICAgICByYW5nZSAwLi45OTk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgbGVhZiBtbmNMZW5ndGggewogICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICJUaGUgbGVuZ3RoIG9mIHRoZSBNTkMgcGFydCBvZiBhIFBMTU4gaWRlbnRpdHkKICAgICAgICAgICAgICAgICAgICAgICAgdXNlZCBpbiB0aGUgcmFkaW8gbmV0d29yay4iOwogICAgICAgICAgICAgICAgICAgIHR5cGUgaW50MzIgewogICAgICAgICAgICAgICAgICAgICAgICByYW5nZSAyLi4zOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICBsaXN0IExURVNlY3RvckNhcnJpZXIgewogICAgICAgIGRlc2NyaXB0aW9uICJUaGUgTFRFIFNlY3RvciBDYXJyaWVyIG9iamVjdCBwcm92aWRlcyB0aGUgYXR0cmlidXRlcyBmb3IKICAgICAgICAgICAgZGVmaW5pbmcgdGhlIGxvZ2ljYWwgY2hhcmFjdGVyaXN0aWNzIG9mIGEgY2FycmllciAoY2VsbCkgaW4gYQogICAgICAgICAgICBzZWN0b3IuIEEgc2VjdG9yIGlzIGEgY292ZXJhZ2UgYXJlYSBhc3NvY2lhdGVkIHdpdGggYSBiYXNlIHN0YXRpb24KICAgICAgICAgICAgaGF2aW5nIGl0cyBvd24gYW50ZW5uYXMsIHJhZGlvIHBvcnRzLCBhbmQgY29udHJvbCBjaGFubmVscy4gVGhlCiAgICAgICAgICAgIGNvbmNlcHQgb2Ygc2VjdG9ycyB3YXMgZGV2ZWxvcGVkIHRvIGltcHJvdmUgY28tY2hhbm5lbCBpbnRlcmZlcmVuY2UKICAgICAgICAgICAgaW4gY2VsbHVsYXIgc3lzdGVtcywgYW5kIG1vc3Qgd2lyZWxlc3Mgc3lzdGVtcyB1c2UgdGhyZWUgc2VjdG9yCiAgICAgICAgICAgIGNlbGxzLiI7CgogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpUb3BfR3JwX1R5cGU7CiAgICAgICAga2V5IGlkOwoKICAgICAgICBjb250YWluZXIgYXR0cmlidXRlcyB7CiAgICAgICAgICAgIGxlYWYgc2VjdG9yQ2FycmllclR5cGUgewogICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIkluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB0aGUgc2VjdG9yIGNhcnJpZXIKICAgICAgICAgICAgICAgICAgICBtb2RlbGxlZCBieSBNTyBTZWN0b3JDYXJyaWVyIGlzIGEgZGlnaXRhbCBzZWN0b3IuIjsKICAgICAgICAgICAgICAgIHR5cGUgZW51bWVyYXRpb24gewogICAgICAgICAgICAgICAgICAgIGVudW0gbm9ybWFsX3NlY3RvciB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlIDA7CiAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICJOb3QgYSBkaWdpdGFsIHNlY3RvciI7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVudW0gbGVmdF9kaWdpdGFsX3NlY3RvciB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlIDE7CiAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICJMZWZ0IGRpZ2l0YWwgc2VjdG9yIGZvciAyRFMiOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbnVtIHJpZ2h0X2RpZ2l0YWxfc2VjdG9yIHsKICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgMjsKICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIlJpZ2h0IGRpZ2l0YWwgc2VjdG9yIGZvciAyRFMiOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbnVtIGxlZnRfZGlnaXRhbF9zZWN0b3JfM2RzIHsKICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgMzsKICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIkxlZnQgZGlnaXRhbCBzZWN0b3IgZm9yIDNEUyI7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVudW0gcmlnaHRfZGlnaXRhbF9zZWN0b3JfM2RzIHsKICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgNDsKICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIlJpZ2h0IGRpZ2l0YWwgc2VjdG9yIGZvciAzRFMiOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbnVtIG1pZGRsZV9kaWdpdGFsX3NlY3Rvcl8zZHMgewogICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA1OwogICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiAiTWlkZGxlIGRpZ2l0YWwgc2VjdG9yIGZvciAzRFMiOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICBsaXN0IEFudGVubmFDYXBhYmlsaXR5IHsKICAgICAgICBkZXNjcmlwdGlvbiAiVGhpcyBNTyBzZXJ2ZXMgYXMgYSBtYXBwaW5nIGJldHdlZW4gdGhlIGNlbGwgYW5kIHRoZSBSQlMKICAgICAgICAgICAgZXF1aXBtZW50IHVzZWQgdG8gcHJvdmlkZSBjb3ZlcmFnZSBpbiBhIGNlcnRhaW4gZ2VvZ3JhcGhpY2FsIGFyZWEuCiAgICAgICAgICAgIFRoZSBNTyBhbHNvIGNvbnRyb2xzIHRoZSBtYXhpbXVtIG91dHB1dCBwb3dlciBvZiB0aGUgc2VjdG9yLiI7CgogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpUb3BfR3JwX1R5cGU7CiAgICAgICAga2V5IGlkOwoKICAgICAgICBjb250YWluZXIgYXR0cmlidXRlcyB7CiAgICAgICAgICAgIGxlYWYtbGlzdCBlVXRyYW5GcUJhbmRzIHsKICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICJMaXN0IG9mIExURSBmcmVxdWVuY3kgYmFuZHMgdGhhdCBhc3NvY2lhdGVkCiAgICAgICAgICAgICAgICAgICAgaGFyZHdhcmUgc3VwcG9ydHMiOwogICAgICAgICAgICAgICAgdHlwZSBzdHJpbmc7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGxlYWYtbGlzdCBnZXJhbkZxQmFuZHMgewogICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIkxpc3Qgb2YgR0VSQU4gZnJlcXVlbmN5IGJhbmRzIHRoYXQgYXNzb2NpYXRlZAogICAgICAgICAgICAgICAgICAgIGhhcmR3YXJlIHN1cHBvcnRzIjsKICAgICAgICAgICAgICAgIHR5cGUgc3RyaW5nOwogICAgICAgICAgICB9CgogICAgICAgICAgICBsZWFmLWxpc3QgblJGcUJhbmRzIHsKICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICJMaXN0IG9mIE5SIGZyZXF1ZW5jeSBiYW5kcyBhc3NvY2lhdGVkIGhhcmR3YXJlCiAgICAgICAgICAgICAgICAgICAgc3VwcG9ydHMiOwogICAgICAgICAgICAgICAgdHlwZSBzdHJpbmc7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgb3ItdGVpdi15ZXh0OmJpRGlyZWN0aW9uYWxUb3BvbG9neVJlbGF0aW9uc2hpcCBFTk9ERUJGVU5DVElPTl9QUk9WSURFU19MVEVTRUNUT1JDQVJSSUVSIHsgLy8gMSB0byAwLi5uCgogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpUb3BfR3JwX1R5cGU7CiAgICAgICAga2V5IGlkOwoKICAgICAgICBsZWFmLWxpc3QgcHJvdmlkZWQtbHRlU2VjdG9yQ2FycmllciB7CiAgICAgICAgICAgIGRlc2NyaXB0aW9uICJlTm9kZUIgRnVuY3Rpb24gcHJvdmlkZXMgTFRFIFNlY3RvciBDYXJyaWVyLiI7CiAgICAgICAgICAgIG9yLXRlaXYteWV4dDphU2lkZSBFTm9kZUJGdW5jdGlvbjsKICAgICAgICAgICAgdHlwZSBpbnN0YW5jZS1pZGVudGlmaWVyOwogICAgICAgIH0KCiAgICAgICAgbGVhZiBwcm92aWRlZC1ieS1lbm9kZWJGdW5jdGlvbiB7CiAgICAgICAgICAgIGRlc2NyaXB0aW9uICJMVEUgU2VjdG9yIENhcnJpZXIgcHJvdmlkZWQgYnkgZU5vZGVCIEZ1bmN0aW9uLiI7CiAgICAgICAgICAgIG9yLXRlaXYteWV4dDpiU2lkZSBMVEVTZWN0b3JDYXJyaWVyOwogICAgICAgICAgICB0eXBlIGluc3RhbmNlLWlkZW50aWZpZXI7CiAgICAgICAgICAgIG1hbmRhdG9yeSB0cnVlOwogICAgICAgIH0KICAgIH0KCiAgICBvci10ZWl2LXlleHQ6YmlEaXJlY3Rpb25hbFRvcG9sb2d5UmVsYXRpb25zaGlwIExURVNFQ1RPUkNBUlJJRVJfVVNFU19BTlRFTk5BQ0FQQUJJTElUWSB7IC8vIDAuLm4gdG8gMC4uMQoKICAgICAgICB1c2VzIG9yLXRlaXYtdHlwZXM6VG9wX0dycF9UeXBlOwogICAgICAgIGtleSBpZDsKCiAgICAgICAgbGVhZiB1c2VkLWFudGVubmFDYXBhYmlsaXR5IHsKICAgICAgICAgICAgZGVzY3JpcHRpb24gIkxURSBTZWN0b3IgQ2FycmllciB1c2VzIEFudGVubmEgQ2FwYWJpbGl0eS4iOwogICAgICAgICAgICBvci10ZWl2LXlleHQ6YVNpZGUgTFRFU2VjdG9yQ2FycmllcjsKICAgICAgICAgICAgdHlwZSBpbnN0YW5jZS1pZGVudGlmaWVyOwogICAgICAgIH0KCiAgICAgICAgbGVhZi1saXN0IHVzZWQtYnktbHRlU2VjdG9yQ2FycmllciB7CiAgICAgICAgICAgIGRlc2NyaXB0aW9uICJBbnRlbm5hIENhcGFiaWxpdHkgdXNlZCBieSBMVEUgU2VjdG9yIENhcnJpZXIuIjsKICAgICAgICAgICAgb3ItdGVpdi15ZXh0OmJTaWRlIEFudGVubmFDYXBhYmlsaXR5OwogICAgICAgICAgICB0eXBlIGluc3RhbmNlLWlkZW50aWZpZXI7CiAgICAgICAgfQogICAgfQp9
+o-ran-smo-teiv-rel-equipment-ran	urn:o-ran:smo-teiv-rel-equipment-ran	REL_EQUIPMENT_RAN	["o-ran-smo-teiv-equipment", "o-ran-smo-teiv-ran"]	2024-05-24	bW9kdWxlIG8tcmFuLXNtby10ZWl2LXJlbC1lcXVpcG1lbnQtcmFuIHsKICAgIHlhbmctdmVyc2lvbiAxLjE7CiAgICBuYW1lc3BhY2UgInVybjpvLXJhbjpzbW8tdGVpdi1yZWwtZXF1aXBtZW50LXJhbiI7CiAgICBwcmVmaXggb3ItdGVpdi1yZWwtZXF1aXByYW47CgogICAgaW1wb3J0IG8tcmFuLXNtby10ZWl2LWNvbW1vbi15YW5nLXR5cGVzIHsgcHJlZml4IG9yLXRlaXYtdHlwZXM7IH0KCiAgICBpbXBvcnQgby1yYW4tc21vLXRlaXYtY29tbW9uLXlhbmctZXh0ZW5zaW9ucyB7IHByZWZpeCBvci10ZWl2LXlleHQ7IH0KCiAgICBpbXBvcnQgby1yYW4tc21vLXRlaXYtZXF1aXBtZW50IHsgcHJlZml4IG9yLXRlaXYtZXF1aXA7IH0KCiAgICBpbXBvcnQgby1yYW4tc21vLXRlaXYtcmFuIHsgcHJlZml4IG9yLXRlaXYtcmFuOyB9CgogICAgb3JnYW5pemF0aW9uICJPUkFOIjsKICAgIGNvbnRhY3QgIlRoZSBBdXRob3JzIjsKICAgIGRlc2NyaXB0aW9uCiAgICAiRXF1aXBtZW50IGFuZCBSQU4gdG9wb2xvZ3kgcmVsYXRpb24gbW9kZWwuCgogICAgQ29weXJpZ2h0IChDKSAyMDI0IEVyaWNzc29uCiAgICBNb2RpZmljYXRpb25zIENvcHlyaWdodCAoQykgMjAyNCBPcGVuSW5mcmEgRm91bmRhdGlvbiBFdXJvcGUKCiAgICBUaGlzIG1vZGVsIGNvbnRhaW5zIHRoZSB0b3BvbG9neSByZWxhdGlvbnMgYmV0d2VlbiBFcXVpcG1lbnQgYW5kIFJBTi4iOwoKICAgIHJldmlzaW9uICIyMDI0LTA1LTI0IiB7CiAgICAgICAgZGVzY3JpcHRpb24gIkluaXRpYWwgcmV2aXNpb24uIjsKICAgICAgICBvci10ZWl2LXlleHQ6bGFiZWwgMC4zLjA7CiAgICB9CgogICAgb3ItdGVpdi15ZXh0OmRvbWFpbiBSRUxfRVFVSVBNRU5UX1JBTjsKCiAgICBvci10ZWl2LXlleHQ6YmlEaXJlY3Rpb25hbFRvcG9sb2d5UmVsYXRpb25zaGlwIEFOVEVOTkFNT0RVTEVfU0VSVkVTX0FOVEVOTkFDQVBBQklMSVRZIHsgLy8gMC4ubiB0byAwLi5tCgogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpUb3BfR3JwX1R5cGU7CiAgICAgICAga2V5IGlkOwoKICAgICAgICBsZWFmLWxpc3Qgc2VydmljZWQtYW50ZW5uYUNhcGFiaWxpdHkgewogICAgICAgICAgICBkZXNjcmlwdGlvbiAiQW50ZW5uYSBDYXBhYmlsaXR5IHNlcnZpY2VkIGJ5IHRoaXMgQW50ZW5uYSBNb2R1bGUuIjsKICAgICAgICAgICAgb3ItdGVpdi15ZXh0OmFTaWRlIG9yLXRlaXYtZXF1aXA6QW50ZW5uYU1vZHVsZTsKICAgICAgICAgICAgdHlwZSBpbnN0YW5jZS1pZGVudGlmaWVyOwogICAgICAgIH0KCiAgICAgICAgbGVhZi1saXN0IHNlcnZpbmctYW50ZW5uYU1vZHVsZSB7CiAgICAgICAgICAgIGRlc2NyaXB0aW9uICJBbnRlbm5hIE1vZHVsZSBzZXJ2ZXMgdGhpcyBBbnRlbm5hIENhcGFiaWxpdHkuIjsKICAgICAgICAgICAgb3ItdGVpdi15ZXh0OmJTaWRlIG9yLXRlaXYtcmFuOkFudGVubmFDYXBhYmlsaXR5OwogICAgICAgICAgICB0eXBlIGluc3RhbmNlLWlkZW50aWZpZXI7CiAgICAgICAgfQogICAgfQp9
+test-built-in-module	test-built-in-namespace	TEST	[]	2024-05-24	bW9kdWxlIHRlc3QtYnVpbHQtaW4tbW9kdWxlIHsKICAgIHlhbmctdmVyc2lvbiAxLjE7CiAgICBuYW1lc3BhY2UgInRlc3QtYnVpbHQtaW4tbmFtZXNwYWNlIjsKCiAgICBpbXBvcnQgby1yYW4tc21vLXRlaXYtY29tbW9uLXlhbmctdHlwZXMgeyBwcmVmaXggb3ItdGVpdi10eXBlczsgfQoKICAgIGltcG9ydCBvLXJhbi1zbW8tdGVpdi1jb21tb24teWFuZy1leHRlbnNpb25zIHsgcHJlZml4IG9yLXRlaXYteWV4dDsgfQoKICAgIGltcG9ydCBfM2dwcC1jb21tb24teWFuZy10eXBlcyB7IHByZWZpeCB0eXBlczNncHA7IH0KCiAgICBpbXBvcnQgaWV0Zi1nZW8tbG9jYXRpb24gewogICAgICAgIHByZWZpeCBnZW87CiAgICAgICAgcmVmZXJlbmNlICJSRkMgOTE3OTogQSBZQU5HIEdyb3VwaW5nIGZvciBHZW9ncmFwaGljIExvY2F0aW9ucyI7CiAgICB9CgogICAgb3JnYW5pemF0aW9uICJPUkFOIjsKICAgIGNvbnRhY3QgIlRoZSBBdXRob3JzIjsKICAgIGRlc2NyaXB0aW9uCiAgICAiVGVzdCB0b3BvbG9neSBtb2RlbC4iOwoKICAgIHJldmlzaW9uICIyMDI0LTA1LTI0IiB7CiAgICAgICAgZGVzY3JpcHRpb24gIkluaXRpYWwgcmV2aXNpb24uIjsKICAgICAgICBvci10ZWl2LXlleHQ6bGFiZWwgMC4zLjA7CiAgICB9CgogICAgb3ItdGVpdi15ZXh0OmRvbWFpbiBURVNUOwoKICAgIGxpc3QgRW50aXR5VHlwZUEgewoKICAgICAgICB1c2VzIG9yLXRlaXYtdHlwZXM6VG9wX0dycF9UeXBlOwogICAgICAgIGtleSBpZDsKCiAgICB9CgogICAgbGlzdCBFbnRpdHlUeXBlQVdpdGhFbnRpdHlUeXBlTmFtZUxlbmd0aExvbmdlclRoYW5TaXh0eVRocmVlQ2hhcmFjdGVycyB7CgogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpUb3BfR3JwX1R5cGU7CiAgICAgICAga2V5IGlkOwoKICAgICAgICBjb250YWluZXIgYXR0cmlidXRlcyB7CiAgICAgICAgICAgIGxlYWYgYXR0cmlidXRlQTFXaXRoQXR0cmlidXRlTmFtZUxlbmd0aExvbmdlclRoYW5TaXh0eVRocmVlQ2hhcmFjdGVycyB7CiAgICAgICAgICAgICAgICB0eXBlIHN0cmluZzsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgbGVhZiBhdHRyaWJ1dGVBMldpdGhBdHRyaWJ1dGVOYW1lTGVuZ3RoTG9uZ2VyVGhhblNpeHR5VGhyZWVDaGFyYWN0ZXJzIHsKICAgICAgICAgICAgICAgIHR5cGUgdWludDMyOwogICAgICAgICAgICB9CgogICAgICAgICAgICBsZWFmIGF0dHJpYnV0ZUEzV2l0aEF0dHJpYnV0ZU5hbWVMZW5ndGhMb25nZXJUaGFuU2l4dHlUaHJlZUNoYXJhY3RlcnMgewogICAgICAgICAgICAgICAgdHlwZSBpbnQzMjsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgbGVhZiBhdHRyaWJ1dGVBNFdpdGhBdHRyaWJ1dGVOYW1lTGVuZ3RoTG9uZ2VyVGhhblNpeHR5VGhyZWVDaGFyYWN0ZXJzIHsKICAgICAgICAgICAgICAgIHR5cGUgaW50NjQ7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGxlYWYgYXR0cmlidXRlQTVXaXRoQXR0cmlidXRlTmFtZUxlbmd0aExvbmdlclRoYW5TaXh0eVRocmVlQ2hhcmFjdGVycyB7CiAgICAgICAgICAgICAgICB0eXBlIGRlY2ltYWw2NHsKICAgICAgICAgICAgICAgICAgICBmcmFjdGlvbi1kaWdpdHMgNjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHVuaXRzICJkZWdyZWVzIjsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgbGVhZi1saXN0IGF0dHJpYnV0ZUE2V2l0aEF0dHJpYnV0ZU5hbWVMZW5ndGhMb25nZXJUaGFuU2l4dHlUaHJlZUNoYXJhY3RlcnMgewogICAgICAgICAgICAgICAgdHlwZSBzdHJpbmc7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGNvbnRhaW5lciBhdHRyaWJ1dGVBN1dpdGhBdHRyaWJ1dGVOYW1lTGVuZ3RoTG9uZ2VyVGhhblNpeHR5VGhyZWVDaGFyYWN0ZXJzIHsKICAgICAgICAgICAgICAgIHVzZXMgdHlwZXMzZ3BwOlBMTU5JZDsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICBvci10ZWl2LXlleHQ6YmlEaXJlY3Rpb25hbFRvcG9sb2d5UmVsYXRpb25zaGlwIEVOVElUWVRZUEVBX1VTRVNfRU5USVRZVFlQRUFXSVRIRU5USVRZVFlQRU5BTUVMRU5HVEhMT05HRVJUSEFOU0lYVFlUSFJFRUNIQVJBQ1RFUlMgeyAvLyAwLi4xIHRvIDAuLjEKCiAgICAgICAgdXNlcyBvci10ZWl2LXR5cGVzOlRvcF9HcnBfVHlwZTsKICAgICAgICBrZXkgaWQ7CgogICAgICAgIGxlYWYgdXNlZC1lbnRpdHlUeXBlQVdpdGhFbnRpdHlUeXBlTmFtZUxlbmd0aExvbmdlclRoYW5TaXh0eVRocmVlQ2hhcmFjdGVycyB7CiAgICAgICAgICAgIG9yLXRlaXYteWV4dDphU2lkZSBFbnRpdHlUeXBlQTsKICAgICAgICAgICAgdHlwZSBpbnN0YW5jZS1pZGVudGlmaWVyOwogICAgICAgfQoKICAgICAgICBsZWFmIHVzZWQtYnktZW50aXR5VHlwZUEgewogICAgICAgICAgICBvci10ZWl2LXlleHQ6YlNpZGUgRW50aXR5VHlwZUFXaXRoRW50aXR5VHlwZU5hbWVMZW5ndGhMb25nZXJUaGFuU2l4dHlUaHJlZUNoYXJhY3RlcnM7CiAgICAgICAgICAgIHR5cGUgaW5zdGFuY2UtaWRlbnRpZmllcjsKICAgICAgIH0KICAgIH0KCiAgICBvci10ZWl2LXlleHQ6YmlEaXJlY3Rpb25hbFRvcG9sb2d5UmVsYXRpb25zaGlwIEVOVElUWVRZUEVBX1BST1ZJREVTX0VOVElUWVRZUEVBV0lUSEVOVElUWVRZUEVOQU1FTEVOR1RITE9OR0VSVEhBTlNJWFRZVEhSRUVDSEFSQUNURVJTIHsgLy8gMC4uMSB0byAwLi5uCgogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpUb3BfR3JwX1R5cGU7CiAgICAgICAga2V5IGlkOwoKICAgICAgICBsZWFmLWxpc3QgcHJvdmlkZWQtZW50aXR5VHlwZUFXaXRoRW50aXR5VHlwZU5hbWVMZW5ndGhMb25nZXJUaGFuU2l4dHlUaHJlZUNoYXJhY3RlcnMgewogICAgICAgICAgICBvci10ZWl2LXlleHQ6YVNpZGUgRW50aXR5VHlwZUE7CiAgICAgICAgICAgIHR5cGUgaW5zdGFuY2UtaWRlbnRpZmllcjsKICAgICAgIH0KCiAgICAgICAgbGVhZiBwcm92aWRlZC1ieS1lbnRpdHlUeXBlQSB7CiAgICAgICAgICAgIG9yLXRlaXYteWV4dDpiU2lkZSBFbnRpdHlUeXBlQVdpdGhFbnRpdHlUeXBlTmFtZUxlbmd0aExvbmdlclRoYW5TaXh0eVRocmVlQ2hhcmFjdGVyczsKICAgICAgICAgICAgdHlwZSBpbnN0YW5jZS1pZGVudGlmaWVyOwogICAgICAgfQogICAgfQoKICAgIG9yLXRlaXYteWV4dDpiaURpcmVjdGlvbmFsVG9wb2xvZ3lSZWxhdGlvbnNoaXAgRU5USVRZVFlQRUFfR1JPVVBTX0VOVElUWVRZUEVBV0lUSEVOVElUWVRZUEVOQU1FTEVOR1RITE9OR0VSVEhBTlNJWFRZVEhSRUVDSEFSQUNURVJTIHsgLy8gMC4ubiB0byAwLi4xCgogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpUb3BfR3JwX1R5cGU7CiAgICAgICAga2V5IGlkOwoKICAgICAgICBsZWFmIGdyb3VwZWQtZW50aXR5VHlwZUFXaXRoRW50aXR5VHlwZU5hbWVMZW5ndGhMb25nZXJUaGFuU2l4dHlUaHJlZUNoYXJhY3RlcnMgewogICAgICAgICAgICBvci10ZWl2LXlleHQ6YVNpZGUgRW50aXR5VHlwZUE7CiAgICAgICAgICAgIHR5cGUgaW5zdGFuY2UtaWRlbnRpZmllcjsKICAgICAgIH0KCiAgICAgICAgbGVhZi1saXN0IGdyb3VwZWQtYnktZW50aXR5VHlwZUEgewogICAgICAgICAgICBvci10ZWl2LXlleHQ6YlNpZGUgRW50aXR5VHlwZUFXaXRoRW50aXR5VHlwZU5hbWVMZW5ndGhMb25nZXJUaGFuU2l4dHlUaHJlZUNoYXJhY3RlcnM7CiAgICAgICAgICAgIHR5cGUgaW5zdGFuY2UtaWRlbnRpZmllcjsKICAgICAgIH0KICAgIH0KCiAgICBvci10ZWl2LXlleHQ6YmlEaXJlY3Rpb25hbFRvcG9sb2d5UmVsYXRpb25zaGlwIEVOVElUWVRZUEVBX0lOU1RBTExFRF9BVF9FTlRJVFlUWVBFQVdJVEhFTlRJVFlUWVBFTkFNRUxFTkdUSExPTkdFUlRIQU5TSVhUWVRIUkVFQ0hBUkFDVEVSUyB7IC8vIDAuLm4gdG8gMC4ubQoKICAgICAgICB1c2VzIG9yLXRlaXYtdHlwZXM6VG9wX0dycF9UeXBlOwogICAgICAgIGtleSBpZDsKCiAgICAgICAgbGVhZi1saXN0IGluc3RhbGxlZC1hdC1lbnRpdHlUeXBlQVdpdGhFbnRpdHlUeXBlTmFtZUxlbmd0aExvbmdlclRoYW5TaXh0eVRocmVlQ2hhcmFjdGVycyB7CiAgICAgICAgICAgIG9yLXRlaXYteWV4dDphU2lkZSBFbnRpdHlUeXBlQTsKICAgICAgICAgICAgdHlwZSBpbnN0YW5jZS1pZGVudGlmaWVyOwogICAgICAgfQoKICAgICAgICBsZWFmLWxpc3QgaW5zdGFsbGVkLWVudGl0eVR5cGVBIHsKICAgICAgICAgICAgb3ItdGVpdi15ZXh0OmJTaWRlIEVudGl0eVR5cGVBV2l0aEVudGl0eVR5cGVOYW1lTGVuZ3RoTG9uZ2VyVGhhblNpeHR5VGhyZWVDaGFyYWN0ZXJzOwogICAgICAgICAgICB0eXBlIGluc3RhbmNlLWlkZW50aWZpZXI7CiAgICAgICB9CiAgICB9CgogICAgb3ItdGVpdi15ZXh0OmJpRGlyZWN0aW9uYWxUb3BvbG9neVJlbGF0aW9uc2hpcCBFTlRJVFlUWVBFQVdJVEhFTlRJVFlUWVBFTkFNRUxFTkdUSExPTkdFUlRIQU5TSVhUWVRIUkVFQ0hBUkFDVEVSU19VU0VTX0VOVElUWVRZUEVBV0lUSEVOVElUWVRZUEVOQU1FTEVOR1RITE9OR0VSVEhBTlNJWFRZVEhSRUVDSEFSQUNURVJTIHsgLy8gMC4uMSB0byAwLi4xCgogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpUb3BfR3JwX1R5cGU7CiAgICAgICAga2V5IGlkOwoKICAgICAgICBsZWFmIHVzZWQtZW50aXR5VHlwZUFXaXRoRW50aXR5VHlwZU5hbWVMZW5ndGhMb25nZXJUaGFuU2l4dHlUaHJlZUNoYXJhY3RlcnMgewogICAgICAgICAgICBvci10ZWl2LXlleHQ6YVNpZGUgRW50aXR5VHlwZUFXaXRoRW50aXR5VHlwZU5hbWVMZW5ndGhMb25nZXJUaGFuU2l4dHlUaHJlZUNoYXJhY3RlcnM7CiAgICAgICAgICAgIHR5cGUgaW5zdGFuY2UtaWRlbnRpZmllcjsKICAgICAgIH0KCiAgICAgICAgbGVhZiB1c2VkLWJ5LWVudGl0eVR5cGVBV2l0aEVudGl0eVR5cGVOYW1lTGVuZ3RoTG9uZ2VyVGhhblNpeHR5VGhyZWVDaGFyYWN0ZXJzIHsKICAgICAgICAgICAgb3ItdGVpdi15ZXh0OmJTaWRlIEVudGl0eVR5cGVBV2l0aEVudGl0eVR5cGVOYW1lTGVuZ3RoTG9uZ2VyVGhhblNpeHR5VGhyZWVDaGFyYWN0ZXJzOwogICAgICAgICAgICB0eXBlIGluc3RhbmNlLWlkZW50aWZpZXI7CiAgICAgICB9CiAgICB9Cn0=
 \.
 
-COPY ties_model.entity_info("name", "moduleReferenceName") FROM stdin;
-GNBDUFunction	o-ran-smo-teiv-ran
-ENodeBFunction	o-ran-smo-teiv-ran
-AntennaCapability	o-ran-smo-teiv-ran
-LTESectorCarrier	o-ran-smo-teiv-ran
-NRSectorCarrier	o-ran-smo-teiv-ran
-AntennaModule	o-ran-smo-teiv-equipment
+COPY ties_model.entity_info("storedAt", "name", "moduleReferenceName") FROM stdin;
+o-ran-smo-teiv-equipment_AntennaModule	AntennaModule	o-ran-smo-teiv-equipment
+o-ran-smo-teiv-ran_AntennaCapability	AntennaCapability	o-ran-smo-teiv-ran
+o-ran-smo-teiv-ran_ENodeBFunction	ENodeBFunction	o-ran-smo-teiv-ran
+o-ran-smo-teiv-ran_GNBDUFunction	GNBDUFunction	o-ran-smo-teiv-ran
+o-ran-smo-teiv-ran_LTESectorCarrier	LTESectorCarrier	o-ran-smo-teiv-ran
+test-built-in-module_EntityTypeA	EntityTypeA	test-built-in-module
+test-built-in-module_EntityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters	EntityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters	test-built-in-module
 \.
 
-COPY ties_model.relationship_info("name", "aSideAssociationName", "aSideMOType", "aSideMinCardinality", "aSideMaxCardinality", "bSideAssociationName", "bSideMOType", "bSideMinCardinality", "bSideMaxCardinality", "associationKind", "relationshipDataLocation", "connectSameEntity", "moduleReferenceName") FROM stdin;
-LTESECTORCARRIER_USES_ANTENNACAPABILITY	used-antennaCapability	LTESectorCarrier	0	1	used-by-lteSectorCarrier	AntennaCapability	0	1	BI_DIRECTIONAL	A_SIDE	false	o-ran-smo-teiv-ran
-ENODEBFUNCTION_PROVIDES_LTESECTORCARRIER	provided-lteSectorCarrier	ENodeBFunction	1	1	provided-by-enodebFunction	LTESectorCarrier	0	9223372036854775807	BI_DIRECTIONAL	B_SIDE	false	o-ran-smo-teiv-ran
-NRSECTORCARRIER_USES_ANTENNACAPABILITY	used-antennaCapability	NRSectorCarrier	0	9223372036854775807	used-by-nrSectorCarrier	AntennaCapability	0	1	BI_DIRECTIONAL	A_SIDE	false	o-ran-smo-teiv-ran
-ANTENNACAPABILITY_USES_ANTENNACAPABILITY	used-antennaCapability	AntennaCapability	0	1	used-by-antennaCapability	AntennaCapability	0	1	BI_DIRECTIONAL	RELATION	true	o-ran-smo-teiv-ran
-ANTENNACAPABILITY_PROVIDES_ANTENNACAPABILITY	provided-antennaCapability	AntennaCapability	0	9223372036854775807	provided-by-antennaCapability	AntennaCapability	0	1	BI_DIRECTIONAL	RELATION	true	o-ran-smo-teiv-ran
-ANTENNACAPABILITY_SERVES_ANTENNACAPABILITY	serviced-antennaCapability	AntennaCapability	0	1	serviced-by-antennaCapability	AntennaCapability	0	9223372036854775807	BI_DIRECTIONAL	RELATION	true	o-ran-smo-teiv-ran
-ANTENNACAPABILITY_REALISED_BY_ANTENNACAPABILITY	realised-by-antennaCapability	AntennaCapability	0	9223372036854775807	realised-antennaCapability	AntennaCapability	0	9223372036854775807	BI_DIRECTIONAL	RELATION	true	o-ran-smo-teiv-ran
-ANTENNAMODULE_SERVES_ANTENNACAPABILITY	serviced-antennaCapability	AntennaModule	0	9223372036854775807	serving-antennaModule	AntennaCapability	0	9223372036854775807	BI_DIRECTIONAL	RELATION	false	o-ran-smo-teiv-rel-equipment-ran
-ANTENNAMODULE_USES_ANTENNAMODULE	used-by-antennaModule	AntennaModule	0	9223372036854775807	used-antennaModule	AntennaModule	0	9223372036854775807	BI_DIRECTIONAL	RELATION	true	o-ran-smo-teiv-equipment
+COPY ties_model.relationship_info("name", "aSideAssociationName", "aSideMOType", "aSideModule", "aSideMinCardinality", "aSideMaxCardinality", "bSideAssociationName", "bSideMOType", "bSideModule", "bSideMinCardinality", "bSideMaxCardinality", "associationKind", "connectSameEntity", "relationshipDataLocation", "storedAt", "moduleReferenceName") FROM stdin;
+ANTENNAMODULE_SERVES_ANTENNACAPABILITY	serviced-antennaCapability	AntennaModule	o-ran-smo-teiv-equipment	0	9223372036854775807	serving-antennaModule	AntennaCapability	o-ran-smo-teiv-ran	0	9223372036854775807	BI_DIRECTIONAL	false	RELATION	o-ran-smo-teiv-rel-equipment-ran_ANTENNAMODULE_SERVES_ANTENNACAPABILITY	o-ran-smo-teiv-rel-equipment-ran
+ENODEBFUNCTION_PROVIDES_LTESECTORCARRIER	provided-lteSectorCarrier	ENodeBFunction	o-ran-smo-teiv-ran	1	1	provided-by-enodebFunction	LTESectorCarrier	o-ran-smo-teiv-ran	0	9223372036854775807	BI_DIRECTIONAL	false	B_SIDE	o-ran-smo-teiv-ran_LTESectorCarrier	o-ran-smo-teiv-ran
+ENTITYTYPEAWITHENTITYTYPENAMELENGTHLONGERTHANSIXTYTHREECHARACTERS_USES_ENTITYTYPEAWITHENTITYTYPENAMELENGTHLONGERTHANSIXTYTHREECHARACTERS	used-entityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters	EntityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters	test-built-in-module	0	1	used-by-entityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters	EntityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters	test-built-in-module	0	1	BI_DIRECTIONAL	true	RELATION	test-built-in-module_ENTITYTYPEAWITHENTITYTYPENAMELENGTHLONGERTHANSIXTYTHREECHARACTERS_USES_ENTITYTYPEAWITHENTITYTYPENAMELENGTHLONGERTHANSIXTYTHREECHARACTERS	test-built-in-module
+ENTITYTYPEA_GROUPS_ENTITYTYPEAWITHENTITYTYPENAMELENGTHLONGERTHANSIXTYTHREECHARACTERS	grouped-entityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters	EntityTypeA	test-built-in-module	0	9223372036854775807	grouped-by-entityTypeA	EntityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters	test-built-in-module	0	1	BI_DIRECTIONAL	false	A_SIDE	test-built-in-module_EntityTypeA	test-built-in-module
+ENTITYTYPEA_INSTALLED_AT_ENTITYTYPEAWITHENTITYTYPENAMELENGTHLONGERTHANSIXTYTHREECHARACTERS	installed-at-entityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters	EntityTypeA	test-built-in-module	0	9223372036854775807	installed-entityTypeA	EntityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters	test-built-in-module	0	9223372036854775807	BI_DIRECTIONAL	false	RELATION	test-built-in-module_ENTITYTYPEA_INSTALLED_AT_ENTITYTYPEAWITHENTITYTYPENAMELENGTHLONGERTHANSIXTYTHREECHARACTERS	test-built-in-module
+ENTITYTYPEA_PROVIDES_ENTITYTYPEAWITHENTITYTYPENAMELENGTHLONGERTHANSIXTYTHREECHARACTERS	provided-entityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters	EntityTypeA	test-built-in-module	0	1	provided-by-entityTypeA	EntityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters	test-built-in-module	0	9223372036854775807	BI_DIRECTIONAL	false	B_SIDE	test-built-in-module_EntityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters	test-built-in-module
+ENTITYTYPEA_USES_ENTITYTYPEAWITHENTITYTYPENAMELENGTHLONGERTHANSIXTYTHREECHARACTERS	used-entityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters	EntityTypeA	test-built-in-module	0	1	used-by-entityTypeA	EntityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters	test-built-in-module	0	1	BI_DIRECTIONAL	false	A_SIDE	test-built-in-module_EntityTypeA	test-built-in-module
+LTESECTORCARRIER_USES_ANTENNACAPABILITY	used-antennaCapability	LTESectorCarrier	o-ran-smo-teiv-ran	0	9223372036854775807	used-by-lteSectorCarrier	AntennaCapability	o-ran-smo-teiv-ran	0	1	BI_DIRECTIONAL	false	A_SIDE	o-ran-smo-teiv-ran_LTESectorCarrier	o-ran-smo-teiv-ran
 \.
 
 ;
diff --git a/pgsql-schema-generator/src/test/resources/expected-db-schema/result_02_init-oran-smo-teiv-consumer-data.sql b/pgsql-schema-generator/src/test/resources/expected-db-schema/result_02_init-oran-smo-teiv-consumer-data.sql
new file mode 100644
index 0000000..e393eb0
--- /dev/null
+++ b/pgsql-schema-generator/src/test/resources/expected-db-schema/result_02_init-oran-smo-teiv-consumer-data.sql
@@ -0,0 +1,53 @@
+--
+-- ============LICENSE_START=======================================================
+-- Copyright (C) 2024 Ericsson
+-- Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+-- ================================================================================
+-- Licensed under the Apache License, Version 2.0 (the "License");
+-- you may not use this file except in compliance with the License.
+-- You may obtain a copy of the License at
+--
+--       http://www.apache.org/licenses/LICENSE-2.0
+--
+-- Unless required by applicable law or agreed to in writing, software
+-- distributed under the License is distributed on an "AS IS" BASIS,
+-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+-- See the License for the specific language governing permissions and
+-- limitations under the License.
+--
+-- SPDX-License-Identifier: Apache-2.0
+-- ============LICENSE_END=========================================================
+--
+
+BEGIN;
+
+CREATE SCHEMA IF NOT EXISTS ties_consumer_data;
+ALTER SCHEMA ties_consumer_data OWNER TO :pguser;
+SET default_tablespace = '';
+SET default_table_access_method = heap;
+
+SET ROLE :'pguser';
+
+CREATE TABLE IF NOT EXISTS ties_consumer_data."module_reference" (
+    "name"            TEXT PRIMARY KEY,
+    "namespace"       TEXT,
+    "revision"        TEXT NOT NULL,
+    "content"         TEXT NOT NULL,
+    "ownerAppId"      VARCHAR(511) NOT NULL,
+    "status"          VARCHAR(127) NOT NULL
+);
+
+CREATE TABLE IF NOT EXISTS ties_consumer_data."decorators" (
+    "name"                TEXT PRIMARY KEY,
+    "dataType"            VARCHAR(511) NOT NULL,
+    "moduleReferenceName" TEXT NOT NULL,
+    FOREIGN KEY ("moduleReferenceName") REFERENCES ties_consumer_data."module_reference" ("name") ON DELETE CASCADE
+);
+
+CREATE TABLE IF NOT EXISTS ties_consumer_data."classifiers" (
+    "name"                TEXT PRIMARY KEY,
+    "moduleReferenceName" TEXT NOT NULL,
+    FOREIGN KEY ("moduleReferenceName") REFERENCES ties_consumer_data."module_reference" ("name") ON DELETE CASCADE
+);
+
+COMMIT;
diff --git a/pgsql-schema-generator/src/test/resources/generate-defaults/o-ran-smo-teiv-common-yang-extensions.yang b/pgsql-schema-generator/src/test/resources/generate-defaults/o-ran-smo-teiv-common-yang-extensions.yang
index a8f4dc8..fba4d6e 100644
--- a/pgsql-schema-generator/src/test/resources/generate-defaults/o-ran-smo-teiv-common-yang-extensions.yang
+++ b/pgsql-schema-generator/src/test/resources/generate-defaults/o-ran-smo-teiv-common-yang-extensions.yang
@@ -14,7 +14,7 @@
     This model contains extensions to the YANG language that topology and
     inventory models will use to define and annotate types and relationships.";
 
-    revision "2024-05-14" {
+    revision "2024-05-24" {
         description "Initial revision.";
         or-teiv-yext:label 0.3.0;
     }
@@ -23,30 +23,31 @@
         description
             "Defines a bi-directional relationship in the topology.
 
-            A bi-directional-association (BDA) is a relationship comprising of an
-            A-side and a B-side. The A-side is considered the originating side of
-            the relationship; the B-side is considered the terminating side of the
-            relationship. The order of A-side and B-side is of importance and MUST
-            NOT be changed once defined.
+            A bi-directional-association (BDA) is a relationship comprising of
+            an A-side and a B-side. The A-side is considered the originating
+            side of the relationship; the B-side is considered the terminating
+            side of the relationship. The order of A-side and B-side is of
+            importance and MUST NOT be changed once defined.
 
-            Both A-side and B-side are defined on a type, and are given a role. A
-            type may have multiple originating and/or terminating sides of a
+            Both A-side and B-side are defined on a type, and are given a role.
+            A type may have multiple originating and/or terminating sides of a
             relationship, all distinguished by role name.
 
             The statement MUST only be a substatement of the 'module' statement.
-            Multiple 'bi-directional-topology-relationship' statements are allowed
-            per parent statement.
+            Multiple 'bi-directional-topology-relationship' statements are
+            allowed per parent statement.
 
-            Substatements to the 'bi-directional-topology-relationship' define the
-            A-side and the B-side, respectively, and optionally properties of the
-            relationship. Data nodes of types 'leaf' and 'leaf-list' are used for
-            this purpose. One of the data nodes MUST be annotated with the 'a-side'
-            extension; another data node MUST be annotated with the 'b-side'
-            extension. Other data nodes define properties of the relationship.
+            Substatements to the 'bi-directional-topology-relationship' define
+            the A-side and the B-side, respectively, and optionally properties
+            of the relationship. Data nodes of types 'leaf' and 'leaf-list' are
+            used for this purpose. One of the data nodes MUST be annotated with
+            the 'a-side' extension; another data node MUST be annotated with the
+            'b-side' extension. Other data nodes define properties of the
+            relationship.
 
-            The argument is the name of the relationship. The relationship name is
-            scoped to the namespace of the declaring module and MUST be unique
-            within the scope.";
+            The argument is the name of the relationship. The relationship name
+            is scoped to the namespace of the declaring module and MUST be
+            unique within the scope.";
 
         argument relationshipName;
     }
@@ -63,19 +64,21 @@
             'instance-identifier'. Constraints MAY be used as part of the parent
             'leaf' or 'leaf-list' to enforce cardinality.
 
-            The identifier of the parent 'leaf' or 'leaf-list' is used as name of
-            the role of the A-side of the relationship. The name of the role is
-            scoped to the type on which the A-side is defined and MUST be unique
-            within the scope.
+            The identifier of the parent 'leaf' or 'leaf-list' is used as name
+            of the role of the A-side of the relationship. The name of the role
+            is scoped to the type on which the A-side is defined and MUST be
+            unique within the scope.
 
-            While the parent 'leaf' or 'leaf-list' does not result in a property of
-            the relationship, it is RECOMMENDED to avoid using the name of an
+            While the parent 'leaf' or 'leaf-list' does not result in a property
+            of the relationship, it is RECOMMENDED to avoid using the name of an
             existing type property as role name to avoid potential ambiguities
-            between properties of a type, and roles of a relationship on the type.
+            between properties of a type, and roles of a relationship on the
+            type.
 
-            The argument is the name of the type on which the A-side resides. If the
-            type is declared in another module, the type must be prefixed, and a
-            corresponding 'import' statement be used to declare the prefix.";
+            The argument is the name of the type on which the A-side resides.
+            If the type is declared in another module, the type must be
+            prefixed, and a corresponding 'import' statement be used to declare
+            the prefix.";
 
         argument aSideType;
     }
@@ -92,19 +95,21 @@
             'instance-identifier'. Constraints MAY be used as part of the parent
             'leaf' or 'leaf-list' to enforce cardinality.
 
-            The identifier of the parent 'leaf' or 'leaf-list' is used as name of
-            the role of the B-side of the relationship. The name of the role is
-            scoped to the type on which the B-side is defined and MUST be unique
-            within the scope.
+            The identifier of the parent 'leaf' or 'leaf-list' is used as name
+            of the role of the B-side of the relationship. The name of the role
+            is scoped to the type on which the B-side is defined and MUST be
+            unique within the scope.
 
-            While the parent 'leaf' or 'leaf-list' does not result in a property of
-            the relationship, it is RECOMMENDED to avoid using the name of an
+            While the parent 'leaf' or 'leaf-list' does not result in a property
+            of the relationship, it is RECOMMENDED to avoid using the name of an
             existing type property as role name to avoid potential ambiguities
-            between properties of a type, and roles of a relationship on the type.
+            between properties of a type, and roles of a relationship on the
+            type.
 
-            The argument is the name of the type on which the B-side resides. If the
-            type is declared in another module, the type must be prefixed, and a
-            corresponding 'import' statement be used to declare the prefix.";
+            The argument is the name of the type on which the B-side resides.
+            If the type is declared in another module, the type must be
+            prefixed, and a corresponding 'import' statement be used to declare
+            the prefix.";
 
         argument bSideType;
     }
@@ -116,14 +121,18 @@
 
     extension label {
         description
-            "The label can be used to give modules and submodules a semantic version, in addition to their revision.
+            "The label can be used to give modules and submodules a semantic
+            version, in addition to their revision.
 
-            The format of the label is ‘x.y.z’ – expressed as pattern, it is [0-9]+\\.[0-9]+\\.[0-9]+
+            The format of the label is ‘x.y.z’ – expressed as pattern, it is
+            [0-9]+\\.[0-9]+\\.[0-9]+
 
-            The statement MUST only be a substatement of the revision statement.  Zero or one revision label statements
-            per parent statement are allowed.
+            The statement MUST only be a substatement of the revision statement.
+            Zero or one revision label statements per parent statement are
+            allowed.
 
-            Revision labels MUST be unique amongst all revisions of a module or submodule.";
+            Revision labels MUST be unique amongst all revisions of a module or
+            submodule.";
 
         argument semversion;
     }
diff --git a/pgsql-schema-generator/src/test/resources/generate-defaults/o-ran-smo-teiv-common-yang-types.yang b/pgsql-schema-generator/src/test/resources/generate-defaults/o-ran-smo-teiv-common-yang-types.yang
index 72c2820..4585747 100644
--- a/pgsql-schema-generator/src/test/resources/generate-defaults/o-ran-smo-teiv-common-yang-types.yang
+++ b/pgsql-schema-generator/src/test/resources/generate-defaults/o-ran-smo-teiv-common-yang-types.yang
@@ -1,5 +1,4 @@
 module o-ran-smo-teiv-common-yang-types {
-
     yang-version 1.1;
     namespace "urn:o-ran:smo-teiv-common-yang-types";
     prefix or-teiv-types;
@@ -8,73 +7,88 @@
 
     import _3gpp-common-yang-types { prefix types3gpp; }
 
-  organization "ORAN";
-  contact "The Authors";
+    organization "ORAN";
+    contact "The Authors";
     description
     "Topology and Inventory common types model.
 
-  Copyright (C) 2024 Ericsson
-  Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+    Copyright (C) 2024 Ericsson
+    Modifications Copyright (C) 2024 OpenInfra Foundation Europe
 
     This model contains re-usable data types that topology and inventory models
     will frequently use as part of types and relationships.";
 
-    revision "2024-05-14" {
+    revision "2024-05-24" {
         description "Initial revision.";
         or-teiv-yext:label 0.3.0;
     }
 
     grouping Top_Grp_Type {
-        description "Grouping containing the key attribute common to all types. All types
-                    MUST use this grouping.";
+        description "Grouping containing the key attribute common to all types.
+            All types MUST use this grouping.";
 
         leaf id {
             type string;
-            description "Unique identifier of topology entities. Represents the Entity Instance Identifier.";
+            description "Unique identifier of topology entities. Represents the
+                Entity Instance Identifier.";
         }
     }
 
     container decorators {
-        description "This container serves as extension point for applications wishing to define their own decorators.
-                    This is done via augmentations. They can only be defined in name value pair.
+        description
+            "This container serves as extension point for applications wishing
+            to define their own decorators. This is done via augmentations. They
+            can only be defined in name value pair.
 
-                    This is a consumer data and can be attached to Topology Entity or Topology Relation instance,
-                    outside of the declared Topology Entity or Topology Relationship's attributes. This cannot be
-                    instantiated, and it MUST NOT be augmented or deviated in any way, unless stated otherwise.";
+            This is a consumer data and can be attached to Topology Entity or
+            Topology Relation instance, outside of the declared Topology Entity
+            or Topology Relationship's attributes. This cannot be instantiated,
+            and it MUST NOT be augmented or deviated in any way, unless stated
+            otherwise.";
     }
 
     leaf-list classifiers {
-        description "Consumer defined tags to topology entities and relationships.
+        description
+            "Consumer defined tags to topology entities and relationships.
 
-                    This is a consumer data and can be attached to Topology Entity or Topology Relation instance,
-                    outside of the declared Topology Entity or Topology Relationship's attributes. This cannot be
-                    instantiated, and it MUST NOT be augmented or deviated in any way, unless stated otherwise.";
+            This is a consumer data and can be attached to Topology Entity or
+            Topology Relation instance, outside of the declared Topology Entity
+            or Topology Relationship's attributes. This cannot be instantiated,
+            and it MUST NOT be augmented or deviated in any way, unless stated
+            otherwise.";
 
         type identityref { base classifier; }
     }
 
     leaf-list sourceIds {
-        description "An ordered list of identities that represent the set of native source identifiers for participating
-                    entities.
+        description
+            "An ordered list of identities that represent the set of native
+            source identifiers for participating entities.
 
-                    This is a consumer data and can be attached to Topology Entity or Topology Relation instance,
-                    outside of the declared Topology Entity or Topology Relationship's attributes. This cannot be
-                    instantiated, and it MUST NOT be augmented or deviated in any way, unless stated otherwise.";
+            This is a consumer data and can be attached to Topology Entity or
+            Topology Relation instance, outside of the declared Topology Entity
+            or Topology Relationship's attributes. This cannot be instantiated,
+            and it MUST NOT be augmented or deviated in any way, unless stated
+            otherwise.";
 
         type string;
         ordered-by user;
     }
 
     container metadata {
-        description "This container serves as extension point to define metadata. They can only be defined in name value
-                    pair.
+        description
+            "This container serves as extension point to define metadata. They
+            can only be defined in name value pair.
 
-                    This is a consumer data and can be attached to Topology Entity or Topology Relation instance,
-                    outside of the declared Topology Entity or Topology Relationship's attributes. This cannot be
-                    instantiated, and it MUST NOT be augmented or deviated in any way, unless stated otherwise.";
+            This is a consumer data and can be attached to Topology Entity or
+            Topology Relation instance, outside of the declared Topology Entity
+            or Topology Relationship's attributes. This cannot be instantiated,
+            and it MUST NOT be augmented or deviated in any way, unless stated
+            otherwise.";
     }
 
     identity classifier{
-        description  "The classifier is used as a base to provide all classifiers with identity. ";
+        description "The classifier is used as a base to provide all classifiers
+            with identity. ";
     }
 }
\ No newline at end of file
diff --git a/pgsql-schema-generator/src/test/resources/generate-defaults/o-ran-smo-teiv-equipment.yang b/pgsql-schema-generator/src/test/resources/generate-defaults/o-ran-smo-teiv-equipment.yang
index 55e0071..d25ea98 100644
--- a/pgsql-schema-generator/src/test/resources/generate-defaults/o-ran-smo-teiv-equipment.yang
+++ b/pgsql-schema-generator/src/test/resources/generate-defaults/o-ran-smo-teiv-equipment.yang
@@ -15,17 +15,17 @@
     organization "ORAN";
     contact "The Authors";
     description
-    "RAN Equipment topology model.
+    "Equipment topology model.
 
     Copyright (C) 2024 Ericsson
     Modifications Copyright (C) 2024 OpenInfra Foundation Europe
 
-    This model contains the topology entities and relations in the
-    Equipment domain, which is modelled to understand the physical
-    location of equipment such as antennas associated with a cell/carrier
-    and their relevant properties e.g. tilt, max power etc.";
+    This model contains the topology entities and relations in the Equipment
+    domain, which is modelled to understand the physical location of equipment
+    such as antennas associated with a cell/carrier and their relevant
+    properties e.g. tilt, max power etc.";
 
-    revision "2024-05-14" {
+    revision "2024-05-24" {
         description "Initial revision.";
         or-teiv-yext:label 0.3.0;
     }
@@ -33,83 +33,64 @@
     or-teiv-yext:domain EQUIPMENT;
 
     list AntennaModule {
-        description "An Antenna Module represents the
-                    physical aspect of an antenna.";
+        description "An Antenna Module represents the physical aspect of an
+            antenna.";
 
         uses or-teiv-types:Top_Grp_Type;
         key id;
 
         container attributes {
             leaf antennaModelNumber {
-                description "Vendor-specific antenna model
-                            identifier. This attribute is part of
-                            AISG v3 ADB Standard and has
-                            no operational impact.";
+                description "Vendor-specific antenna model identifier. This
+                    attribute is part of AISG v3 ADB Standard and has no
+                    operational impact.";
                 type string;
             }
 
             leaf mechanicalAntennaBearing {
-                description "Antenna bearing on antenna subunit
-                            where antenna unit is installed.";
-                type uint32;
+                description "Antenna bearing on antenna subunit where antenna
+                    unit is installed.";
+                type int32;
             }
 
             leaf mechanicalAntennaTilt {
-                description "The fixed antenna tilt of the installation,
-                            defined as the inclination of the antenna
-                            element respect to the vertical plane.
-                            It is a signed value. Positive indicates
-                            downtilt, and negative indicates uptilt.";
-                type uint32;
+                description "The fixed antenna tilt of the installation, defined
+                    as the inclination of the antenna element respect to the
+                    vertical plane. It is a signed value. Positive indicates
+                    downtilt, and negative indicates uptilt.";
+                type int32;
             }
 
             leaf positionWithinSector {
-                description "Antenna unit position within sector.
-                            This attribute is part of AISG v3 ADB
-                            Standard and has no operational impact.";
+                description "Antenna unit position within sector. This attribute
+                    is part of AISG v3 ADB Standard and has no operational
+                    impact.";
                 type string;
             }
 
             leaf totalTilt {
-                description "Total antenna elevation including the
-                            installed tilt and the tilt applied by
-                            the Remote Electrical Tilt (RET).";
-                type uint32;
+                description "Total antenna elevation including the installed
+                    tilt and the tilt applied by the Remote Electrical
+                    Tilt (RET).";
+                type int32;
             }
 
             leaf electricalAntennaTilt {
                 description "Electrically-controlled tilt of main beam maximum
-                            with respect to direction orthogonal to antenna
-                            element axis (see 3GPP TS 25.466). Value is signed;
-                            tilt down is positive, tilt up is negative.";
-                type uint32;
+                    with respect to direction orthogonal to antenna element
+                    axis (see 3GPP TS 25.466). Value is signed; tilt down is
+                    positive, tilt up is negative.";
+                type int32;
             }
 
             leaf-list antennaBeamWidth {
-                description "The angular span of the main lobe of the antenna radiation
-                            pattern in the horizontal plane. Measured in degrees.";
+                description "The angular span of the main lobe of the antenna
+                    radiation pattern in the horizontal plane. Measured in
+                    degrees.";
                 type uint32;
             }
 
             uses geo:geo-location;
         }
     }
-
-    or-teiv-yext:biDirectionalTopologyRelationship ANTENNAMODULE_USES_ANTENNAMODULE { // Same entity (0..1 to 0..1)
-
-        uses or-teiv-types:Top_Grp_Type;
-        key id;
-
-        leaf-list used-by-antennaModule {
-            description "Antenna Module realised by Antenna Module.";
-            or-teiv-yext:aSide AntennaModule;
-            type instance-identifier;
-       }
-
-        leaf-list used-antennaModule {
-            description "Antenna Module realises Antenna Module.";
-            or-teiv-yext:bSide AntennaModule;
-            type instance-identifier;
-       }
-    }
 }
\ No newline at end of file
diff --git a/pgsql-schema-generator/src/test/resources/generate-defaults/o-ran-smo-teiv-ran.yang b/pgsql-schema-generator/src/test/resources/generate-defaults/o-ran-smo-teiv-ran.yang
index 00fee0e..474b2af 100644
--- a/pgsql-schema-generator/src/test/resources/generate-defaults/o-ran-smo-teiv-ran.yang
+++ b/pgsql-schema-generator/src/test/resources/generate-defaults/o-ran-smo-teiv-ran.yang
@@ -9,19 +9,24 @@
 
     import _3gpp-common-yang-types { prefix types3gpp; }
 
+    import ietf-geo-location {
+        prefix geo;
+        reference "RFC 9179: A YANG Grouping for Geographic Locations";
+    }
+
     organization "ORAN";
-    contact "ORAN first line support via email";
+    contact "The Authors";
     description
-    "RAN Logical topology model.
+    "RAN topology model.
 
     Copyright (C) 2024 Ericsson
     Modifications Copyright (C) 2024 OpenInfra Foundation Europe
 
-    This model contains the topology entities and relations in the
-    RAN domain, which represents the functional capability
-    of the deployed RAN that are relevant to rApps use cases.";
+    This model contains the topology entities and relations in the RAN domain,
+    which represents the functional capability of the deployed RAN that are
+    relevant to rApps use cases.";
 
-    revision "2024-05-14" {
+    revision "2024-05-24" {
         description "Initial revision.";
         or-teiv-yext:label 0.3.0;
     }
@@ -31,24 +36,21 @@
     list GNBDUFunction {
         description "gNodeB Distributed Unit (gNB-DU).
 
-                    A gNB may consist of a gNB-Centralized Unit
-                    (gNB-CU) and a gNB-DU. The CU processes non-real
-                    time protocols and services, and the DU processes
-                    PHY level protocol and real time services. The
-                    gNB-CU and the gNB-DU units are connected via
-                    F1 logical interface.
+            A gNB may consist of a gNB-Centralized Unit (gNB-CU) and a gNB-DU.
+            The CU processes non-real time protocols and services, and the DU
+            processes PHY level protocol and real time services. The gNB-CU and
+            the gNB-DU units are connected via F1 logical interface.
 
-                    The following is true for a gNB-DU:
-                    Is connected to the gNB-CU-CP through the F1-C
-                    interface.Is connected to the gNB-CU-UP through
-                    the F1-U interface. One gNB-DU is connected to only
-                    one gNB-CU-CP. One gNB-DU can be connected to
-                    multiple gNB-CU-UPs under the control of the same
-                    gNB-CU-CP.
-                    Note: A gNB may consist of a gNB-CU-CP, multiple
-                    gNB-CU-UPs and multiple gNB-DUs. gNB-DU is a concrete
-                    class that extends the NG-RAN node object. In Topology, you
-                    can create, read, update, and delete the gNB-DU object.";
+            The following is true for a gNB-DU:
+            Is connected to the gNB-CU-CP through the F1-C interface. Is
+            connected to the gNB-CU-UP through the F1-U interface. One gNB-DU is
+            connected to only one gNB-CU-CP. One gNB-DU can be connected to
+            multiple gNB-CU-UPs under the control of the same gNB-CU-CP.
+
+            Note: A gNB may consist of a gNB-CU-CP, multiple gNB-CU-UPs and
+            multiple gNB-DUs. gNB-DU is a concrete class that extends the NG-RAN
+            node object. In Topology, you can create, read, update, and delete
+            the gNB-DU object.";
 
         uses or-teiv-types:Top_Grp_Type;
         key id;
@@ -61,73 +63,69 @@
 
             leaf gNBDUId {
                 description "Unique identifier for the DU within a gNodeB";
-                type uint32;
+                type int64;
             }
 
             leaf gNBId {
                 description "Identity of gNodeB within a PLMN";
-                type uint32;
+                type int64;
             }
 
             leaf gNBIdLength {
                 description "Length of gNBId bit string representation";
-                type uint32;
+                type int32;
             }
         }
     }
 
     list ENodeBFunction {
-        description "An Evolved Node B (eNodeB) is the only mandatory
-                    node in the radio access network (RAN) of Long-Term
-                    Evolution (LTE). The eNodeB is a complex base
-                    station that handles radio communications
-                    in the cell and carries out radio resource
-                    management and handover decisions. Unlike 2/3G
-                    wireless RAN, there is no centralized radio network
-                    controller in LTE. It is the hardware that is connected
-                    to the mobile phone network that communicates
-                    directly with mobile handsets (User Equipment), like a base
-                    transceiver station (BTS) in GSM networks. This simplifies
-                    the architecture and allows lower response times.";
+        description "An Evolved Node B (eNodeB) is the only mandatory node in
+            the radio access network (RAN) of Long-Term Evolution (LTE). The
+            eNodeB is a complex base station that handles radio communications
+            in the cell and carries out radio resource management and handover
+            decisions. Unlike 2/3G wireless RAN, there is no centralized radio
+            network controller in LTE. It is the hardware that is connected to
+            the mobile phone network that communicates directly with mobile
+            handsets (User Equipment), like a base transceiver station (BTS) in
+            GSM networks. This simplifies the architecture and allows lower
+            response times.";
 
         uses or-teiv-types:Top_Grp_Type;
         key id;
 
         container attributes {
             leaf eNBId {
-                description "The ENodeB ID that forms part of
-                            the Cell Global Identity, and is
-                            also used to identify the node over
-                            the S1 interface";
-                type uint32;
+                description "The ENodeB ID that forms part of the Cell Global
+                    Identity, and is also used to identify the node over the S1
+                    interface";
+                type int32;
                 default 11;
             }
 
             container eNodeBPlmnId {
-                description "The ENodeB Public Land Mobile Network
-                            (PLMN) ID that forms part of the ENodeB
-                            Global ID used to identify the node over
-                            the S1 interface. Note: The value (MCC=001, MNC=01)
-                            indicates that the PLMN is not initiated.
-                            The value can not be used as a valid PLMN Identity.";
+                description "The ENodeB Public Land Mobile Network (PLMN) ID
+                    that forms part of the ENodeB Global ID used to identify the
+                    node over the S1 interface. Note: The value
+                    (MCC=001, MNC=01) indicates that the PLMN is not initiated.
+                    The value can not be used as a valid PLMN Identity.";
 
                 leaf mcc {
-                    description "The MCC part of a PLMN identity
-                                used in the radio network.";
+                    description "The MCC part of a PLMN identity used in the
+                        radio network.";
                     type int32 {
                         range 0..999;
                     }
                 }
                 leaf mnc {
-                    description "The MNC part of a PLMN identity
-                                used in the radio network.";
+                    description "The MNC part of a PLMN identity used in the
+                        radio network.";
                     type int32 {
                         range 0..999;
                     }
                 }
                 leaf mncLength {
-                    description "The length of the MNC part of a
-                                PLMN identity used in the radio network.";
+                    description "The length of the MNC part of a PLMN identity
+                        used in the radio network.";
                     type int32 {
                         range 2..3;
                     }
@@ -136,45 +134,14 @@
         }
     }
 
-    list AntennaCapability {
-        description "This MO serves as a mapping between the cell
-                    and the RBS equipment used to provide coverage
-                    in a certain geographical area. The MO also
-                    controls the maximum output power of the sector.";
-
-        uses or-teiv-types:Top_Grp_Type;
-        key id;
-
-        container attributes {
-            leaf-list eUtranFqBands {
-                description "List of LTE frequency bands
-                            that associated hardware supports";
-                type string;
-            }
-
-            leaf-list geranFqBands {
-                description "List of GERAN frequency bands
-                            that associated hardware supports";
-                type string;
-            }
-
-            leaf-list nRFqBands {
-                description "List of NR frequency bands
-                            associated hardware supports";
-                type string;
-            }
-        }
-    }
-
     list LTESectorCarrier {
-        description "The LTE Sector Carrier object provides the
-                    attributes for defining the logical characteristics
-                    of a carrier (cell) in a sector. A sector is a coverage
-                    area associated with a base station having
-                    its own antennas, radio ports, and control channels.
-                    The concept of sectors was developed to improve co-channel
-                    interference in cellular systems, and most wireless systems
-                    use three sector cells.";
+        description "The LTE Sector Carrier object provides the attributes for
+            defining the logical characteristics of a carrier (cell) in a
+            sector. A sector is a coverage area associated with a base station
+            having its own antennas, radio ports, and control channels. The
+            concept of sectors was developed to improve co-channel interference
+            in cellular systems, and most wireless systems use three sector
+            cells.";
 
         uses or-teiv-types:Top_Grp_Type;
         key id;
@@ -182,7 +149,7 @@
         container attributes {
             leaf sectorCarrierType {
                 description "Indicates whether or not the sector carrier
-                            modelled by MO SectorCarrier is a digital sector.";
+                    modelled by MO SectorCarrier is a digital sector.";
                 type enumeration {
                     enum normal_sector {
                         value 0;
@@ -204,7 +171,7 @@
                         value 4;
                         description "Right digital sector for 3DS";
                     }
-                    enum middle_digital_sector {
+                    enum middle_digital_sector_3ds {
                         value 5;
                         description "Middle digital sector for 3DS";
                     }
@@ -213,65 +180,32 @@
         }
     }
 
-    list NRSectorCarrier {
-        description "The NR Sector Carrier object provides
-                    the attributes for defining the logical
-                    characteristics of a carrier (cell) in a
-                    sector. A sector is a coverage area associated
-                    with a base station having its own antennas,
-                    radio ports, and control channels. The concept
-                    of sectors was developed to improve co-channel
-                    interference in cellular systems, and most wireless
-                    systems use three sector cells.";
+    list AntennaCapability {
+        description "This MO serves as a mapping between the cell and the RBS
+            equipment used to provide coverage in a certain geographical area.
+            The MO also controls the maximum output power of the sector.";
 
         uses or-teiv-types:Top_Grp_Type;
         key id;
 
         container attributes {
-            leaf arfcnDL {
-                description "NR Absolute Radio Frequency Channel
-                            Number (NR-ARFCN) for downlink";
-                type uint32;
+            leaf-list eUtranFqBands {
+                description "List of LTE frequency bands that associated
+                    hardware supports";
+                type string;
             }
 
-            leaf arfcnUL {
-                description "NR Absolute Radio frequency Channel Number
-                            (NR-ARFCN) for uplink.";
-                type uint32;
+            leaf-list geranFqBands {
+                description "List of GERAN frequency bands that associated
+                    hardware supports";
+                type string;
             }
 
-            leaf frequencyDL {
-                description "RF Reference Frequency of downlink channel";
-                type uint32;
+            leaf-list nRFqBands {
+                description "List of NR frequency bands associated hardware
+                    supports";
+                type string;
             }
-
-            leaf frequencyUL {
-                description "RF Reference Frequency of uplink channel";
-                type uint32;
-            }
-
-            leaf bSChannelBwDL {
-                description "BS Channel bandwidth in MHz for downlink.";
-                type uint32;
-            }
-        }
-    }
-
-    or-teiv-yext:biDirectionalTopologyRelationship LTESECTORCARRIER_USES_ANTENNACAPABILITY { // 0..1 to 0..1
-
-        uses or-teiv-types:Top_Grp_Type;
-        key id;
-
-        leaf used-antennaCapability {
-            description "LTE Sector Carrier uses Antenna Capability.";
-            or-teiv-yext:aSide LTESectorCarrier;
-            type instance-identifier;
-        }
-
-        leaf used-by-lteSectorCarrier {
-            description "Antenna Cpability used by LTE Sector Carrier.";
-            or-teiv-yext:bSide AntennaCapability;
-            type instance-identifier;
         }
     }
 
@@ -294,93 +228,21 @@
         }
     }
 
-    or-teiv-yext:biDirectionalTopologyRelationship NRSECTORCARRIER_USES_ANTENNACAPABILITY { // 0..n to 0..1
+    or-teiv-yext:biDirectionalTopologyRelationship LTESECTORCARRIER_USES_ANTENNACAPABILITY { // 0..n to 0..1
 
         uses or-teiv-types:Top_Grp_Type;
         key id;
 
         leaf used-antennaCapability {
-            description "NR Sector Carrier uses Antenna Capability.";
-            or-teiv-yext:aSide NRSectorCarrier;
+            description "LTE Sector Carrier uses Antenna Capability.";
+            or-teiv-yext:aSide LTESectorCarrier;
             type instance-identifier;
         }
 
-        leaf-list used-by-nrSectorCarrier {
-            description "Antenna Capability used by NR Sector Carrier.";
+        leaf-list used-by-lteSectorCarrier {
+            description "Antenna Capability used by LTE Sector Carrier.";
             or-teiv-yext:bSide AntennaCapability;
             type instance-identifier;
         }
     }
-
-    or-teiv-yext:biDirectionalTopologyRelationship ANTENNACAPABILITY_USES_ANTENNACAPABILITY { // Same entity (0..1 to 0..1)
-
-        uses or-teiv-types:Top_Grp_Type;
-        key id;
-
-        leaf used-antennaCapability {
-            description "Antenna Capability realised by Antenna Capability.";
-            or-teiv-yext:aSide AntennaCapability;
-            type instance-identifier;
-        }
-
-        leaf used-by-antennaCapability {
-            description "Antenna Capability realises Antenna Capability.";
-            or-teiv-yext:bSide AntennaCapability;
-            type instance-identifier;
-        }
-    }
-
-    or-teiv-yext:biDirectionalTopologyRelationship ANTENNACAPABILITY_PROVIDES_ANTENNACAPABILITY { // Same entity (0..1 to 0..n)
-
-        uses or-teiv-types:Top_Grp_Type;
-        key id;
-
-        leaf provided-antennaCapability {
-            description "Antenna Capability realised by Antenna Capability.";
-            or-teiv-yext:aSide AntennaCapability;
-            type instance-identifier;
-        }
-
-        leaf-list provided-by-antennaCapability {
-            description "Antenna Capability realises Antenna Capability.";
-            or-teiv-yext:bSide AntennaCapability;
-            type instance-identifier;
-        }
-    }
-
-    or-teiv-yext:biDirectionalTopologyRelationship ANTENNACAPABILITY_SERVES_ANTENNACAPABILITY { // Same entity (0..n to 0..1)
-
-        uses or-teiv-types:Top_Grp_Type;
-        key id;
-
-        leaf-list serviced-antennaCapability {
-            description "Antenna Capability realised by Antenna Capability.";
-            or-teiv-yext:aSide AntennaCapability;
-            type instance-identifier;
-        }
-
-        leaf serviced-by-antennaCapability {
-            description "Antenna Capability realises Antenna Capability.";
-            or-teiv-yext:bSide AntennaCapability;
-            type instance-identifier;
-        }
-    }
-
-    or-teiv-yext:biDirectionalTopologyRelationship ANTENNACAPABILITY_REALISED_BY_ANTENNACAPABILITY { // Same entity (0..n to 0..m)
-
-        uses or-teiv-types:Top_Grp_Type;
-        key id;
-
-        leaf-list realised-by-antennaCapability {
-            description "Antenna Capability realised by Antenna Capability.";
-            or-teiv-yext:aSide AntennaCapability;
-            type instance-identifier;
-        }
-
-        leaf-list realised-antennaCapability {
-            description "Antenna Capability realises Antenna Capability.";
-            or-teiv-yext:bSide AntennaCapability;
-            type instance-identifier;
-       }
-    }
 }
\ No newline at end of file
diff --git a/pgsql-schema-generator/src/test/resources/generate-defaults/o-ran-smo-teiv-rel-equipment-ran.yang b/pgsql-schema-generator/src/test/resources/generate-defaults/o-ran-smo-teiv-rel-equipment-ran.yang
index 4d30b10..a860ef1 100644
--- a/pgsql-schema-generator/src/test/resources/generate-defaults/o-ran-smo-teiv-rel-equipment-ran.yang
+++ b/pgsql-schema-generator/src/test/resources/generate-defaults/o-ran-smo-teiv-rel-equipment-ran.yang
@@ -21,7 +21,7 @@
 
     This model contains the topology relations between Equipment and RAN.";
 
-    revision "2024-05-14" {
+    revision "2024-05-24" {
         description "Initial revision.";
         or-teiv-yext:label 0.3.0;
     }
@@ -45,4 +45,4 @@
             type instance-identifier;
         }
     }
-}
+}
\ No newline at end of file
diff --git a/pgsql-schema-generator/src/test/resources/generate-defaults/test-built-in-module.yang b/pgsql-schema-generator/src/test/resources/generate-defaults/test-built-in-module.yang
new file mode 100644
index 0000000..349135b
--- /dev/null
+++ b/pgsql-schema-generator/src/test/resources/generate-defaults/test-built-in-module.yang
@@ -0,0 +1,153 @@
+module test-built-in-module {
+    yang-version 1.1;
+    namespace "test-built-in-namespace";
+
+    import o-ran-smo-teiv-common-yang-types { prefix or-teiv-types; }
+
+    import o-ran-smo-teiv-common-yang-extensions { prefix or-teiv-yext; }
+
+    import _3gpp-common-yang-types { prefix types3gpp; }
+
+    import ietf-geo-location {
+        prefix geo;
+        reference "RFC 9179: A YANG Grouping for Geographic Locations";
+    }
+
+    organization "ORAN";
+    contact "The Authors";
+    description
+    "Test topology model.";
+
+    revision "2024-05-24" {
+        description "Initial revision.";
+        or-teiv-yext:label 0.3.0;
+    }
+
+    or-teiv-yext:domain TEST;
+
+    list EntityTypeA {
+
+        uses or-teiv-types:Top_Grp_Type;
+        key id;
+
+    }
+
+    list EntityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters {
+
+        uses or-teiv-types:Top_Grp_Type;
+        key id;
+
+        container attributes {
+            leaf attributeA1WithAttributeNameLengthLongerThanSixtyThreeCharacters {
+                type string;
+            }
+
+            leaf attributeA2WithAttributeNameLengthLongerThanSixtyThreeCharacters {
+                type uint32;
+            }
+
+            leaf attributeA3WithAttributeNameLengthLongerThanSixtyThreeCharacters {
+                type int32;
+            }
+
+            leaf attributeA4WithAttributeNameLengthLongerThanSixtyThreeCharacters {
+                type int64;
+            }
+
+            leaf attributeA5WithAttributeNameLengthLongerThanSixtyThreeCharacters {
+                type decimal64{
+                    fraction-digits 6;
+                }
+                units "degrees";
+            }
+
+            leaf-list attributeA6WithAttributeNameLengthLongerThanSixtyThreeCharacters {
+                type string;
+            }
+
+            container attributeA7WithAttributeNameLengthLongerThanSixtyThreeCharacters {
+                uses types3gpp:PLMNId;
+            }
+        }
+    }
+
+    or-teiv-yext:biDirectionalTopologyRelationship ENTITYTYPEA_USES_ENTITYTYPEAWITHENTITYTYPENAMELENGTHLONGERTHANSIXTYTHREECHARACTERS { // 0..1 to 0..1
+
+        uses or-teiv-types:Top_Grp_Type;
+        key id;
+
+        leaf used-entityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters {
+            or-teiv-yext:aSide EntityTypeA;
+            type instance-identifier;
+       }
+
+        leaf used-by-entityTypeA {
+            or-teiv-yext:bSide EntityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters;
+            type instance-identifier;
+       }
+    }
+
+    or-teiv-yext:biDirectionalTopologyRelationship ENTITYTYPEA_PROVIDES_ENTITYTYPEAWITHENTITYTYPENAMELENGTHLONGERTHANSIXTYTHREECHARACTERS { // 0..1 to 0..n
+
+        uses or-teiv-types:Top_Grp_Type;
+        key id;
+
+        leaf-list provided-entityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters {
+            or-teiv-yext:aSide EntityTypeA;
+            type instance-identifier;
+       }
+
+        leaf provided-by-entityTypeA {
+            or-teiv-yext:bSide EntityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters;
+            type instance-identifier;
+       }
+    }
+
+    or-teiv-yext:biDirectionalTopologyRelationship ENTITYTYPEA_GROUPS_ENTITYTYPEAWITHENTITYTYPENAMELENGTHLONGERTHANSIXTYTHREECHARACTERS { // 0..n to 0..1
+
+        uses or-teiv-types:Top_Grp_Type;
+        key id;
+
+        leaf grouped-entityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters {
+            or-teiv-yext:aSide EntityTypeA;
+            type instance-identifier;
+       }
+
+        leaf-list grouped-by-entityTypeA {
+            or-teiv-yext:bSide EntityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters;
+            type instance-identifier;
+       }
+    }
+
+    or-teiv-yext:biDirectionalTopologyRelationship ENTITYTYPEA_INSTALLED_AT_ENTITYTYPEAWITHENTITYTYPENAMELENGTHLONGERTHANSIXTYTHREECHARACTERS { // 0..n to 0..m
+
+        uses or-teiv-types:Top_Grp_Type;
+        key id;
+
+        leaf-list installed-at-entityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters {
+            or-teiv-yext:aSide EntityTypeA;
+            type instance-identifier;
+       }
+
+        leaf-list installed-entityTypeA {
+            or-teiv-yext:bSide EntityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters;
+            type instance-identifier;
+       }
+    }
+
+    or-teiv-yext:biDirectionalTopologyRelationship ENTITYTYPEAWITHENTITYTYPENAMELENGTHLONGERTHANSIXTYTHREECHARACTERS_USES_ENTITYTYPEAWITHENTITYTYPENAMELENGTHLONGERTHANSIXTYTHREECHARACTERS { // 0..1 to 0..1
+
+        uses or-teiv-types:Top_Grp_Type;
+        key id;
+
+        leaf used-entityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters {
+            or-teiv-yext:aSide EntityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters;
+            type instance-identifier;
+       }
+
+        leaf used-by-entityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters {
+            or-teiv-yext:bSide EntityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters;
+            type instance-identifier;
+       }
+    }
+}
\ No newline at end of file