diff --git a/RESTAPI/Functions/GENERATE_DBML_INLINE.sql b/RESTAPI/Functions/GENERATE_DBML_INLINE.sql
index f8ae945..10b6f37 100644
--- a/RESTAPI/Functions/GENERATE_DBML_INLINE.sql
+++ b/RESTAPI/Functions/GENERATE_DBML_INLINE.sql
@@ -1 +1,177 @@
-âÅã@×ÁãÈ@\ÓÉÂÓ@^@
%
%ÃÙÅÁãÅ@ÖÙ@ÙÅ×ÓÁÃÅ@ÆäÕÃãÉÖÕ@ÙÅâãÁ×ÉKÇÅÕÅÙÁãÅmÄÂÔÓmÉÕÓÉÕÅ@M@
%ÉÕÁ××åÅÙ@åÁÙÃÈÁÙMñð]@k@
%ÉÕÁ××ÕÁÔÅ@åÁÙÃÈÁÙMñòø]@]@
%ÙÅãäÙÕâ@ÃÓÖÂMòñô÷ôøóöô÷]@@@
%ÓÁÕÇäÁÇÅ@âØÓ@
%â×ÅÃÉÆÉÃ@ÙÅâãÁ×ÉKÇÅÕÅÙÁãÅmÄÂÔÓmÉÕÓÉÕÅ@
%ÕÖã@ÄÅãÅÙÔÉÕÉâãÉÃ@
%ÙÅÁÄâ@âØÓ@ÄÁãÁ@
%ÃÁÓÓÅÄ@ÖÕ@ÕäÓÓ@ÉÕ×äã@
%âÅã@Ö×ãÉÖÕ@@ÁÓæÂÓÒ@~@\ÁÓÓÙÅÁÄ@k@
%ÁÓæÃ×èÄãÁ@~@\Ö×ãÉÔÉéÅ@k@
%ÃÖÔÔÉã@~@\ÕÖÕÅ@k@
%ÄÂÇåÉÅæ@~@\âÖäÙÃÅ@k@
%ÄÅÃÙÅâäÓã@~@Móñk@óñk@ðð]@k@
%ÄèÕÄÆãÃÖÓ@~@\ÕÖ@k@
%ÄèÕäâÙ×ÙÆ@~@\ÖæÕÅÙ@k@
%âÙãâÅØ@~@\ÈÅç@@@
%ÂÅÇÉÕ@
%ÄÅÃÓÁÙÅ@åmÙÅâäÓã@ÃÓÖÂ@M@ò@Ç@]@^@
%æÉãÈ@
%``@ñ]@…•„—–‰•£¢@¨–¤@¦�•£@M–•…`£‰”…@”�‰•£…•�•ƒ…@ˆ…™…]@
%ÅÕÄ×ÖÉÕãâ@M@Á××åÅÙ@k@Á××ÕÁÔÅ@k@Á××ÆäÕÃ@k@×ÁãÈmãÅÔ×ÓÁãÅ@k@Èãã×mÔÅãÈÖÄ@k@
%ÃÖÕâäÔÅâ@k@×ÙÖÄäÃÅâ@k@âäÃÃÅââmÃÖÄÅ@]@Áâ@M@
%åÁÓäÅâ@M@ÉÕÁ××åÅÙ@k@ÉÕÁ××ÕÁÔÅ@k@}�¢¢‰‡•ä¢…™Ù–“…¢}@k@
%}a¢�‰“×–‰•£a¤¢…™¢a”�—‰ƒ¢aÀ…•¥É„ÐaÀ¤¢…™Õ�”…Ða™–“…¢a�¢¢‰‡•}@k@
%}×Öâã}@k@}\a\}@k@}�——“‰ƒ�£‰–•a‘¢–•}@k@}òðð}@]@k@M@ÉÕÁ××åÅÙ@k@
%ÉÕÁ××ÕÁÔÅ@k@}ƒˆ�•‡…É‚”Éä¢…™}@k@
%}a¢�‰“×–‰•£a¤¢…™¢a‰‚”‰aÀ�¤£ˆ–™‰©�£‰–•Õ�”…Ðaƒˆ�•‡…}@k@
%}×Öâã}@k@}\a\}@k@}�——“‰ƒ�£‰–•a‘¢–•}@k@}òðð}@]@k@M@ÉÕÁ××åÅÙ@k@
%ÉÕÁ××ÕÁÔÅ@k@}ƒ™…�£…É‚”Éä¢…™}@k@
%}a¢�‰“×–‰•£a¤¢…™¢a‰‚”‰aƒ™…�£…}@k@}×Öâã}@k@}\a\}@k@
%}�——“‰ƒ�£‰–•a‘¢–•}@k@}òðñ}@]@k@M@ÉÕÁ××åÅÙ@k@ÉÕÁ××ÕÁÔÅ@k@
%}ƒ™…�£…Ô�—‰ƒ¢ä¢…™}@k@
%}a¢�‰“×–‰•£a¤¢…™¢a”�—‰ƒ¢aÀ…•¥É„Ðaƒ™…�£…}@k@}×Öâã}@k@
%}\a\}@k@}�——“‰ƒ�£‰–•a‘¢–•}@k@}òðñ}@]@k@M@ÉÕÁ××åÅÙ@k@
%ÉÕÁ××ÕÁÔÅ@k@}„‰¢�‚“…É‚”Éä¢…™}@k@
%}a¢�‰“×–‰•£a¤¢…™¢a‰‚”‰aÀ�¤£ˆ–™‰©�£‰–•Õ�”…Ða„‰¢�‚“…}@k@
%}×Öâã}@k@}\a\}@k@}�——“‰ƒ�£‰–•a‘¢–•}@k@}òðð}@]@k@M@ÉÕÁ××åÅÙ@k@
%ÉÕÁ××ÕÁÔÅ@k@}…•�‚“…É‚”Éä¢…™}@k@
%}a¢�‰“×–‰•£a¤¢…™¢a‰‚”‰aÀ�¤£ˆ–™‰©�£‰–•Õ�”…Ða…•�‚“…}@k@
%}×Öâã}@k@}\a\}@k@}�——“‰ƒ�£‰–•a‘¢–•}@k@}òðð}@]@k@M@ÉÕÁ××åÅÙ@k@
%ÉÕÁ××ÕÁÔÅ@k@}‡…£Á““Á——ä¢…™¢}@k@
%}a¢�‰“×–‰•£a¤¢…™¢a”�—‰ƒ¢aÀ…•¥É„Ð}@k@}×Öâã}@k@}\a\}@k@
%}�——“‰ƒ�£‰–•a‘¢–•}@k@}òðð}@]@k@M@ÉÕÁ××åÅÙ@k@ÉÕÁ××ÕÁÔÅ@k@
%}‡…£Á““Ô�—‰ƒ¢Ù–“…¢}@k@
%}a¢�‰“×–‰•£a™–“…¢a”�—‰ƒ¢aÀ…•¥É„Ð}@k@}×Öâã}@k@}\a\}@k@
%}�——“‰ƒ�£‰–•a‘¢–•}@k@}òðð}@]@k@M@ÉÕÁ××åÅÙ@k@ÉÕÁ××ÕÁÔÅ@k@
%}‡…£Á““ä¢…™¢}@k@}a¢�‰“×–‰•£a¤¢…™¢a�““}@k@}×Öâã}@k@}\a\}@k@
%}�——“‰ƒ�£‰–•a‘¢–•}@k@}òðð}@]@k@M@ÉÕÁ××åÅÙ@k@ÉÕÁ××ÕÁÔÅ@k@
%}‡…£Á——ä¢…™É•†–}@k@
%}a¢�‰“×–‰•£a¤¢…™¢a”�—‰ƒ¢aÀ…•¥É„ÐaÀ¤¢…™Õ�”…Ð}@k@}×Öâã}@k@
%}\a\}@k@}�——“‰ƒ�£‰–•a‘¢–•}@k@}òðð}@]@k@M@ÉÕÁ××åÅÙ@k@
%ÉÕÁ××ÕÁÔÅ@k@}‡…£É‚”Éä¢…™É•†–}@k@
%}a¢�‰“×–‰•£a¤¢…™¢a‰‚”‰aÀ¤¢…™Õ�”…Ð}@k@}×Öâã}@k@}\a\}@k@
%}�——“‰ƒ�£‰–•a‘¢–•}@k@}òðð}@]@k@M@ÉÕÁ××åÅÙ@k@ÉÕÁ××ÕÁÔÅ@k@
%}™…”–¥…ä¢…™Ù–“…¢}@k@
%}a¢�‰“×–‰•£a¤¢…™¢a”�—‰ƒ¢aÀ…•¥É„ÐaÀ¤¢…™Õ�”…Ða™–“…¢a™…”–¥…}@k@
%}×Öâã}@k@}\a\}@k@}�——“‰ƒ�£‰–•a‘¢–•}@k@}òðð}@]@
%]@k@
%``@ò]@—“�ƒ…ˆ–“„…™¢@„‰¢ƒ–¥…™…„@‰•@¨–¤™@âØÓ@
%×ÁÙÁÔâ@Áâ@M@
%âÅÓÅÃã@×@K@Á××åÅÙ@k@×@K@Á××ÕÁÔÅ@k@×@K@Á××ÆäÕÃ@k@×@K@Á×××ÁÙÁÔ@k@×@K@×ÁÙÁÔ×Öâ@
%ÆÙÖÔ@ãÁÂÓÅ@M@
%ÙÅâãÁ×É@K@ÇÅãm×ÁÙÁÔm×ÓÁÃÅÈÖÓÄÅÙâ@M@
%ÉÕÁ××åÅÙ@k@ÉÕÁ××ÕÁÔÅ@k@ÕäÓÓ@]@
%]@Áâ@×@
%]@k@
%``@ó]@•‰ƒ…@—�£ˆ@“�‚…“@™…•�”…¢@M–—£‰–•�“k@–•…`£‰”…]@
%×ÁÙÁÔmÙÅÕÁ
\ No newline at end of file
+SET PATH *LIBL ; 
+
+CREATE OR REPLACE FUNCTION RESTAPI.GENERATE_DBML_INLINE ( 
+	INAPPVER VARCHAR(10) , 
+	INAPPNAME VARCHAR(128) ) 
+	RETURNS CLOB(2147483647)   
+	LANGUAGE SQL 
+	SPECIFIC RESTAPI.GENERATE_DBML_INLINE 
+	NOT DETERMINISTIC 
+	READS SQL DATA 
+	CALLED ON NULL INPUT 
+	SET OPTION  ALWBLK = *ALLREAD , 
+	ALWCPYDTA = *OPTIMIZE , 
+	COMMIT = *NONE , 
+	DBGVIEW = *SOURCE , 
+	DECRESULT = (31, 31, 00) , 
+	DYNDFTCOL = *NO , 
+	DYNUSRPRF = *OWNER , 
+	SRTSEQ = *HEX   
+	BEGIN 
+DECLARE V_RESULT CLOB ( 2 G ) ; 
+WITH 
+-- 1) endpoints you want (one-time maintenance here) 
+ENDPOINTS ( APPVER , APPNAME , APPFUNC , PATH_TEMPLATE , HTTP_METHOD , 
+CONSUMES , PRODUCES , SUCCESS_CODE ) AS ( 
+VALUES ( INAPPVER , INAPPNAME , 'assignUserRoles' , 
+'/sailPoint/users/mapics/{envId}/{userName}/roles/assign' , 
+'POST' , '*/*' , 'application/json' , '200' ) , ( INAPPVER , 
+INAPPNAME , 'changeIbmIUser' , 
+'/sailPoint/users/ibmi/{authorizationName}/change' , 
+'POST' , '*/*' , 'application/json' , '200' ) , ( INAPPVER , 
+INAPPNAME , 'createIbmIUser' , 
+'/sailPoint/users/ibmi/create' , 'POST' , '*/*' , 
+'application/json' , '201' ) , ( INAPPVER , INAPPNAME , 
+'createMapicsUser' , 
+'/sailPoint/users/mapics/{envId}/create' , 'POST' , 
+'*/*' , 'application/json' , '201' ) , ( INAPPVER , 
+INAPPNAME , 'disableIbmIUser' , 
+'/sailPoint/users/ibmi/{authorizationName}/disable' , 
+'POST' , '*/*' , 'application/json' , '200' ) , ( INAPPVER , 
+INAPPNAME , 'enableIbmIUser' , 
+'/sailPoint/users/ibmi/{authorizationName}/enable' , 
+'POST' , '*/*' , 'application/json' , '200' ) , ( INAPPVER , 
+INAPPNAME , 'getAllAppUsers' , 
+'/sailPoint/users/mapics/{envId}' , 'POST' , '*/*' , 
+'application/json' , '200' ) , ( INAPPVER , INAPPNAME , 
+'getAllMapicsRoles' , 
+'/sailPoint/roles/mapics/{envId}' , 'POST' , '*/*' , 
+'application/json' , '200' ) , ( INAPPVER , INAPPNAME , 
+'getAllUsers' , '/sailPoint/users/all' , 'POST' , '*/*' , 
+'application/json' , '200' ) , ( INAPPVER , INAPPNAME , 
+'getAppUserInfo' , 
+'/sailPoint/users/mapics/{envId}/{userName}' , 'POST' , 
+'*/*' , 'application/json' , '200' ) , ( INAPPVER , 
+INAPPNAME , 'getIbmIUserInfo' , 
+'/sailPoint/users/ibmi/{userName}' , 'POST' , '*/*' , 
+'application/json' , '200' ) , ( INAPPVER , INAPPNAME , 
+'removeUserRoles' , 
+'/sailPoint/users/mapics/{envId}/{userName}/roles/remove' , 
+'POST' , '*/*' , 'application/json' , '200' ) 
+) , 
+-- 2) placeholders discovered in your SQL 
+PARAMS AS ( 
+SELECT P . APPVER , P . APPNAME , P . APPFUNC , P . APPPARAM , P . PARAMPOS 
+FROM TABLE ( 
+RESTAPI . GET_PARAM_PLACEHOLDERS ( 
+INAPPVER , INAPPNAME , NULL ) 
+) AS P 
+) , 
+-- 3) nice path label renames (optional, one-time) 
+PARAM_RENAME ( APPFUNC , APPPARAM , RESTNAME ) AS ( 
+VALUES ( 'assignUserRoles' , 'envid' , 'envId' ) , 
+( 'assignUserRoles' , 'userName' , 'userName' ) , 
+( 'removeUserRoles' , 'envid' , 'envId' ) , 
+( 'removeUserRoles' , 'userName' , 'userName' ) , 
+( 'createMapicsUser' , 'envid' , 'envId' ) , 
+( 'getAllAppUsers' , 'environment' , 'envId' ) , 
+( 'getAllMapicsRoles' , 'envid' , 'envId' ) , 
+( 'getAppUserInfo' , 'environment' , 'envId' ) , 
+( 'getAppUserInfo' , 'nameOrId' , 'userName' ) , 
+( 'getIbmIUserInfo' , 'nameOrId' , 'userName' ) 
+) , 
+-- 4) param location + final REST name (no aggregates here) 
+PL AS ( 
+SELECT P . APPVER , P . APPNAME , P . APPFUNC , P . APPPARAM , P . PARAMPOS , 
+COALESCE ( R . RESTNAME , P . APPPARAM ) AS RESTNAME , 
+CASE 
+WHEN 
+LOCATE ( 
+'{' || UPPER ( COALESCE ( R . RESTNAME , P . APPPARAM ) ) 
+|| '}' , UPPER ( E . PATH_TEMPLATE ) ) > 0 
+THEN 'PATH' 
+WHEN UPPER ( P . APPPARAM ) = 'INENVLIST' THEN 'QUERY' 
+ELSE 'FORM' 
+END AS LOCATION 
+FROM PARAMS P 
+JOIN ENDPOINTS E 
+ON E . APPVER = P . APPVER 
+AND E . APPNAME = P . APPNAME 
+AND E . APPFUNC = P . APPFUNC 
+LEFT JOIN PARAM_RENAME R 
+ON R . APPFUNC = P . APPFUNC 
+AND UPPER ( R . APPPARAM ) = UPPER ( P . APPPARAM ) 
+) , 
+-- 5) pre-aggregate the Json_Object parameter list (avoids nested aggregates) 
+PARAM_STR AS ( 
+SELECT P . APPVER , P . APPNAME , P . APPFUNC , 
+LISTAGG ( 
+'''' || P . APPPARAM || ''':' || '?' , ', ' ) 
+WITHIN GROUP ( ORDER BY P . PARAMPOS ) AS PARAMS_TXT 
+FROM PARAMS P 
+GROUP BY P . APPVER , P . APPNAME , P . APPFUNC 
+) , 
+-- 6) pre-aggregate the <data .../> XML per program (avoids nested aggregates)
+DATA_XML AS ( 
+SELECT PL . APPVER , PL . APPNAME , PL . APPFUNC , 
+XMLAGG ( XMLELEMENT ( NAME "data" , 
+XMLATTRIBUTES ( '1208' AS "ccsid" , PL . APPPARAM AS "name" , 
+'true' AS "nullable" , '2147483647' AS "precision" , 
+CASE 
+WHEN PL . LOCATION = 'PATH' THEN PL . RESTNAME 
+END AS "restInPathParam" , 
+CASE 
+WHEN PL . LOCATION = 'QUERY' THEN PL . RESTNAME 
+END AS "restInQueryParam" , 
+CASE 
+WHEN PL . LOCATION = 'FORM' THEN PL . RESTNAME 
+END AS "restInFormParam" , 'CLOB' AS "type" , 
+'input' AS "usage" ) ) ORDER BY PL . PARAMPOS ) 
+AS DATA_FRAGMENT 
+FROM PL PL 
+GROUP BY PL . APPVER , PL . APPNAME , PL . APPFUNC 
+) 
+SELECT XMLSERIALIZE ( CONTENT XMLELEMENT ( NAME "dbml" , XMLATTRIBUTES ( 
+'/v1' AS "restUriPathTemplate" , '1.0' AS "version" ) , XMLAGG ( 
+XMLELEMENT ( NAME "program" , XMLATTRIBUTES ( '' AS "errormessage" , 
+'*NONE' AS "httpheaders" , '500' AS "httpstatusonfailure" , 
+E . SUCCESS_CODE AS "httpstatusonsuccess" , 'get' || 
+UPPER ( SUBSTR ( E . APPFUNC , 1 , 1 ) ) || SUBSTR ( E . APPFUNC , 2 ) || 
+'Input' AS "inputWrapperIdentifier" , 'get' || 
+UPPER ( SUBSTR ( E . APPFUNC , 1 , 1 ) ) || SUBSTR ( E . APPFUNC , 2 ) AS 
+"name" , 'get' || UPPER ( SUBSTR ( E . APPFUNC , 1 , 1 ) ) || 
+SUBSTR ( E . APPFUNC , 2 ) || 'Result' AS 
+"outputWrapperIdentifier" , 'media-resource' AS "querytype" , 
+E . CONSUMES AS "restConsumes" , E . HTTP_METHOD AS 
+"restHttpRequestMethod" , E . PRODUCES AS "restProduces" , 
+E . PATH_TEMPLATE AS "restUriPathTemplate" , '*ERRORS' AS 
+"returnsqlstate" , 'true' AS "treatwarningaserror" , '*TRAILING' 
+AS "trimmode" , 'false' AS "wrapInputParams" , 'true' AS 
+"wrapOutputParam" ) 
+, XMLELEMENT ( NAME "sql" , XMLATTRIBUTES ( 
+'Values Restapi.Execute_Sql(''' || E . APPVER || ''',''' || 
+E . APPNAME || ''',''' || E . APPFUNC || 
+''', Cast(Json_Object(' || COALESCE ( PS . PARAMS_TXT , '' ) || 
+' ) As Varchar(10240) CCSID 37))' AS "statement" ) 
+, DX . DATA_FRAGMENT ) ) ORDER BY E . APPFUNC ) ) AS CLOB ( 2 G ) ) 
+INTO V_RESULT 
+FROM ENDPOINTS E 
+LEFT JOIN PARAM_STR PS 
+ON PS . APPVER = E . APPVER 
+AND PS . APPNAME = E . APPNAME 
+AND PS . APPFUNC = E . APPFUNC 
+LEFT JOIN DATA_XML DX 
+ON DX . APPVER = E . APPVER 
+AND DX . APPNAME = E . APPNAME 
+AND DX . APPFUNC = E . APPFUNC ; 
+RETURN V_RESULT ; 
+END  ; 
+
+GRANT ALTER , EXECUTE   
+ON SPECIFIC FUNCTION RESTAPI.GENERATE_DBML_INLINE 
+TO AMAPICS WITH GRANT OPTION ; 
+
+GRANT EXECUTE   
+ON SPECIFIC FUNCTION RESTAPI.GENERATE_DBML_INLINE 
+TO PUBLIC ; 
+
