private static S3StoreInfo OpenS3Store(string path)
        {
            string[] parts = path.Split('/');
            if (parts.Length < 3)
            {
                throw new ArgumentException("The specified S3 resource path (" + path + ") is invalid!");
            }
            EncryptionType encryptionType;

            switch (parts[0].ToLowerInvariant())
            {
            case "s3:":
                encryptionType = EncryptionType.None;
                break;

            case "s3e:":
                encryptionType = EncryptionType.SSE_S3;
                break;

            case "s3k:":
                encryptionType = EncryptionType.SSE_KMS;
                break;

            case "s3x:":
                encryptionType = EncryptionType.SSE_C;
                break;

            default:
                throw new ArgumentException("The specified resource path (" + path + ") is not a valid S3 resource path!");
            }
            string bucket = parts[2];
            string prefix = String.Join("/", parts, 3, parts.Length - 3) + "/";

            if (!String.IsNullOrEmpty(parts[1]) || String.IsNullOrEmpty(bucket) || String.IsNullOrEmpty(prefix) || prefix.StartsWith("/"))
            {
                throw new ArgumentException("The specified resource path (" + path + ") is not a valid S3 resource path!");
            }

            int?sliceId = SystemExtensions.TryParseInt(parts[parts.Length - 1]);

            return(new S3StoreInfo(new AmazonS3Client(), sliceId, bucket, prefix, encryptionType));
        }