@Project_UUID_IN VARCHAR(255),
@VarName_IN VARCHAR(250), 
@DefinitionObject_UUID_IN VARCHAR(32), 
@StartPosition_IN INTEGER, 
@NumberOfRows_IN  INTEGER	
AS
BEGIN
SET XACT_ABORT ON
SET NOCOUNT ON

	
			  -- DECLARATION AREA
			  DECLARE @Project_UUID VARCHAR(255) ;
			  DECLARE @DefinitionObject_UUID VARCHAR(32);
			  DECLARE @VarName VARCHAR(250);
			  DECLARE @StartPosition INTEGER, @NumberOfRows INTEGER ;
			  DECLARE @RC INTEGER = 0 ;
			  DECLARE @ResourceID INTEGER = 0, @ResourceTypeID INTEGER = 0 ;
			  DECLARE @ResourceTypeID_Prog INTEGER = (SELECT TOP 1 ResourceID FROM ResourceTypes WHERE Name = 'PROGRAM') ;


			 -- SET FINAL VALUES FOR WORK VARIABLES
			 SET @StartPosition = COALESCE(NULLIF(@StartPosition_IN, -1), 1) ;
			 SET @NumberOfRows  = COALESCE(NULLIF(@NumberOfRows_IN, -1), 2147480000) ; 
	         SET @DefinitionObject_UUID = COALESCE(LTRIM(RTRIM(@DefinitionObject_UUID_IN)), '') ;
			 SET @VarName = COALESCE(LTRIM(RTRIM(@VarName_IN)), '') ;
			 SET @Project_UUID_IN = COALESCE(LTRIM(RTRIM(@Project_UUID_IN)), '!') ;

			 SELECT @Project_UUID = ProjectGUID
			 FROM  BRD_Status  
			 WHERE BRDID = (SELECT MAX(BRDID) FROM BRD_Status WHERE BRDProcessStatusTypeID = 2) ; -- last BRD succssfull
													 		
			 SET @Project_UUID = COALESCE(LTRIM(RTRIM(@Project_UUID)), '?') ;

			 IF ( @Project_UUID != @Project_UUID_IN) 
				BEGIN 
						  RAISERROR ('BRD - wrong project.', -- Message text.  
								    16, -- Severity.  
								    1 -- State.  
								    ); 
						  RETURN;

				END;


				-- DETERMINE definition resource
                SELECT @ResourceID  = ResourceID, @ResourceTypeID = ResourceTypeID FROM BRD_ResourceDetails WHERE ResourceHash LIKE @DefinitionObject_UUID ;
                SET    @ResourceID  = COALESCE(@ResourceID, 0) ;
				SET @ResourceTypeID = COALESCE(@ResourceTypeID, 0) ;


				IF (@ResourceID = 0) -- this could be deactivated 
					BEGIN 
								RAISERROR ('BRD - Bad Definition Object.', 16, 1); 
								RETURN;
					END;



                IF NOT EXISTS
							(
								SELECT 1
								FROM BRD_Variables v 
								WHERE v.VarName  = @VarName
										AND  (CASE WHEN @ResourceTypeID = 0                     THEN @ResourceID
												WHEN @ResourceTypeID = @ResourceTypeID_Prog  THEN v.ProgID
												ELSE v.CopyID
											END ) = @ResourceID 
										AND  (CASE WHEN @ResourceTypeID = 0                     THEN @ResourceTypeID
												WHEN @ResourceTypeID = @ResourceTypeID_Prog  THEN @ResourceTypeID
												ELSE v.CopyTypeID
											END ) = @ResourceTypeID 
							)
                    BEGIN 
								RAISERROR ('BRD - Variable does not belong to the definition object.', 16, 1); 
								RETURN;
					END;





			IF OBJECT_ID('tempdb..#prg62') IS NOT NULL DROP TABLE #prg62 ;
            SELECT 
			       -- r1.ResourceID AS CopyID, r1.ResourceTypeID AS CopyTypeID, r1.ResourceName AS CopyName, 
				    r1.ResourceHash AS CopyHash 
			       ,c.ResourceID 
				   ,c.ResourceTypeID  
				   ,c.ResourcePathID 
				   ,c.StartRow	
				   ,c.EndRow	
				   ,c.StartCol 
				   ,c.EndCol
				   ,DENSE_RANK() OVER(ORDER BY CASE WHEN c.ResourceTypeID = 5 THEN 0 ELSE 1 END DESC, c.ResourceID, c.ResourcePathID, c.StartRow) AS RN
            INTO #prg62
			FROM BRD_ResourceDetails r1
			     INNER JOIN BRD_CopyToResources c  ON r1.ResourceID = c.CopyID and r1.ResourceTypeID = c.CopyTypeID
			WHERE r1.ResourceHash LIKE @DefinitionObject_UUID ;

			SET @RC = @@ROWCOUNT ; 	


			-- OUTPUT
			SELECT  --src.CopyHash AS DefinitionObjectHash
			       --,r.ResourceID ,r.ResourceTypeID 
				   --,
				   r.ResourceHash
				   ,r.ResourceName
				   ,CASE WHEN r.ResourceTypeID = 5 THEN 0 ELSE 1 END AS ResourceType	  
			       --,src.ResourcePathID 
				   ,pth.PathStr AS ResourcePathStr
				   ,src.StartRow ,src.EndRow 
				   ,src.StartCol ,src.EndCol
				   ,src.RN
				   ,@RC AS NR
			FROM
			    (
					 SELECT CopyHash
					       ,ResourceID ,ResourceTypeID  
					       ,ResourcePathID  
						   ,StartRow ,EndRow
						   ,StartCol ,EndCol
						   ,RN
					 FROM #prg62
					 WHERE RN BETWEEN  @StartPosition  AND (@StartPosition + @NumberOfRows - 1) 
				 ) src
				  INNER JOIN BRD_ResourceDetails r ON  src.ResourceID = r.ResourceID and src.ResourceTypeID = r.ResourceTypeID
				  INNER JOIN BRD_Paths pth ON src.ResourcePathID = pth.PathID 
			ORDER BY src.RN
			OPTION(FAST 500) ;


			-- FINAL CLEAN-UP
			IF OBJECT_ID('tempdb..#prg62') IS NOT NULL DROP TABLE #prg62 ;

END;
