* Start with tests against fake FTP
* Dummy test file
* Switch to our FTPClient, make tests break
* Implement FTPClient
* Rely on end caller to set path delimiters
* User port 8021 for tests (not protected in azure pipelines)
* Let mocks use Windows filesystem
* Gentle refactor
Co-authored-by: dotasek <david.otasek@smilecdr.com>
## Validator Changes
* Add support for fhir_comments in R2/R2B
* Add validator checking around versions in extension URLs
* Fix bug generating cross-version extensions
## Other code changes
* Fix minor NPEs running IG publisher
* Add new PE module (PEDefinition/PEInstance)
* Add support for liquid filters (resolve FHIRPath conflict)
* Fix up round-tripping of XPath constraints R4/R5
* Refactor R5 ProfileUtilities (and move rendering to rendering package)
* Fix appending text when generating snapshots
***NO_CI***
If the base text was null, appending a text in the derived element (using "...") would show a "null" before the text. This commit adds the method Utilities.appendDerivedTextToBase() to implement to correct behavior.
* Add test util for diff
* Start moving pathprocessor params into dedicated object
* Move diff to Params
* Move base and diff Limits to params
* Rename to newBaseCursor and newBaseLimit
* More renames
* Move url and webUrl to params
* Move profileName to params
* Add contextPathSource to params, adjust indent for processPaths calls
* Move contextPathTarget to params
* Code cleanup, unused variables + move trimDifferential to params
* Create PathSlicingParams
* Shuffle param order
* Move redirector to params
* Move sourceStructureDefinition to params
* Move derived to params
* Move debug statements to dedicated methods
* split processSimplePath
* split processPathWithSlicedBase
* Start splitting ProfilePathProcessor
* Move all params into ProfilePathProcessor
* Move all profile utility related classes to own package
Co-authored-by: dotasek <david.otasek@smilecdr.com>