class AzureBlobStore implements BlobStore {

    private final AzureStorageService service;

    private final String container;
    private final LocationMode locationMode;

    public AzureBlobStore(RepositoryMetadata metadata) {
        this(metadata, new AzureStorageService(AzureStorageSettings.getClientSettings(metadata.settings())));
    }

    @VisibleForTesting
    AzureBlobStore(RepositoryMetadata metadata, AzureStorageService service) {
        this.container = Repository.CONTAINER_SETTING.get(metadata.settings());
        this.locationMode = Repository.LOCATION_MODE_SETTING.get(metadata.settings());

        AzureStorageSettings repositorySettings = AzureStorageSettings
            .getClientSettings(metadata.settings());
        service.refreshSettings(repositorySettings);

        this.service = service;
    }

    @Override
    public String toString() {
        return container;
    }

    /**
     * Gets the configured {@link LocationMode} for the Azure storage requests.
     */
    public LocationMode getLocationMode() {
        return locationMode;
    }

    @Override
    public BlobContainer blobContainer(BlobPath path) {
        return new AzureBlobContainer(path, this);
    }

    @Override
    public void close() {
    }

    public boolean blobExists(String blob) throws URISyntaxException, StorageException {
        return service.blobExists(container, blob);
    }

    public void deleteBlob(String blob) throws URISyntaxException, StorageException {
        service.deleteBlob(container, blob);
    }

    public void deleteBlobDirectory(String keyPath) throws URISyntaxException, StorageException, IOException {
        service.deleteBlobDirectory(container, keyPath);
    }

    public Map<String, BlobContainer> children(BlobPath path) throws URISyntaxException, StorageException {<FILL_FUNCTION_BODY>}

    public InputStream getInputStream(String blob, long position, @Nullable Long length)
        throws URISyntaxException, StorageException, IOException {

        return service.getInputStream(container, blob, position, length);
    }

    public Map<String, BlobMetadata> listBlobsByPrefix(String keyPath, String prefix)
        throws URISyntaxException, StorageException {
        return service.listBlobsByPrefix(container, keyPath, prefix);
    }

    public void writeBlob(String blobName, InputStream inputStream, long blobSize, boolean failIfAlreadyExists)
        throws URISyntaxException, StorageException, IOException {
        service.writeBlob(container, blobName, inputStream, blobSize, failIfAlreadyExists);
    }
}

        return Collections.unmodifiableMap(service.children(container, path).stream().collect(
            Collectors.toMap(Function.identity(), name -> new AzureBlobContainer(path.add(name), this))));
    
<no_super_class>