code: @Builder(builderClassName = "ProxiedFileSystemFromProperties", builderMethodName = "fromProperties")
    private static FileSystem getProxiedFileSystem(@NonNull String userNameToProxyAs, Properties properties, URI fsURI,
        Configuration configuration, FileSystem referenceFS) throws IOException {
      Preconditions.checkNotNull(userNameToProxyAs, "Must provide a user name to proxy as.");
      Preconditions.checkNotNull(properties, "Properties is a mandatory field for proxiedFileSystem generation.");
      URI actualURI = resolveUri(fsURI, configuration, referenceFS);
      Configuration actualConfiguration = resolveConfiguration(configuration, referenceFS);
  
      try {
        return USER_NAME_TO_FILESYSTEM_CACHE.get(getFileSystemKey(actualURI, userNameToProxyAs, referenceFS),
            new CreateProxiedFileSystemFromProperties(userNameToProxyAs, properties, actualURI, actualConfiguration,
                referenceFS));
      } catch (ExecutionException ee) {
        throw new IOException("Failed to get proxied file system for user " + userNameToProxyAs, ee);
      }
    }
docs: Gets a {@link FileSystem} that can perform any operations allowed by the specified userNameToProxyAs.
  
  @param userNameToProxyAs The name of the user the super user should proxy as
  @param properties {@link java.util.Properties} containing initialization properties.
  @param fsURI The {@link URI} for the {@link FileSystem} that should be created.
  @param configuration The {@link Configuration} for the {@link FileSystem} that should be created.
  @param referenceFS reference {@link FileSystem}. Used to replicate certain decorators of the reference FS:
  {@link RateControlledFileSystem}.
  @return a {@link FileSystem} that can execute commands on behalf of the specified userNameToProxyAs
  @throws IOException