You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@opendal.apache.org by gi...@apache.org on 2023/11/01 12:03:25 UTC

(incubator-opendal) branch gh-pages updated: deploy: 0721a6e5950064bb39c2f4dfb116a410d546e958

This is an automated email from the ASF dual-hosted git repository.

github-bot pushed a commit to branch gh-pages
in repository https://gitbox.apache.org/repos/asf/incubator-opendal.git


The following commit(s) were added to refs/heads/gh-pages by this push:
     new 51987bc08 deploy: 0721a6e5950064bb39c2f4dfb116a410d546e958
51987bc08 is described below

commit 51987bc081198d0550543c636678d973125b77e2
Author: Xuanwo <Xu...@users.noreply.github.com>
AuthorDate: Wed Nov 1 12:03:21 2023 +0000

    deploy: 0721a6e5950064bb39c2f4dfb116a410d546e958
---
 404.html                                           |    8 +-
 .../{054cd2fb.5f170de5.js => 054cd2fb.c28dd373.js} |    2 +-
 .../{0605a481.921d4c84.js => 0605a481.6e6c55fd.js} |    2 +-
 .../{093f5f04.bf644990.js => 093f5f04.7e046a75.js} |    2 +-
 .../{09d8124e.ac01d676.js => 09d8124e.14ac5456.js} |    2 +-
 .../{136e1c50.5a2c18f3.js => 136e1c50.feacc92f.js} |    2 +-
 .../{151cd40f.65671eb7.js => 151cd40f.a9333294.js} |    2 +-
 .../{1957547a.00013898.js => 1957547a.899fd517.js} |    2 +-
 .../{1db64337.c45be716.js => 1db64337.1e019083.js} |    2 +-
 .../{22d8fa67.30f81b59.js => 22d8fa67.1bb50614.js} |    2 +-
 .../{29b208a4.e58f39ca.js => 29b208a4.52e4311f.js} |    2 +-
 .../{2cbf1097.36be7859.js => 2cbf1097.5fb6fab3.js} |    2 +-
 .../{3632610d.f01f7e1a.js => 3632610d.70e5639d.js} |    2 +-
 .../{42347498.6e949a83.js => 42347498.6c5a1bc1.js} |    2 +-
 .../{434bbc94.d151414c.js => 434bbc94.550b444a.js} |    2 +-
 .../{4e2d8f56.e90e19e5.js => 4e2d8f56.af77e7bc.js} |    2 +-
 .../{500d55cb.d03eaad5.js => 500d55cb.9b4c0b37.js} |    2 +-
 .../{57a16c1d.92c2074d.js => 57a16c1d.583f7418.js} |    2 +-
 .../{592d1076.7b79f206.js => 592d1076.b72623f7.js} |    2 +-
 .../{621b831b.4a912c83.js => 621b831b.0b31b86f.js} |    2 +-
 .../{65bf2b43.2b8e49a3.js => 65bf2b43.6c6e6bd4.js} |    2 +-
 .../{67ecc70e.d696e9c6.js => 67ecc70e.523add27.js} |    2 +-
 .../{6a41242b.2d1c4771.js => 6a41242b.95b763b8.js} |    2 +-
 .../{6dc695d1.7947af12.js => 6dc695d1.d33c0716.js} |    2 +-
 .../{6f4d3fa1.bd0587ad.js => 6f4d3fa1.ca0039c4.js} |    2 +-
 .../{7263c0b5.b108551a.js => 7263c0b5.7edaec19.js} |    2 +-
 .../{8070e160.28964f65.js => 8070e160.bc21bf2b.js} |    2 +-
 assets/js/8b18d929.23d2dd63.js                     |    1 -
 .../{8cc9519e.df8bdfe8.js => 8cc9519e.f89c29f5.js} |    2 +-
 .../{8f4159f2.61479bb2.js => 8f4159f2.cf0657ef.js} |    2 +-
 .../{8fb00c63.952e5f66.js => 8fb00c63.a32fb38a.js} |    2 +-
 assets/js/935f2afb.48dd7fe6.js                     |    1 -
 assets/js/935f2afb.7eb524c5.js                     |    1 +
 .../{939f74f6.976af2db.js => 939f74f6.22570fe9.js} |    2 +-
 .../{a0405932.30692f82.js => a0405932.949c1263.js} |    2 +-
 .../{b114cefa.cd7def50.js => b114cefa.b6b32e39.js} |    2 +-
 .../{b56f9725.032a4319.js => b56f9725.69465b6f.js} |    2 +-
 .../{bb5b2057.4dfc96e2.js => bb5b2057.03c80c63.js} |    2 +-
 .../{c0600a1b.33e9bab8.js => c0600a1b.8b707405.js} |    2 +-
 .../{c46c6b55.e3943cbf.js => c46c6b55.0f77db01.js} |    2 +-
 .../{c6ab695b.52c39794.js => c6ab695b.45048bd4.js} |    2 +-
 .../{cc62039a.54eb9956.js => cc62039a.4edc64db.js} |    2 +-
 .../{d3c0d8d5.67adbe61.js => d3c0d8d5.9da80015.js} |    2 +-
 .../{ddccef4c.f60d3538.js => ddccef4c.39c50deb.js} |    2 +-
 .../{e892cec6.4edbe0e3.js => e892cec6.390ac9f3.js} |    2 +-
 .../{f1ca5a39.240f3f40.js => f1ca5a39.f143b828.js} |    2 +-
 .../{f9145722.167144b5.js => f9145722.292fb506.js} |    2 +-
 .../{fde7cc64.b541b26c.js => fde7cc64.09092edc.js} |    2 +-
 assets/js/main.b461bd80.js                         |    2 +
 ...js.LICENSE.txt => main.b461bd80.js.LICENSE.txt} |    0
 assets/js/main.b5b973fb.js                         |    2 -
 assets/js/runtime~main.23901fca.js                 |    1 +
 assets/js/runtime~main.e8c8dc66.js                 |    1 -
 blog/archive/index.html                            |    8 +-
 blog/how-opendal-read-data/index.html              |    8 +-
 blog/index.html                                    |    8 +-
 blog/opendal-access-data-freely/index.html         |    8 +-
 blog/opendal-entered-apache-incubator/index.html   |    8 +-
 blog/owo-1/index.html                              |    8 +-
 blog/tags/announcement/index.html                  |    8 +-
 blog/tags/index.html                               |    8 +-
 blog/tags/internal/index.html                      |    8 +-
 blog/tags/owo/index.html                           |    8 +-
 community/category/committers/index.html           |    8 +-
 community/category/reference/index.html            |    8 +-
 community/committers/committer/index.html          |    8 +-
 community/committers/podling-report/index.html     |    8 +-
 .../reference/generate_release_note/index.html     |    8 +-
 .../committers/reference/setup_gpg/index.html      |    8 +-
 community/committers/release/index.html            |    8 +-
 community/committers/verify/index.html             |    8 +-
 community/index.html                               |    8 +-
 docs/category/services/index.html                  |   10 +-
 docs/lua/classes/opendal.metadata.html             |    2 +-
 docs/lua/classes/opendal.operator.html             |    2 +-
 docs/lua/index.html                                |    2 +-
 docs/nodejs/classes/BlockingLister.html            |    4 +-
 docs/nodejs/classes/Entry.html                     |    4 +-
 docs/nodejs/classes/Lister.html                    |    4 +-
 docs/nodejs/classes/Metadata.html                  |   18 +-
 docs/nodejs/classes/Operator.html                  |   58 +-
 docs/nodejs/interfaces/PresignedRequest.html       |    8 +-
 docs/overview/index.html                           |   10 +-
 docs/python/opendal.html                           |  372 ++--
 docs/python/search.js                              |    2 +-
 docs/quickstart/index.html                         |   10 +-
 .../implementors/core/default/trait.Default.js     |    2 +-
 docs/rust/implementors/core/fmt/trait.Debug.js     |    2 +-
 docs/rust/implementors/core/marker/trait.Freeze.js |    2 +-
 docs/rust/implementors/core/marker/trait.Send.js   |    2 +-
 docs/rust/implementors/core/marker/trait.Sync.js   |    2 +-
 docs/rust/implementors/core/marker/trait.Unpin.js  |    2 +-
 .../core/panic/unwind_safe/trait.RefUnwindSafe.js  |    2 +-
 .../core/panic/unwind_safe/trait.UnwindSafe.js     |    2 +-
 docs/rust/opendal/all.html                         |    2 +-
 docs/rust/opendal/docs/upgrade/index.html          |    2 +
 docs/rust/opendal/enum.Scheme.html                 |   12 +-
 docs/rust/opendal/services/index.html              |    4 +-
 docs/rust/opendal/services/sidebar-items.js        |    2 +-
 docs/rust/opendal/services/struct.Wasabi.html      |  416 -----
 .../wasabi/backend/struct.WasabiBuilder.html       |   11 -
 docs/rust/opendal/struct.Operator.html             |    6 +-
 docs/rust/opendal/struct.OperatorBuilder.html      |    8 +-
 docs/rust/opendal/trait.Builder.html               |    2 +-
 docs/rust/search-index.js                          |    2 +-
 docs/rust/src-files.js                             |    2 +-
 docs/rust/src/opendal/services/mod.rs.html         |   10 -
 .../src/opendal/services/wasabi/backend.rs.html    | 1903 --------------------
 docs/rust/src/opendal/services/wasabi/core.rs.html | 1823 -------------------
 .../rust/src/opendal/services/wasabi/error.rs.html |  263 ---
 docs/rust/src/opendal/services/wasabi/mod.rs.html  |   49 -
 .../rust/src/opendal/services/wasabi/pager.rs.html |  463 -----
 .../src/opendal/services/wasabi/writer.rs.html     |  131 --
 .../src/opendal/types/operator/builder.rs.html     |    4 -
 docs/rust/src/opendal/types/scheme.rs.html         |   12 -
 docs/services/atomicserver/index.html              |   10 +-
 docs/services/azblob/index.html                    |   10 +-
 docs/services/azdls/index.html                     |   10 +-
 docs/services/cacache/index.html                   |   10 +-
 docs/services/cos/index.html                       |   10 +-
 docs/services/d1/index.html                        |   10 +-
 docs/services/dashmap/index.html                   |   10 +-
 docs/services/dropbox/index.html                   |   12 +-
 docs/services/etcd/index.html                      |   10 +-
 docs/services/foundationdb/index.html              |   10 +-
 docs/services/fs/index.html                        |   10 +-
 docs/services/ftp/index.html                       |   10 +-
 docs/services/gcs/index.html                       |   10 +-
 docs/services/gdrive/index.html                    |   12 +-
 docs/services/ghac/index.html                      |   12 +-
 docs/services/hdfs/index.html                      |   10 +-
 docs/services/http/index.html                      |   12 +-
 docs/services/ipfs/index.html                      |   10 +-
 docs/services/ipmfs/index.html                     |   10 +-
 docs/services/libsql/index.html                    |   10 +-
 docs/services/memcached/index.html                 |   10 +-
 docs/services/memory/index.html                    |   10 +-
 docs/services/moka/index.html                      |   10 +-
 docs/services/mongodb/index.html                   |   10 +-
 docs/services/mysql/index.html                     |   10 +-
 docs/services/obs/index.html                       |   10 +-
 docs/services/onedrive/index.html                  |   10 +-
 docs/services/oss/index.html                       |   10 +-
 docs/services/persy/index.html                     |   10 +-
 docs/services/postgresql/index.html                |   10 +-
 docs/services/redb/index.html                      |   10 +-
 docs/services/redis/index.html                     |   10 +-
 docs/services/rocksdb/index.html                   |   12 +-
 docs/services/s3/index.html                        |   10 +-
 docs/services/sftp/index.html                      |   12 +-
 docs/services/sled/index.html                      |   10 +-
 docs/services/sqlite/index.html                    |   10 +-
 docs/services/supabase/index.html                  |   12 +-
 docs/services/tikv/index.html                      |   10 +-
 docs/services/vercel_artifacts/index.html          |   10 +-
 docs/services/wasabi/index.html                    |   17 -
 docs/services/webdav/index.html                    |   12 +-
 docs/services/webhdfs/index.html                   |   10 +-
 download/index.html                                |    8 +-
 index.html                                         |    8 +-
 sitemap.xml                                        |    2 +-
 161 files changed, 637 insertions(+), 5740 deletions(-)

diff --git a/404.html b/404.html
index 6c025804d..aae172ff9 100644
--- a/404.html
+++ b/404.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">Page Not Found | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/404.html"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docusaurus_tag" content="default"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.e8c8dc66.js" as="script">
-<link rel="preload" href="/assets/js/main.b5b973fb.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.23901fca.js" as="script">
+<link rel="preload" href="/assets/js/main.b461bd80.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
 <div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.e8c8dc66.js"></script>
-<script src="/assets/js/main.b5b973fb.js"></script>
+<script src="/assets/js/runtime~main.23901fca.js"></script>
+<script src="/assets/js/main.b461bd80.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/assets/js/054cd2fb.5f170de5.js b/assets/js/054cd2fb.c28dd373.js
similarity index 98%
rename from assets/js/054cd2fb.5f170de5.js
rename to assets/js/054cd2fb.c28dd373.js
index 611fae863..013c645ac 100644
--- a/assets/js/054cd2fb.5f170de5.js
+++ b/assets/js/054cd2fb.c28dd373.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[1846],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>k});var a=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function s(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}retu [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[1846],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>k});var a=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function s(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}retu [...]
\ No newline at end of file
diff --git a/assets/js/0605a481.921d4c84.js b/assets/js/0605a481.6e6c55fd.js
similarity index 91%
rename from assets/js/0605a481.921d4c84.js
rename to assets/js/0605a481.6e6c55fd.js
index 3498fadf0..0c83836c3 100644
--- a/assets/js/0605a481.921d4c84.js
+++ b/assets/js/0605a481.6e6c55fd.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[2113],{3905:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>b});var a=r(7294);function n(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function i(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,a)}retu [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[2113],{3905:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>k});var a=r(7294);function n(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function i(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,a)}retu [...]
\ No newline at end of file
diff --git a/assets/js/093f5f04.bf644990.js b/assets/js/093f5f04.7e046a75.js
similarity index 77%
rename from assets/js/093f5f04.bf644990.js
rename to assets/js/093f5f04.7e046a75.js
index c11059ba2..4d4046ae7 100644
--- a/assets/js/093f5f04.bf644990.js
+++ b/assets/js/093f5f04.7e046a75.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[6915],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>b});var a=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}retu [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[6915],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>b});var a=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function s(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}retu [...]
\ No newline at end of file
diff --git a/assets/js/09d8124e.ac01d676.js b/assets/js/09d8124e.14ac5456.js
similarity index 90%
rename from assets/js/09d8124e.ac01d676.js
rename to assets/js/09d8124e.14ac5456.js
index 108ffe877..632e86c2f 100644
--- a/assets/js/09d8124e.ac01d676.js
+++ b/assets/js/09d8124e.14ac5456.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[4543],{3905:(e,t,a)=>{a.d(t,{Zo:()=>u,kt:()=>b});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retu [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[4543],{3905:(e,t,a)=>{a.d(t,{Zo:()=>u,kt:()=>h});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retu [...]
\ No newline at end of file
diff --git a/assets/js/136e1c50.5a2c18f3.js b/assets/js/136e1c50.feacc92f.js
similarity index 98%
rename from assets/js/136e1c50.5a2c18f3.js
rename to assets/js/136e1c50.feacc92f.js
index 1926e1535..069a16a54 100644
--- a/assets/js/136e1c50.5a2c18f3.js
+++ b/assets/js/136e1c50.feacc92f.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[3057],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>b});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function i(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retu [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[3057],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>b});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function i(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retu [...]
\ No newline at end of file
diff --git a/assets/js/151cd40f.65671eb7.js b/assets/js/151cd40f.a9333294.js
similarity index 99%
rename from assets/js/151cd40f.65671eb7.js
rename to assets/js/151cd40f.a9333294.js
index d0c9494bc..ff1ec57ae 100644
--- a/assets/js/151cd40f.65671eb7.js
+++ b/assets/js/151cd40f.a9333294.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[3702],{3905:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>b});var a=r(7294);function n(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,a)}retu [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[3702],{3905:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>b});var a=r(7294);function n(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,a)}retu [...]
\ No newline at end of file
diff --git a/assets/js/1957547a.00013898.js b/assets/js/1957547a.899fd517.js
similarity index 98%
rename from assets/js/1957547a.00013898.js
rename to assets/js/1957547a.899fd517.js
index 979d62005..20bb84615 100644
--- a/assets/js/1957547a.00013898.js
+++ b/assets/js/1957547a.899fd517.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[4477],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>b});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retu [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[4477],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>b});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retu [...]
\ No newline at end of file
diff --git a/assets/js/1db64337.c45be716.js b/assets/js/1db64337.1e019083.js
similarity index 98%
rename from assets/js/1db64337.c45be716.js
rename to assets/js/1db64337.1e019083.js
index 2caadcd06..f51568745 100644
--- a/assets/js/1db64337.c45be716.js
+++ b/assets/js/1db64337.1e019083.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[1372],{3905:(e,t,r)=>{r.d(t,{Zo:()=>c,kt:()=>f});var a=r(7294);function n(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,a)}retu [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[1372],{3905:(e,t,r)=>{r.d(t,{Zo:()=>c,kt:()=>f});var a=r(7294);function n(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,a)}retu [...]
\ No newline at end of file
diff --git a/assets/js/22d8fa67.30f81b59.js b/assets/js/22d8fa67.1bb50614.js
similarity index 98%
rename from assets/js/22d8fa67.30f81b59.js
rename to assets/js/22d8fa67.1bb50614.js
index 235b85860..458bdb8e5 100644
--- a/assets/js/22d8fa67.30f81b59.js
+++ b/assets/js/22d8fa67.1bb50614.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[4536],{3905:(e,t,a)=>{a.d(t,{Zo:()=>u,kt:()=>b});var r=a(7294);function n(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,r)}retu [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[4536],{3905:(e,t,a)=>{a.d(t,{Zo:()=>u,kt:()=>b});var r=a(7294);function n(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,r)}retu [...]
\ No newline at end of file
diff --git a/assets/js/29b208a4.e58f39ca.js b/assets/js/29b208a4.52e4311f.js
similarity index 84%
rename from assets/js/29b208a4.e58f39ca.js
rename to assets/js/29b208a4.52e4311f.js
index d5c3b6750..6f7853179 100644
--- a/assets/js/29b208a4.e58f39ca.js
+++ b/assets/js/29b208a4.52e4311f.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[6152],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>b});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retu [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[6152],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>b});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retu [...]
\ No newline at end of file
diff --git a/assets/js/2cbf1097.36be7859.js b/assets/js/2cbf1097.5fb6fab3.js
similarity index 99%
rename from assets/js/2cbf1097.36be7859.js
rename to assets/js/2cbf1097.5fb6fab3.js
index 4aa16e026..efcea6ec6 100644
--- a/assets/js/2cbf1097.36be7859.js
+++ b/assets/js/2cbf1097.5fb6fab3.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[2804],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>k});var a=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}retu [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[2804],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>k});var a=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}retu [...]
\ No newline at end of file
diff --git a/assets/js/3632610d.f01f7e1a.js b/assets/js/3632610d.70e5639d.js
similarity index 85%
rename from assets/js/3632610d.f01f7e1a.js
rename to assets/js/3632610d.70e5639d.js
index a568e8f9e..165252fef 100644
--- a/assets/js/3632610d.f01f7e1a.js
+++ b/assets/js/3632610d.70e5639d.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[2963],{3905:(e,t,a)=>{a.d(t,{Zo:()=>u,kt:()=>b});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retu [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[2963],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>b});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retu [...]
\ No newline at end of file
diff --git a/assets/js/42347498.6e949a83.js b/assets/js/42347498.6c5a1bc1.js
similarity index 98%
rename from assets/js/42347498.6e949a83.js
rename to assets/js/42347498.6c5a1bc1.js
index 7101cfa66..f6f50e3fb 100644
--- a/assets/js/42347498.6e949a83.js
+++ b/assets/js/42347498.6c5a1bc1.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[7254],{3905:(e,t,a)=>{a.d(t,{Zo:()=>u,kt:()=>f});var r=a(7294);function n(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,r)}retu [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[7254],{3905:(e,t,a)=>{a.d(t,{Zo:()=>u,kt:()=>f});var r=a(7294);function n(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,r)}retu [...]
\ No newline at end of file
diff --git a/assets/js/434bbc94.d151414c.js b/assets/js/434bbc94.550b444a.js
similarity index 98%
rename from assets/js/434bbc94.d151414c.js
rename to assets/js/434bbc94.550b444a.js
index 4418b3ba2..127dae8bc 100644
--- a/assets/js/434bbc94.d151414c.js
+++ b/assets/js/434bbc94.550b444a.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[1163],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>b});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retu [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[1163],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>b});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retu [...]
\ No newline at end of file
diff --git a/assets/js/4e2d8f56.e90e19e5.js b/assets/js/4e2d8f56.af77e7bc.js
similarity index 99%
rename from assets/js/4e2d8f56.e90e19e5.js
rename to assets/js/4e2d8f56.af77e7bc.js
index 5667ea7e6..252ddd876 100644
--- a/assets/js/4e2d8f56.e90e19e5.js
+++ b/assets/js/4e2d8f56.af77e7bc.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[6752],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>b});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retu [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[6752],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>b});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retu [...]
\ No newline at end of file
diff --git a/assets/js/500d55cb.d03eaad5.js b/assets/js/500d55cb.9b4c0b37.js
similarity index 86%
rename from assets/js/500d55cb.d03eaad5.js
rename to assets/js/500d55cb.9b4c0b37.js
index 2cb4699e2..ab9e066e7 100644
--- a/assets/js/500d55cb.d03eaad5.js
+++ b/assets/js/500d55cb.9b4c0b37.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[7489],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>b});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retu [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[7489],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>b});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retu [...]
\ No newline at end of file
diff --git a/assets/js/57a16c1d.92c2074d.js b/assets/js/57a16c1d.583f7418.js
similarity index 95%
rename from assets/js/57a16c1d.92c2074d.js
rename to assets/js/57a16c1d.583f7418.js
index fcb491698..1ee66ff99 100644
--- a/assets/js/57a16c1d.92c2074d.js
+++ b/assets/js/57a16c1d.583f7418.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[7757],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>b});var a=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}retu [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[7757],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>b});var a=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}retu [...]
\ No newline at end of file
diff --git a/assets/js/592d1076.7b79f206.js b/assets/js/592d1076.b72623f7.js
similarity index 98%
rename from assets/js/592d1076.7b79f206.js
rename to assets/js/592d1076.b72623f7.js
index 8009e982d..c3e9b7401 100644
--- a/assets/js/592d1076.7b79f206.js
+++ b/assets/js/592d1076.b72623f7.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[990],{3905:(e,t,a)=>{a.d(t,{Zo:()=>u,kt:()=>b});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retur [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[990],{3905:(e,t,a)=>{a.d(t,{Zo:()=>u,kt:()=>b});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retur [...]
\ No newline at end of file
diff --git a/assets/js/621b831b.4a912c83.js b/assets/js/621b831b.0b31b86f.js
similarity index 92%
rename from assets/js/621b831b.4a912c83.js
rename to assets/js/621b831b.0b31b86f.js
index fa93efe5b..c6b3e2352 100644
--- a/assets/js/621b831b.4a912c83.js
+++ b/assets/js/621b831b.0b31b86f.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[4551],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>b});var a=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}retu [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[4551],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>k});var a=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}retu [...]
\ No newline at end of file
diff --git a/assets/js/65bf2b43.2b8e49a3.js b/assets/js/65bf2b43.6c6e6bd4.js
similarity index 98%
rename from assets/js/65bf2b43.2b8e49a3.js
rename to assets/js/65bf2b43.6c6e6bd4.js
index 70f423a25..d528566b8 100644
--- a/assets/js/65bf2b43.2b8e49a3.js
+++ b/assets/js/65bf2b43.6c6e6bd4.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[2115],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>b});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retu [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[2115],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>b});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retu [...]
\ No newline at end of file
diff --git a/assets/js/67ecc70e.d696e9c6.js b/assets/js/67ecc70e.523add27.js
similarity index 92%
rename from assets/js/67ecc70e.d696e9c6.js
rename to assets/js/67ecc70e.523add27.js
index 230594100..6146dee35 100644
--- a/assets/js/67ecc70e.d696e9c6.js
+++ b/assets/js/67ecc70e.523add27.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[4434],{3905:(e,t,a)=>{a.d(t,{Zo:()=>u,kt:()=>b});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retu [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[4434],{3905:(e,t,a)=>{a.d(t,{Zo:()=>u,kt:()=>b});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retu [...]
\ No newline at end of file
diff --git a/assets/js/6a41242b.2d1c4771.js b/assets/js/6a41242b.95b763b8.js
similarity index 94%
rename from assets/js/6a41242b.2d1c4771.js
rename to assets/js/6a41242b.95b763b8.js
index 893ccbcde..4122eb5b7 100644
--- a/assets/js/6a41242b.2d1c4771.js
+++ b/assets/js/6a41242b.95b763b8.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[5571],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>b});var a=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}retu [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[5571],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>b});var a=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}retu [...]
\ No newline at end of file
diff --git a/assets/js/6dc695d1.7947af12.js b/assets/js/6dc695d1.d33c0716.js
similarity index 88%
rename from assets/js/6dc695d1.7947af12.js
rename to assets/js/6dc695d1.d33c0716.js
index 6f5efa91c..ff4606fe2 100644
--- a/assets/js/6dc695d1.7947af12.js
+++ b/assets/js/6dc695d1.d33c0716.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[5982],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>b});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retu [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[5982],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>f});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retu [...]
\ No newline at end of file
diff --git a/assets/js/6f4d3fa1.bd0587ad.js b/assets/js/6f4d3fa1.ca0039c4.js
similarity index 94%
rename from assets/js/6f4d3fa1.bd0587ad.js
rename to assets/js/6f4d3fa1.ca0039c4.js
index 6eb52eff6..26b708927 100644
--- a/assets/js/6f4d3fa1.bd0587ad.js
+++ b/assets/js/6f4d3fa1.ca0039c4.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[5885],{3905:(e,t,a)=>{a.d(t,{Zo:()=>u,kt:()=>k});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retu [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[5885],{3905:(e,t,a)=>{a.d(t,{Zo:()=>u,kt:()=>k});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retu [...]
\ No newline at end of file
diff --git a/assets/js/7263c0b5.b108551a.js b/assets/js/7263c0b5.7edaec19.js
similarity index 98%
rename from assets/js/7263c0b5.b108551a.js
rename to assets/js/7263c0b5.7edaec19.js
index a2742e2d5..1c63eeb83 100644
--- a/assets/js/7263c0b5.b108551a.js
+++ b/assets/js/7263c0b5.7edaec19.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[4649],{3905:(e,t,a)=>{a.d(t,{Zo:()=>u,kt:()=>k});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retu [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[4649],{3905:(e,t,a)=>{a.d(t,{Zo:()=>u,kt:()=>k});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retu [...]
\ No newline at end of file
diff --git a/assets/js/8070e160.28964f65.js b/assets/js/8070e160.bc21bf2b.js
similarity index 98%
rename from assets/js/8070e160.28964f65.js
rename to assets/js/8070e160.bc21bf2b.js
index 3f82fa4e7..cb374b9ac 100644
--- a/assets/js/8070e160.28964f65.js
+++ b/assets/js/8070e160.bc21bf2b.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[2651],{3905:(e,n,t)=>{t.d(n,{Zo:()=>s,kt:()=>g});var a=t(7294);function l(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function o(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);n&&(a=a.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,a)}retu [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[2651],{3905:(e,n,t)=>{t.d(n,{Zo:()=>s,kt:()=>g});var a=t(7294);function l(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function o(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);n&&(a=a.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,a)}retu [...]
\ No newline at end of file
diff --git a/assets/js/8b18d929.23d2dd63.js b/assets/js/8b18d929.23d2dd63.js
deleted file mode 100644
index 4f8d0ef2b..000000000
--- a/assets/js/8b18d929.23d2dd63.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[6299],{3905:(e,t,a)=>{a.d(t,{Zo:()=>u,kt:()=>k});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function i(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retu [...]
\ No newline at end of file
diff --git a/assets/js/8cc9519e.df8bdfe8.js b/assets/js/8cc9519e.f89c29f5.js
similarity index 96%
rename from assets/js/8cc9519e.df8bdfe8.js
rename to assets/js/8cc9519e.f89c29f5.js
index c418029c7..c95b091c8 100644
--- a/assets/js/8cc9519e.df8bdfe8.js
+++ b/assets/js/8cc9519e.f89c29f5.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[1652],{3905:(e,t,a)=>{a.d(t,{Zo:()=>o,kt:()=>k});var r=a(7294);function n(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function i(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,r)}retu [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[1652],{3905:(e,t,a)=>{a.d(t,{Zo:()=>o,kt:()=>k});var r=a(7294);function n(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function i(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,r)}retu [...]
\ No newline at end of file
diff --git a/assets/js/8f4159f2.61479bb2.js b/assets/js/8f4159f2.cf0657ef.js
similarity index 96%
rename from assets/js/8f4159f2.61479bb2.js
rename to assets/js/8f4159f2.cf0657ef.js
index e5918fabc..fe03e7cdb 100644
--- a/assets/js/8f4159f2.61479bb2.js
+++ b/assets/js/8f4159f2.cf0657ef.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[4719],{3905:(e,t,a)=>{a.d(t,{Zo:()=>o,kt:()=>k});var r=a(7294);function n(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function i(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,r)}retu [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[4719],{3905:(e,t,a)=>{a.d(t,{Zo:()=>o,kt:()=>k});var r=a(7294);function n(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function i(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,r)}retu [...]
\ No newline at end of file
diff --git a/assets/js/8fb00c63.952e5f66.js b/assets/js/8fb00c63.a32fb38a.js
similarity index 99%
rename from assets/js/8fb00c63.952e5f66.js
rename to assets/js/8fb00c63.a32fb38a.js
index 16cf191c3..a9d276db7 100644
--- a/assets/js/8fb00c63.952e5f66.js
+++ b/assets/js/8fb00c63.a32fb38a.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[4600],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>f});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retu [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[4600],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>f});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retu [...]
\ No newline at end of file
diff --git a/assets/js/935f2afb.48dd7fe6.js b/assets/js/935f2afb.48dd7fe6.js
deleted file mode 100644
index 7a2d5407b..000000000
--- a/assets/js/935f2afb.48dd7fe6.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[53],{1109:e=>{e.exports=JSON.parse('{"pluginId":"default","version":"current","label":"Next","banner":null,"badge":false,"noIndex":false,"className":"docs-version-current","isLast":true,"docsSidebars":{"docs":[{"type":"link","label":"Welcome to Apache OpenDAL","href":"/docs/overview","docId":"overview"},{"type":"link","label":"Quickstart","href":"/docs/quickstart","docId":"quickstart"},{"type":"ca [...]
\ No newline at end of file
diff --git a/assets/js/935f2afb.7eb524c5.js b/assets/js/935f2afb.7eb524c5.js
new file mode 100644
index 000000000..e95bccc71
--- /dev/null
+++ b/assets/js/935f2afb.7eb524c5.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[53],{1109:e=>{e.exports=JSON.parse('{"pluginId":"default","version":"current","label":"Next","banner":null,"badge":false,"noIndex":false,"className":"docs-version-current","isLast":true,"docsSidebars":{"docs":[{"type":"link","label":"Welcome to Apache OpenDAL","href":"/docs/overview","docId":"overview"},{"type":"link","label":"Quickstart","href":"/docs/quickstart","docId":"quickstart"},{"type":"ca [...]
\ No newline at end of file
diff --git a/assets/js/939f74f6.976af2db.js b/assets/js/939f74f6.22570fe9.js
similarity index 99%
rename from assets/js/939f74f6.976af2db.js
rename to assets/js/939f74f6.22570fe9.js
index ea539e7cf..93b07aa22 100644
--- a/assets/js/939f74f6.976af2db.js
+++ b/assets/js/939f74f6.22570fe9.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[4277],{3905:(e,t,a)=>{a.d(t,{Zo:()=>u,kt:()=>b});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retu [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[4277],{3905:(e,t,a)=>{a.d(t,{Zo:()=>u,kt:()=>b});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retu [...]
\ No newline at end of file
diff --git a/assets/js/a0405932.30692f82.js b/assets/js/a0405932.949c1263.js
similarity index 91%
rename from assets/js/a0405932.30692f82.js
rename to assets/js/a0405932.949c1263.js
index f1b045acc..768e134c5 100644
--- a/assets/js/a0405932.30692f82.js
+++ b/assets/js/a0405932.949c1263.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[716],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>b});var a=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}retur [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[716],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>k});var a=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}retur [...]
\ No newline at end of file
diff --git a/assets/js/b114cefa.cd7def50.js b/assets/js/b114cefa.b6b32e39.js
similarity index 94%
rename from assets/js/b114cefa.cd7def50.js
rename to assets/js/b114cefa.b6b32e39.js
index 9f164e67b..e4f343458 100644
--- a/assets/js/b114cefa.cd7def50.js
+++ b/assets/js/b114cefa.b6b32e39.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[2161],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>b});var a=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}retu [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[2161],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>b});var a=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}retu [...]
\ No newline at end of file
diff --git a/assets/js/b56f9725.032a4319.js b/assets/js/b56f9725.69465b6f.js
similarity index 98%
rename from assets/js/b56f9725.032a4319.js
rename to assets/js/b56f9725.69465b6f.js
index 5891d722a..f6b0ad1a1 100644
--- a/assets/js/b56f9725.032a4319.js
+++ b/assets/js/b56f9725.69465b6f.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[217],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>f});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retur [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[217],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>f});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retur [...]
\ No newline at end of file
diff --git a/assets/js/bb5b2057.4dfc96e2.js b/assets/js/bb5b2057.03c80c63.js
similarity index 91%
rename from assets/js/bb5b2057.4dfc96e2.js
rename to assets/js/bb5b2057.03c80c63.js
index 3698e02de..b8a52ce33 100644
--- a/assets/js/bb5b2057.4dfc96e2.js
+++ b/assets/js/bb5b2057.03c80c63.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[5214],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>f});var a=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}retu [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[5214],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>k});var a=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}retu [...]
\ No newline at end of file
diff --git a/assets/js/c0600a1b.33e9bab8.js b/assets/js/c0600a1b.8b707405.js
similarity index 98%
rename from assets/js/c0600a1b.33e9bab8.js
rename to assets/js/c0600a1b.8b707405.js
index b0ad9d69e..9052f341c 100644
--- a/assets/js/c0600a1b.33e9bab8.js
+++ b/assets/js/c0600a1b.8b707405.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[8874],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>b});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retu [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[8874],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>b});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retu [...]
\ No newline at end of file
diff --git a/assets/js/c46c6b55.e3943cbf.js b/assets/js/c46c6b55.0f77db01.js
similarity index 83%
rename from assets/js/c46c6b55.e3943cbf.js
rename to assets/js/c46c6b55.0f77db01.js
index 5186213ec..374ce460b 100644
--- a/assets/js/c46c6b55.e3943cbf.js
+++ b/assets/js/c46c6b55.0f77db01.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[5927],{3905:(e,t,a)=>{a.d(t,{Zo:()=>u,kt:()=>b});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retu [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[5927],{3905:(e,t,a)=>{a.d(t,{Zo:()=>u,kt:()=>b});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retu [...]
\ No newline at end of file
diff --git a/assets/js/c6ab695b.52c39794.js b/assets/js/c6ab695b.45048bd4.js
similarity index 99%
rename from assets/js/c6ab695b.52c39794.js
rename to assets/js/c6ab695b.45048bd4.js
index 4f0de854e..b662cf117 100644
--- a/assets/js/c6ab695b.52c39794.js
+++ b/assets/js/c6ab695b.45048bd4.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[7289],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>b});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retu [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[7289],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>b});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retu [...]
\ No newline at end of file
diff --git a/assets/js/cc62039a.54eb9956.js b/assets/js/cc62039a.4edc64db.js
similarity index 99%
rename from assets/js/cc62039a.54eb9956.js
rename to assets/js/cc62039a.4edc64db.js
index a2c0b797a..9e2ccd985 100644
--- a/assets/js/cc62039a.54eb9956.js
+++ b/assets/js/cc62039a.4edc64db.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[1011],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>k});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retu [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[1011],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>k});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retu [...]
\ No newline at end of file
diff --git a/assets/js/d3c0d8d5.67adbe61.js b/assets/js/d3c0d8d5.9da80015.js
similarity index 85%
rename from assets/js/d3c0d8d5.67adbe61.js
rename to assets/js/d3c0d8d5.9da80015.js
index 8a0549c62..86442c2ac 100644
--- a/assets/js/d3c0d8d5.67adbe61.js
+++ b/assets/js/d3c0d8d5.9da80015.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[4790],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>b});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retu [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[4790],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>b});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retu [...]
\ No newline at end of file
diff --git a/assets/js/ddccef4c.f60d3538.js b/assets/js/ddccef4c.39c50deb.js
similarity index 91%
rename from assets/js/ddccef4c.f60d3538.js
rename to assets/js/ddccef4c.39c50deb.js
index 31d920936..0a902527f 100644
--- a/assets/js/ddccef4c.f60d3538.js
+++ b/assets/js/ddccef4c.39c50deb.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[9826],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>b});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retu [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[9826],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>k});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retu [...]
\ No newline at end of file
diff --git a/assets/js/e892cec6.4edbe0e3.js b/assets/js/e892cec6.390ac9f3.js
similarity index 90%
rename from assets/js/e892cec6.4edbe0e3.js
rename to assets/js/e892cec6.390ac9f3.js
index 0630a1ef7..3e229a915 100644
--- a/assets/js/e892cec6.4edbe0e3.js
+++ b/assets/js/e892cec6.390ac9f3.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[3845],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>b});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retu [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[3845],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>f});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retu [...]
\ No newline at end of file
diff --git a/assets/js/f1ca5a39.240f3f40.js b/assets/js/f1ca5a39.f143b828.js
similarity index 84%
rename from assets/js/f1ca5a39.240f3f40.js
rename to assets/js/f1ca5a39.f143b828.js
index e70bf8f6e..d21132b94 100644
--- a/assets/js/f1ca5a39.240f3f40.js
+++ b/assets/js/f1ca5a39.f143b828.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[4538],{3905:(e,t,a)=>{a.d(t,{Zo:()=>u,kt:()=>b});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retu [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[4538],{3905:(e,t,a)=>{a.d(t,{Zo:()=>u,kt:()=>b});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}retu [...]
\ No newline at end of file
diff --git a/assets/js/f9145722.167144b5.js b/assets/js/f9145722.292fb506.js
similarity index 99%
rename from assets/js/f9145722.167144b5.js
rename to assets/js/f9145722.292fb506.js
index 0e0897d79..5ac93e1dd 100644
--- a/assets/js/f9145722.167144b5.js
+++ b/assets/js/f9145722.292fb506.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[6529],{3905:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>k});var n=r(7294);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}retu [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[6529],{3905:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>k});var n=r(7294);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}retu [...]
\ No newline at end of file
diff --git a/assets/js/fde7cc64.b541b26c.js b/assets/js/fde7cc64.09092edc.js
similarity index 91%
rename from assets/js/fde7cc64.b541b26c.js
rename to assets/js/fde7cc64.09092edc.js
index c1d7b30d2..3a20da7c8 100644
--- a/assets/js/fde7cc64.b541b26c.js
+++ b/assets/js/fde7cc64.09092edc.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[3454],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>b});var a=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}retu [...]
\ No newline at end of file
+"use strict";(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[3454],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>f});var a=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}retu [...]
\ No newline at end of file
diff --git a/assets/js/main.b461bd80.js b/assets/js/main.b461bd80.js
new file mode 100644
index 000000000..0437ff247
--- /dev/null
+++ b/assets/js/main.b461bd80.js
@@ -0,0 +1,2 @@
+/*! For license information please see main.b461bd80.js.LICENSE.txt */
+(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[179],{723:(e,t,n)=>{"use strict";n.d(t,{Z:()=>p});var r=n(7294),a=n(7462),o=n(8356),i=n.n(o),s=n(6887);const l={"01a85c17":[()=>Promise.all([n.e(532),n.e(4013)]).then(n.bind(n,1223)),"@theme/BlogTagsListPage",1223],"02514dc9":[()=>n.e(7794).then(n.bind(n,9440)),"@site/blog/2023-03-16-opendal-entered-apache-incubator/index.md",9440],"054cd2fb":[()=>Promise.all([n.e(532),n.e(1846)]).then(n.bind(n,1530)),"@site/d [...]
\ No newline at end of file
diff --git a/assets/js/main.b5b973fb.js.LICENSE.txt b/assets/js/main.b461bd80.js.LICENSE.txt
similarity index 100%
rename from assets/js/main.b5b973fb.js.LICENSE.txt
rename to assets/js/main.b461bd80.js.LICENSE.txt
diff --git a/assets/js/main.b5b973fb.js b/assets/js/main.b5b973fb.js
deleted file mode 100644
index d2f7d468d..000000000
--- a/assets/js/main.b5b973fb.js
+++ /dev/null
@@ -1,2 +0,0 @@
-/*! For license information please see main.b5b973fb.js.LICENSE.txt */
-(self.webpackChunkopendal_website=self.webpackChunkopendal_website||[]).push([[179],{723:(e,t,n)=>{"use strict";n.d(t,{Z:()=>p});var r=n(7294),a=n(7462),o=n(8356),i=n.n(o),s=n(6887);const l={"01a85c17":[()=>Promise.all([n.e(532),n.e(4013)]).then(n.bind(n,1223)),"@theme/BlogTagsListPage",1223],"02514dc9":[()=>n.e(7794).then(n.bind(n,9440)),"@site/blog/2023-03-16-opendal-entered-apache-incubator/index.md",9440],"054cd2fb":[()=>Promise.all([n.e(532),n.e(1846)]).then(n.bind(n,1530)),"@site/d [...]
\ No newline at end of file
diff --git a/assets/js/runtime~main.23901fca.js b/assets/js/runtime~main.23901fca.js
new file mode 100644
index 000000000..b9bf682a4
--- /dev/null
+++ b/assets/js/runtime~main.23901fca.js
@@ -0,0 +1 @@
+(()=>{"use strict";var e,c,a,f,b,d={},t={};function r(e){var c=t[e];if(void 0!==c)return c.exports;var a=t[e]={exports:{}};return d[e].call(a.exports,a,a.exports,r),a.exports}r.m=d,e=[],r.O=(c,a,f,b)=>{if(!a){var d=1/0;for(i=0;i<e.length;i++){a=e[i][0],f=e[i][1],b=e[i][2];for(var t=!0,o=0;o<a.length;o++)(!1&b||d>=b)&&Object.keys(r.O).every((e=>r.O[e](a[o])))?a.splice(o--,1):(t=!1,b<d&&(d=b));if(t){e.splice(i--,1);var n=f();void 0!==n&&(c=n)}}return c}b=b||0;for(var i=e.length;i>0&&e[i-1] [...]
\ No newline at end of file
diff --git a/assets/js/runtime~main.e8c8dc66.js b/assets/js/runtime~main.e8c8dc66.js
deleted file mode 100644
index d68605820..000000000
--- a/assets/js/runtime~main.e8c8dc66.js
+++ /dev/null
@@ -1 +0,0 @@
-(()=>{"use strict";var e,a,c,b,f,d={},t={};function r(e){var a=t[e];if(void 0!==a)return a.exports;var c=t[e]={exports:{}};return d[e].call(c.exports,c,c.exports,r),c.exports}r.m=d,e=[],r.O=(a,c,b,f)=>{if(!c){var d=1/0;for(i=0;i<e.length;i++){c=e[i][0],b=e[i][1],f=e[i][2];for(var t=!0,o=0;o<c.length;o++)(!1&f||d>=f)&&Object.keys(r.O).every((e=>r.O[e](c[o])))?c.splice(o--,1):(t=!1,f<d&&(d=f));if(t){e.splice(i--,1);var n=b();void 0!==n&&(a=n)}}return a}f=f||0;for(var i=e.length;i>0&&e[i-1] [...]
\ No newline at end of file
diff --git a/blog/archive/index.html b/blog/archive/index.html
index d7f060f7b..f6efcd336 100644
--- a/blog/archive/index.html
+++ b/blog/archive/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">Archive | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/blog/archive"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docusaurus_tag" content="default"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="t [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.e8c8dc66.js" as="script">
-<link rel="preload" href="/assets/js/main.b5b973fb.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.23901fca.js" as="script">
+<link rel="preload" href="/assets/js/main.b461bd80.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
 <div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.e8c8dc66.js"></script>
-<script src="/assets/js/main.b5b973fb.js"></script>
+<script src="/assets/js/runtime~main.23901fca.js"></script>
+<script src="/assets/js/main.b461bd80.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/blog/how-opendal-read-data/index.html b/blog/how-opendal-read-data/index.html
index 334c9d4ae..850920ae2 100644
--- a/blog/how-opendal-read-data/index.html
+++ b/blog/how-opendal-read-data/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">OpenDAL Internal: Data Reading | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/blog/how-opendal-read-data"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docusaurus_tag" content="default"><meta data-rh="true" name="docsearch:la [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.e8c8dc66.js" as="script">
-<link rel="preload" href="/assets/js/main.b5b973fb.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.23901fca.js" as="script">
+<link rel="preload" href="/assets/js/main.b461bd80.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
 <div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.e8c8dc66.js"></script>
-<script src="/assets/js/main.b5b973fb.js"></script>
+<script src="/assets/js/runtime~main.23901fca.js"></script>
+<script src="/assets/js/main.b461bd80.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/blog/index.html b/blog/index.html
index f6d26022e..b5f6bea96 100644
--- a/blog/index.html
+++ b/blog/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">Blog | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/blog"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" property="og:title" content="Blog | Apache OpenDAL"><meta data-rh=" [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.e8c8dc66.js" as="script">
-<link rel="preload" href="/assets/js/main.b5b973fb.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.23901fca.js" as="script">
+<link rel="preload" href="/assets/js/main.b461bd80.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
 <div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.e8c8dc66.js"></script>
-<script src="/assets/js/main.b5b973fb.js"></script>
+<script src="/assets/js/runtime~main.23901fca.js"></script>
+<script src="/assets/js/main.b461bd80.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/blog/opendal-access-data-freely/index.html b/blog/opendal-access-data-freely/index.html
index edb2e4033..ea096f04f 100644
--- a/blog/opendal-access-data-freely/index.html
+++ b/blog/opendal-access-data-freely/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">Apache OpenDAL(Incubating): Access Data Freely | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/blog/opendal-access-data-freely"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docusaurus_tag" content="default"><meta data-rh="tru [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.e8c8dc66.js" as="script">
-<link rel="preload" href="/assets/js/main.b5b973fb.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.23901fca.js" as="script">
+<link rel="preload" href="/assets/js/main.b461bd80.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
 <div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.e8c8dc66.js"></script>
-<script src="/assets/js/main.b5b973fb.js"></script>
+<script src="/assets/js/runtime~main.23901fca.js"></script>
+<script src="/assets/js/main.b461bd80.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/blog/opendal-entered-apache-incubator/index.html b/blog/opendal-entered-apache-incubator/index.html
index 6e231fb34..0d502b390 100644
--- a/blog/opendal-entered-apache-incubator/index.html
+++ b/blog/opendal-entered-apache-incubator/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">Way to Go: OpenDAL successfully entered Apache Incubator | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/blog/opendal-entered-apache-incubator"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docusaurus_tag" content="default"><m [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.e8c8dc66.js" as="script">
-<link rel="preload" href="/assets/js/main.b5b973fb.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.23901fca.js" as="script">
+<link rel="preload" href="/assets/js/main.b461bd80.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
 <div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.e8c8dc66.js"></script>
-<script src="/assets/js/main.b5b973fb.js"></script>
+<script src="/assets/js/runtime~main.23901fca.js"></script>
+<script src="/assets/js/main.b461bd80.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/blog/owo-1/index.html b/blog/owo-1/index.html
index aabc77c91..fcc581751 100644
--- a/blog/owo-1/index.html
+++ b/blog/owo-1/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">OwO #1: The v0.40 Release | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/blog/owo-1"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docusaurus_tag" content="default"><meta data-rh="true" name="docsearch:language" content="en"> [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.e8c8dc66.js" as="script">
-<link rel="preload" href="/assets/js/main.b5b973fb.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.23901fca.js" as="script">
+<link rel="preload" href="/assets/js/main.b461bd80.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
 <div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.e8c8dc66.js"></script>
-<script src="/assets/js/main.b5b973fb.js"></script>
+<script src="/assets/js/runtime~main.23901fca.js"></script>
+<script src="/assets/js/main.b461bd80.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/blog/tags/announcement/index.html b/blog/tags/announcement/index.html
index 3cca22a2a..54dec9de9 100644
--- a/blog/tags/announcement/index.html
+++ b/blog/tags/announcement/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">2 posts tagged with &quot;announcement&quot; | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/blog/tags/announcement"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" property= [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.e8c8dc66.js" as="script">
-<link rel="preload" href="/assets/js/main.b5b973fb.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.23901fca.js" as="script">
+<link rel="preload" href="/assets/js/main.b461bd80.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
 <div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.e8c8dc66.js"></script>
-<script src="/assets/js/main.b5b973fb.js"></script>
+<script src="/assets/js/runtime~main.23901fca.js"></script>
+<script src="/assets/js/main.b461bd80.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/blog/tags/index.html b/blog/tags/index.html
index 197b17f71..bc9c42dda 100644
--- a/blog/tags/index.html
+++ b/blog/tags/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">Tags | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/blog/tags"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" property="og:title" content="Tags | Apache OpenDAL"><meta data [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.e8c8dc66.js" as="script">
-<link rel="preload" href="/assets/js/main.b5b973fb.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.23901fca.js" as="script">
+<link rel="preload" href="/assets/js/main.b461bd80.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
 <div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.e8c8dc66.js"></script>
-<script src="/assets/js/main.b5b973fb.js"></script>
+<script src="/assets/js/runtime~main.23901fca.js"></script>
+<script src="/assets/js/main.b461bd80.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/blog/tags/internal/index.html b/blog/tags/internal/index.html
index 73a4a6798..1edf82c9e 100644
--- a/blog/tags/internal/index.html
+++ b/blog/tags/internal/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">One post tagged with &quot;internal&quot; | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/blog/tags/internal"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" property="og:tit [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.e8c8dc66.js" as="script">
-<link rel="preload" href="/assets/js/main.b5b973fb.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.23901fca.js" as="script">
+<link rel="preload" href="/assets/js/main.b461bd80.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
 <div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.e8c8dc66.js"></script>
-<script src="/assets/js/main.b5b973fb.js"></script>
+<script src="/assets/js/runtime~main.23901fca.js"></script>
+<script src="/assets/js/main.b461bd80.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/blog/tags/owo/index.html b/blog/tags/owo/index.html
index 89af0eef7..2ee0fa854 100644
--- a/blog/tags/owo/index.html
+++ b/blog/tags/owo/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">One post tagged with &quot;owo&quot; | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/blog/tags/owo"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" property="og:title" conten [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.e8c8dc66.js" as="script">
-<link rel="preload" href="/assets/js/main.b5b973fb.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.23901fca.js" as="script">
+<link rel="preload" href="/assets/js/main.b461bd80.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
 <div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.e8c8dc66.js"></script>
-<script src="/assets/js/main.b5b973fb.js"></script>
+<script src="/assets/js/runtime~main.23901fca.js"></script>
+<script src="/assets/js/main.b461bd80.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/community/category/committers/index.html b/community/category/committers/index.html
index b2fee9176..6817ce957 100644
--- a/community/category/committers/index.html
+++ b/community/category/committers/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">Committers | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/community/category/committers"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="c [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.e8c8dc66.js" as="script">
-<link rel="preload" href="/assets/js/main.b5b973fb.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.23901fca.js" as="script">
+<link rel="preload" href="/assets/js/main.b461bd80.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
 <div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.e8c8dc66.js"></script>
-<script src="/assets/js/main.b5b973fb.js"></script>
+<script src="/assets/js/runtime~main.23901fca.js"></script>
+<script src="/assets/js/main.b461bd80.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/community/category/reference/index.html b/community/category/reference/index.html
index c2e7bb765..7633a0711 100644
--- a/community/category/reference/index.html
+++ b/community/category/reference/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">Reference | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/community/category/reference"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="cur [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.e8c8dc66.js" as="script">
-<link rel="preload" href="/assets/js/main.b5b973fb.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.23901fca.js" as="script">
+<link rel="preload" href="/assets/js/main.b461bd80.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
 <div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.e8c8dc66.js"></script>
-<script src="/assets/js/main.b5b973fb.js"></script>
+<script src="/assets/js/runtime~main.23901fca.js"></script>
+<script src="/assets/js/main.b461bd80.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/community/committers/committer/index.html b/community/committers/committer/index.html
index e5953daf6..b4ca17393 100644
--- a/community/committers/committer/index.html
+++ b/community/committers/committer/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">Committer onboarding | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/community/committers/committer"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.e8c8dc66.js" as="script">
-<link rel="preload" href="/assets/js/main.b5b973fb.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.23901fca.js" as="script">
+<link rel="preload" href="/assets/js/main.b461bd80.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
 <div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.e8c8dc66.js"></script>
-<script src="/assets/js/main.b5b973fb.js"></script>
+<script src="/assets/js/runtime~main.23901fca.js"></script>
+<script src="/assets/js/main.b461bd80.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/community/committers/podling-report/index.html b/community/committers/podling-report/index.html
index 4195476df..061d3aeab 100644
--- a/community/committers/podling-report/index.html
+++ b/community/committers/podling-report/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">Podling status reports | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/community/committers/podling-report"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_v [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.e8c8dc66.js" as="script">
-<link rel="preload" href="/assets/js/main.b5b973fb.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.23901fca.js" as="script">
+<link rel="preload" href="/assets/js/main.b461bd80.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
 <div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.e8c8dc66.js"></script>
-<script src="/assets/js/main.b5b973fb.js"></script>
+<script src="/assets/js/runtime~main.23901fca.js"></script>
+<script src="/assets/js/main.b461bd80.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/community/committers/reference/generate_release_note/index.html b/community/committers/reference/generate_release_note/index.html
index dbb53e456..39b65b847 100644
--- a/community/committers/reference/generate_release_note/index.html
+++ b/community/committers/reference/generate_release_note/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">Generate release note | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/community/committers/reference/generate_release_note"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" na [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.e8c8dc66.js" as="script">
-<link rel="preload" href="/assets/js/main.b5b973fb.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.23901fca.js" as="script">
+<link rel="preload" href="/assets/js/main.b461bd80.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
 <div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.e8c8dc66.js"></script>
-<script src="/assets/js/main.b5b973fb.js"></script>
+<script src="/assets/js/runtime~main.23901fca.js"></script>
+<script src="/assets/js/main.b461bd80.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/community/committers/reference/setup_gpg/index.html b/community/committers/reference/setup_gpg/index.html
index 222f6846b..7ac2fca04 100644
--- a/community/committers/reference/setup_gpg/index.html
+++ b/community/committers/reference/setup_gpg/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">Setup GPG key | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/community/committers/reference/setup_gpg"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_versi [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.e8c8dc66.js" as="script">
-<link rel="preload" href="/assets/js/main.b5b973fb.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.23901fca.js" as="script">
+<link rel="preload" href="/assets/js/main.b461bd80.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
 <div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.e8c8dc66.js"></script>
-<script src="/assets/js/main.b5b973fb.js"></script>
+<script src="/assets/js/runtime~main.23901fca.js"></script>
+<script src="/assets/js/main.b461bd80.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/community/committers/release/index.html b/community/committers/release/index.html
index 2c4bba6b3..e3761d9a6 100644
--- a/community/committers/release/index.html
+++ b/community/committers/release/index.html
@@ -5,8 +5,8 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">Create a OpenDAL Release | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/community/committers/release"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_versio [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.e8c8dc66.js" as="script">
-<link rel="preload" href="/assets/js/main.b5b973fb.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.23901fca.js" as="script">
+<link rel="preload" href="/assets/js/main.b461bd80.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
@@ -20,7 +20,7 @@ please cancel the release for the current <code>release_version</code>,
 <em>increase th RC counting</em> and re-initiate a release with the new <code>release_version</code>.
 And remember to delete the wrong artifacts from the SVN dist repo.
 Additionally, you should also drop the staging Maven artifacts on <a href="https://repository.apache.org" target="_blank" rel="noopener noreferrer">https://repository.apache.org</a>.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="voting">Voting<a href="#voting" class="hash-link" aria-label="Direct link to Voting" title="Direct link to Voting">​</a></h2><p>As an incubating project, OpenDAL requires votes from both the OpenDAL Community and Incubator Community.</p><h3 class="anchor  [...]
-<script src="/assets/js/runtime~main.e8c8dc66.js"></script>
-<script src="/assets/js/main.b5b973fb.js"></script>
+<script src="/assets/js/runtime~main.23901fca.js"></script>
+<script src="/assets/js/main.b461bd80.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/community/committers/verify/index.html b/community/committers/verify/index.html
index 0955f25bf..57420810d 100644
--- a/community/committers/verify/index.html
+++ b/community/committers/verify/index.html
@@ -5,15 +5,15 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">Verify a release candidate | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/community/committers/verify"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_versi [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.e8c8dc66.js" as="script">
-<link rel="preload" href="/assets/js/main.b5b973fb.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.23901fca.js" as="script">
+<link rel="preload" href="/assets/js/main.b461bd80.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
 <div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
 You can download it directly from <a href="https://raw.githubusercontent.com/apache/incubator-opendal/main/scripts/check.sh" target="_blank" rel="noopener noreferrer">here</a>
 or check it out from the repository:</p><div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token function" style="color:#d73a49">git</span><span class="token plain"> clone git@github.com:apache/incuba [...]
-<script src="/assets/js/runtime~main.e8c8dc66.js"></script>
-<script src="/assets/js/main.b5b973fb.js"></script>
+<script src="/assets/js/runtime~main.23901fca.js"></script>
+<script src="/assets/js/main.b461bd80.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/community/index.html b/community/index.html
index 50f46018b..8370b9357 100644
--- a/community/index.html
+++ b/community/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">Community | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/community/"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data-r [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.e8c8dc66.js" as="script">
-<link rel="preload" href="/assets/js/main.b5b973fb.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.23901fca.js" as="script">
+<link rel="preload" href="/assets/js/main.b461bd80.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
 <div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.e8c8dc66.js"></script>
-<script src="/assets/js/main.b5b973fb.js"></script>
+<script src="/assets/js/runtime~main.23901fca.js"></script>
+<script src="/assets/js/main.b461bd80.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/category/services/index.html b/docs/category/services/index.html
index 5ce814a11..68283a229 100644
--- a/docs/category/services/index.html
+++ b/docs/category/services/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">Services | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/category/services"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current">< [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.e8c8dc66.js" as="script">
-<link rel="preload" href="/assets/js/main.b5b973fb.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.23901fca.js" as="script">
+<link rel="preload" href="/assets/js/main.b461bd80.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.e8c8dc66.js"></script>
-<script src="/assets/js/main.b5b973fb.js"></script>
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
+<script src="/assets/js/runtime~main.23901fca.js"></script>
+<script src="/assets/js/main.b461bd80.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/lua/classes/opendal.metadata.html b/docs/lua/classes/opendal.metadata.html
index 39b291c96..b8d702f46 100644
--- a/docs/lua/classes/opendal.metadata.html
+++ b/docs/lua/classes/opendal.metadata.html
@@ -138,7 +138,7 @@
 </div> <!-- id="main" -->
 <div id="about">
 <i>generated by <a href="http://github.com/stevedonovan/LDoc">LDoc 1.4.6</a></i>
-<i style="float:right;">Last updated 2023-11-01 11:30:33 </i>
+<i style="float:right;">Last updated 2023-11-01 11:50:45 </i>
 </div> <!-- id="about" -->
 </div> <!-- id="container" -->
 </body>
diff --git a/docs/lua/classes/opendal.operator.html b/docs/lua/classes/opendal.operator.html
index 88037343d..75af1e6f6 100644
--- a/docs/lua/classes/opendal.operator.html
+++ b/docs/lua/classes/opendal.operator.html
@@ -321,7 +321,7 @@
 </div> <!-- id="main" -->
 <div id="about">
 <i>generated by <a href="http://github.com/stevedonovan/LDoc">LDoc 1.4.6</a></i>
-<i style="float:right;">Last updated 2023-11-01 11:30:33 </i>
+<i style="float:right;">Last updated 2023-11-01 11:50:45 </i>
 </div> <!-- id="about" -->
 </div> <!-- id="container" -->
 </body>
diff --git a/docs/lua/index.html b/docs/lua/index.html
index 2332adc75..8df7309f3 100644
--- a/docs/lua/index.html
+++ b/docs/lua/index.html
@@ -57,7 +57,7 @@
 </div> <!-- id="main" -->
 <div id="about">
 <i>generated by <a href="http://github.com/stevedonovan/LDoc">LDoc 1.4.6</a></i>
-<i style="float:right;">Last updated 2023-11-01 11:30:33 </i>
+<i style="float:right;">Last updated 2023-11-01 11:50:45 </i>
 </div> <!-- id="about" -->
 </div> <!-- id="container" -->
 </body>
diff --git a/docs/nodejs/classes/BlockingLister.html b/docs/nodejs/classes/BlockingLister.html
index b4eb0476f..971ce31ac 100644
--- a/docs/nodejs/classes/BlockingLister.html
+++ b/docs/nodejs/classes/BlockingLister.html
@@ -20,7 +20,7 @@
 <ul class="tsd-hierarchy">
 <li><span class="target">BlockingLister</span></li></ul></section><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/0db2fe5/bindings/nodejs/index.d.ts#L435">index.d.ts:435</a></li></ul></aside>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/0721a6e/bindings/nodejs/index.d.ts#L435">index.d.ts:435</a></li></ul></aside>
 <section class="tsd-panel-group tsd-index-group">
 <section class="tsd-panel tsd-index-panel">
 <details class="tsd-index-content tsd-index-accordion" open><summary class="tsd-accordion-summary tsd-index-summary">
@@ -51,7 +51,7 @@
 <li class="tsd-description">
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">null</span><span class="tsd-signature-symbol"> | </span><a href="Entry.html" class="tsd-signature-type tsd-kind-class">Entry</a></h4><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/0db2fe5/bindings/nodejs/index.d.ts#L436">index.d.ts:436</a></li></ul></aside></li></ul></section></section></div>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/0721a6e/bindings/nodejs/index.d.ts#L436">index.d.ts:436</a></li></ul></aside></li></ul></section></section></div>
 <div class="col-sidebar">
 <div class="page-menu">
 <div class="tsd-navigation settings">
diff --git a/docs/nodejs/classes/Entry.html b/docs/nodejs/classes/Entry.html
index 06b10373c..318e2ebbb 100644
--- a/docs/nodejs/classes/Entry.html
+++ b/docs/nodejs/classes/Entry.html
@@ -20,7 +20,7 @@
 <ul class="tsd-hierarchy">
 <li><span class="target">Entry</span></li></ul></section><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/0db2fe5/bindings/nodejs/index.d.ts#L398">index.d.ts:398</a></li></ul></aside>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/0721a6e/bindings/nodejs/index.d.ts#L398">index.d.ts:398</a></li></ul></aside>
 <section class="tsd-panel-group tsd-index-group">
 <section class="tsd-panel tsd-index-panel">
 <details class="tsd-index-content tsd-index-accordion" open><summary class="tsd-accordion-summary tsd-index-summary">
@@ -54,7 +54,7 @@
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">string</span></h4>
 <div class="tsd-comment tsd-typography"></div><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/0db2fe5/bindings/nodejs/index.d.ts#L400">index.d.ts:400</a></li></ul></aside></li></ul></section></section></div>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/0721a6e/bindings/nodejs/index.d.ts#L400">index.d.ts:400</a></li></ul></aside></li></ul></section></section></div>
 <div class="col-sidebar">
 <div class="page-menu">
 <div class="tsd-navigation settings">
diff --git a/docs/nodejs/classes/Lister.html b/docs/nodejs/classes/Lister.html
index 53aca3cc3..ac201e74a 100644
--- a/docs/nodejs/classes/Lister.html
+++ b/docs/nodejs/classes/Lister.html
@@ -20,7 +20,7 @@
 <ul class="tsd-hierarchy">
 <li><span class="target">Lister</span></li></ul></section><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/0db2fe5/bindings/nodejs/index.d.ts#L424">index.d.ts:424</a></li></ul></aside>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/0721a6e/bindings/nodejs/index.d.ts#L424">index.d.ts:424</a></li></ul></aside>
 <section class="tsd-panel-group tsd-index-group">
 <section class="tsd-panel tsd-index-panel">
 <details class="tsd-index-content tsd-index-accordion" open><summary class="tsd-accordion-summary tsd-index-summary">
@@ -58,7 +58,7 @@ thing internally.</p>
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">null</span><span class="tsd-signature-symbol"> | </span><a href="Entry.html" class="tsd-signature-type tsd-kind-class">Entry</a><span class="tsd-signature-symbol">&gt;</span></h4>
 <div class="tsd-comment tsd-typography"></div><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/0db2fe5/bindings/nodejs/index.d.ts#L433">index.d.ts:433</a></li></ul></aside></li></ul></section></section></div>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/0721a6e/bindings/nodejs/index.d.ts#L433">index.d.ts:433</a></li></ul></aside></li></ul></section></section></div>
 <div class="col-sidebar">
 <div class="page-menu">
 <div class="tsd-navigation settings">
diff --git a/docs/nodejs/classes/Metadata.html b/docs/nodejs/classes/Metadata.html
index 28df660de..037ef8c4b 100644
--- a/docs/nodejs/classes/Metadata.html
+++ b/docs/nodejs/classes/Metadata.html
@@ -20,7 +20,7 @@
 <ul class="tsd-hierarchy">
 <li><span class="target">Metadata</span></li></ul></section><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/0db2fe5/bindings/nodejs/index.d.ts#L402">index.d.ts:402</a></li></ul></aside>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/0721a6e/bindings/nodejs/index.d.ts#L402">index.d.ts:402</a></li></ul></aside>
 <section class="tsd-panel-group tsd-index-group">
 <section class="tsd-panel tsd-index-panel">
 <details class="tsd-index-content tsd-index-accordion" open><summary class="tsd-accordion-summary tsd-index-summary">
@@ -64,7 +64,7 @@
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">null</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">string</span></h4>
 <div class="tsd-comment tsd-typography"></div><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/0db2fe5/bindings/nodejs/index.d.ts#L408">index.d.ts:408</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/0721a6e/bindings/nodejs/index.d.ts#L408">index.d.ts:408</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member"><a id="contentLength" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>content<wbr/>Length</span><a href="#contentLength" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="#icon-anchor"></use></svg></a></h3>
 <ul class="tsd-signatures">
@@ -75,7 +75,7 @@
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">null</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">bigint</span></h4>
 <div class="tsd-comment tsd-typography"></div><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/0db2fe5/bindings/nodejs/index.d.ts#L410">index.d.ts:410</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/0721a6e/bindings/nodejs/index.d.ts#L410">index.d.ts:410</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member"><a id="contentMd5" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>content<wbr/>Md5</span><a href="#contentMd5" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="#icon-anchor"></use></svg></a></h3>
 <ul class="tsd-signatures">
@@ -86,7 +86,7 @@
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">null</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">string</span></h4>
 <div class="tsd-comment tsd-typography"></div><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/0db2fe5/bindings/nodejs/index.d.ts#L412">index.d.ts:412</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/0721a6e/bindings/nodejs/index.d.ts#L412">index.d.ts:412</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member"><a id="contentType" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>content<wbr/>Type</span><a href="#contentType" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="#icon-anchor"></use></svg></a></h3>
 <ul class="tsd-signatures">
@@ -97,7 +97,7 @@
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">null</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">string</span></h4>
 <div class="tsd-comment tsd-typography"></div><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/0db2fe5/bindings/nodejs/index.d.ts#L414">index.d.ts:414</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/0721a6e/bindings/nodejs/index.d.ts#L414">index.d.ts:414</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member"><a id="etag" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>etag</span><a href="#etag" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="#icon-anchor"></use></svg></a></h3>
 <ul class="tsd-signatures">
@@ -108,7 +108,7 @@
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">null</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">string</span></h4>
 <div class="tsd-comment tsd-typography"></div><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/0db2fe5/bindings/nodejs/index.d.ts#L416">index.d.ts:416</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/0721a6e/bindings/nodejs/index.d.ts#L416">index.d.ts:416</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member"><a id="lastModified" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>last<wbr/>Modified</span><a href="#lastModified" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="#icon-anchor"></use></svg></a></h3>
 <ul class="tsd-signatures">
@@ -120,7 +120,7 @@
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">null</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-type">string</span></h4>
 <div class="tsd-comment tsd-typography"></div><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/0db2fe5/bindings/nodejs/index.d.ts#L422">index.d.ts:422</a></li></ul></aside></li></ul></section></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/0721a6e/bindings/nodejs/index.d.ts#L422">index.d.ts:422</a></li></ul></aside></li></ul></section></section>
 <section class="tsd-panel-group tsd-member-group">
 <h2>Methods</h2>
 <section class="tsd-panel tsd-member"><a id="isDirectory" class="tsd-anchor"></a>
@@ -133,7 +133,7 @@
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4>
 <div class="tsd-comment tsd-typography"></div><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/0db2fe5/bindings/nodejs/index.d.ts#L404">index.d.ts:404</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/0721a6e/bindings/nodejs/index.d.ts#L404">index.d.ts:404</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member"><a id="isFile" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>is<wbr/>File</span><a href="#isFile" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="#icon-anchor"></use></svg></a></h3>
 <ul class="tsd-signatures">
@@ -144,7 +144,7 @@
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4>
 <div class="tsd-comment tsd-typography"></div><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/0db2fe5/bindings/nodejs/index.d.ts#L406">index.d.ts:406</a></li></ul></aside></li></ul></section></section></div>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/0721a6e/bindings/nodejs/index.d.ts#L406">index.d.ts:406</a></li></ul></aside></li></ul></section></section></div>
 <div class="col-sidebar">
 <div class="page-menu">
 <div class="tsd-navigation settings">
diff --git a/docs/nodejs/classes/Operator.html b/docs/nodejs/classes/Operator.html
index d25d63e39..2bd10ae97 100644
--- a/docs/nodejs/classes/Operator.html
+++ b/docs/nodejs/classes/Operator.html
@@ -20,7 +20,7 @@
 <ul class="tsd-hierarchy">
 <li><span class="target">Operator</span></li></ul></section><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/0db2fe5/bindings/nodejs/index.d.ts#L33">index.d.ts:33</a></li></ul></aside>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/0721a6e/bindings/nodejs/index.d.ts#L33">index.d.ts:33</a></li></ul></aside>
 <section class="tsd-panel-group tsd-index-group">
 <section class="tsd-panel tsd-index-panel">
 <details class="tsd-index-content tsd-index-accordion" open><summary class="tsd-accordion-summary tsd-index-summary">
@@ -79,7 +79,7 @@
 <h4>See</h4><p>For a detailed definition of scheme, see <a href="https://opendal.apache.org/docs/category/services">https://opendal.apache.org/docs/category/services</a></p>
 </div><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/0db2fe5/bindings/nodejs/index.d.ts#L35">index.d.ts:35</a></li></ul></aside></li></ul></section></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/0721a6e/bindings/nodejs/index.d.ts#L35">index.d.ts:35</a></li></ul></aside></li></ul></section></section>
 <section class="tsd-panel-group tsd-member-group">
 <h2>Methods</h2>
 <section class="tsd-panel tsd-member"><a id="append" class="tsd-anchor"></a>
@@ -105,7 +105,7 @@
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">&gt;</span></h4>
 <div class="tsd-comment tsd-typography"></div><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/0db2fe5/bindings/nodejs/index.d.ts#L170">index.d.ts:170</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/0721a6e/bindings/nodejs/index.d.ts#L170">index.d.ts:170</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member"><a id="check" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>check</span><a href="#check" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="#icon-anchor"></use></svg></a></h3>
 <ul class="tsd-signatures">
@@ -119,7 +119,7 @@
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">&gt;</span></h4>
 <div class="tsd-comment tsd-typography"></div><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/0db2fe5/bindings/nodejs/index.d.ts#L78">index.d.ts:78</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/0721a6e/bindings/nodejs/index.d.ts#L78">index.d.ts:78</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member"><a id="copy" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>copy</span><a href="#copy" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="#icon-anchor"></use></svg></a></h3>
 <ul class="tsd-signatures">
@@ -139,7 +139,7 @@
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">&gt;</span></h4>
 <div class="tsd-comment tsd-typography"></div><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/0db2fe5/bindings/nodejs/index.d.ts#L179">index.d.ts:179</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/0721a6e/bindings/nodejs/index.d.ts#L179">index.d.ts:179</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member"><a id="copySync" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>copy<wbr/>Sync</span><a href="#copySync" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="#icon-anchor"></use></svg></a></h3>
 <ul class="tsd-signatures">
@@ -159,7 +159,7 @@
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">void</span></h4>
 <div class="tsd-comment tsd-typography"></div><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/0db2fe5/bindings/nodejs/index.d.ts#L188">index.d.ts:188</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/0721a6e/bindings/nodejs/index.d.ts#L188">index.d.ts:188</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member"><a id="createDir" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>create<wbr/>Dir</span><a href="#createDir" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="#icon-anchor"></use></svg></a></h3>
 <ul class="tsd-signatures">
@@ -177,7 +177,7 @@
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">&gt;</span></h4>
 <div class="tsd-comment tsd-typography"></div><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/0db2fe5/bindings/nodejs/index.d.ts#L105">index.d.ts:105</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/0721a6e/bindings/nodejs/index.d.ts#L105">index.d.ts:105</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member"><a id="createDirSync" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>create<wbr/>Dir<wbr/>Sync</span><a href="#createDirSync" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="#icon-anchor"></use></svg></a></h3>
 <ul class="tsd-signatures">
@@ -195,7 +195,7 @@
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">void</span></h4>
 <div class="tsd-comment tsd-typography"></div><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/0db2fe5/bindings/nodejs/index.d.ts#L114">index.d.ts:114</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/0721a6e/bindings/nodejs/index.d.ts#L114">index.d.ts:114</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member"><a id="delete" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>delete</span><a href="#delete" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="#icon-anchor"></use></svg></a></h3>
 <ul class="tsd-signatures">
@@ -214,7 +214,7 @@
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">&gt;</span></h4>
 <div class="tsd-comment tsd-typography"></div><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/0db2fe5/bindings/nodejs/index.d.ts#L269">index.d.ts:269</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/0721a6e/bindings/nodejs/index.d.ts#L269">index.d.ts:269</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member"><a id="deleteSync" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>delete<wbr/>Sync</span><a href="#deleteSync" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="#icon-anchor"></use></svg></a></h3>
 <ul class="tsd-signatures">
@@ -232,7 +232,7 @@
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">void</span></h4>
 <div class="tsd-comment tsd-typography"></div><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/0db2fe5/bindings/nodejs/index.d.ts#L278">index.d.ts:278</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/0721a6e/bindings/nodejs/index.d.ts#L278">index.d.ts:278</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member"><a id="isExist" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>is<wbr/>Exist</span><a href="#isExist" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="#icon-anchor"></use></svg></a></h3>
 <ul class="tsd-signatures">
@@ -250,7 +250,7 @@
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">boolean</span><span class="tsd-signature-symbol">&gt;</span></h4>
 <div class="tsd-comment tsd-typography"></div><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/0db2fe5/bindings/nodejs/index.d.ts#L87">index.d.ts:87</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/0721a6e/bindings/nodejs/index.d.ts#L87">index.d.ts:87</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member"><a id="isExistSync" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>is<wbr/>Exist<wbr/>Sync</span><a href="#isExistSync" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="#icon-anchor"></use></svg></a></h3>
 <ul class="tsd-signatures">
@@ -268,7 +268,7 @@
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">boolean</span></h4>
 <div class="tsd-comment tsd-typography"></div><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/0db2fe5/bindings/nodejs/index.d.ts#L96">index.d.ts:96</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/0721a6e/bindings/nodejs/index.d.ts#L96">index.d.ts:96</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member"><a id="list" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>list</span><a href="#list" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="#icon-anchor"></use></svg></a></h3>
 <ul class="tsd-signatures">
@@ -288,7 +288,7 @@
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Promise</span><span class="tsd-signature-symbol">&lt;</span><a href="Lister.html" class="tsd-signature-type tsd-kind-class">Lister</a><span class="tsd-signature-symbol">&gt;</span></h4>
 <div class="tsd-comment tsd-typography"></div><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/0db2fe5/bindings/nodejs/index.d.ts#L325">index.d.ts:325</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/0721a6e/bindings/nodejs/index.d.ts#L325">index.d.ts:325</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member"><a id="listSync" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>list<wbr/>Sync</span><a href="#listSync" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="#icon-anchor"></use></svg></a></h3>
 <ul class="tsd-signatures">
@@ -308,7 +308,7 @@
 <h4 class="tsd-returns-title">Returns <a href="BlockingLister.html" class="tsd-signature-type tsd-kind-class">BlockingLister</a></h4>
 <div class="tsd-comment tsd-typography"></div><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/0db2fe5/bindings/nodejs/index.d.ts#L348">index.d.ts:348</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/0721a6e/bindings/nodejs/index.d.ts#L348">index.d.ts:348</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member"><a id="presignRead" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>presign<wbr/>Read</span><a href="#presignRead" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="#icon-anchor"></use></svg></a></h3>
 <ul class="tsd-signatures">
@@ -329,7 +329,7 @@
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Promise</span><span class="tsd-signature-symbol">&lt;</span><a href="../interfaces/PresignedRequest.html" class="tsd-signature-type tsd-kind-interface">PresignedRequest</a><span class="tsd-signature-symbol">&gt;</span></h4>
 <div class="tsd-comment tsd-typography"></div><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/0db2fe5/bindings/nodejs/index.d.ts#L364">index.d.ts:364</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/0721a6e/bindings/nodejs/index.d.ts#L364">index.d.ts:364</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member"><a id="presignStat" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>presign<wbr/>Stat</span><a href="#presignStat" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="#icon-anchor"></use></svg></a></h3>
 <ul class="tsd-signatures">
@@ -350,7 +350,7 @@
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Promise</span><span class="tsd-signature-symbol">&lt;</span><a href="../interfaces/PresignedRequest.html" class="tsd-signature-type tsd-kind-interface">PresignedRequest</a><span class="tsd-signature-symbol">&gt;</span></h4>
 <div class="tsd-comment tsd-typography"></div><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/0db2fe5/bindings/nodejs/index.d.ts#L396">index.d.ts:396</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/0721a6e/bindings/nodejs/index.d.ts#L396">index.d.ts:396</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member"><a id="presignWrite" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>presign<wbr/>Write</span><a href="#presignWrite" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="#icon-anchor"></use></svg></a></h3>
 <ul class="tsd-signatures">
@@ -371,7 +371,7 @@
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Promise</span><span class="tsd-signature-symbol">&lt;</span><a href="../interfaces/PresignedRequest.html" class="tsd-signature-type tsd-kind-interface">PresignedRequest</a><span class="tsd-signature-symbol">&gt;</span></h4>
 <div class="tsd-comment tsd-typography"></div><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/0db2fe5/bindings/nodejs/index.d.ts#L380">index.d.ts:380</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/0721a6e/bindings/nodejs/index.d.ts#L380">index.d.ts:380</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member"><a id="read" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>read</span><a href="#read" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="#icon-anchor"></use></svg></a></h3>
 <ul class="tsd-signatures">
@@ -389,7 +389,7 @@
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type ">Buffer</span><span class="tsd-signature-symbol">&gt;</span></h4>
 <div class="tsd-comment tsd-typography"></div><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/0db2fe5/bindings/nodejs/index.d.ts#L123">index.d.ts:123</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/0721a6e/bindings/nodejs/index.d.ts#L123">index.d.ts:123</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member"><a id="readSync" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>read<wbr/>Sync</span><a href="#readSync" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="#icon-anchor"></use></svg></a></h3>
 <ul class="tsd-signatures">
@@ -407,7 +407,7 @@
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Buffer</span></h4>
 <div class="tsd-comment tsd-typography"></div><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/0db2fe5/bindings/nodejs/index.d.ts#L132">index.d.ts:132</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/0721a6e/bindings/nodejs/index.d.ts#L132">index.d.ts:132</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member"><a id="remove" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>remove</span><a href="#remove" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="#icon-anchor"></use></svg></a></h3>
 <ul class="tsd-signatures">
@@ -426,7 +426,7 @@
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">&gt;</span></h4>
 <div class="tsd-comment tsd-typography"></div><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/0db2fe5/bindings/nodejs/index.d.ts#L290">index.d.ts:290</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/0721a6e/bindings/nodejs/index.d.ts#L290">index.d.ts:290</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member"><a id="removeAll" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>remove<wbr/>All</span><a href="#removeAll" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="#icon-anchor"></use></svg></a></h3>
 <ul class="tsd-signatures">
@@ -445,7 +445,7 @@
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">&gt;</span></h4>
 <div class="tsd-comment tsd-typography"></div><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/0db2fe5/bindings/nodejs/index.d.ts#L302">index.d.ts:302</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/0721a6e/bindings/nodejs/index.d.ts#L302">index.d.ts:302</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member"><a id="rename" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>rename</span><a href="#rename" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="#icon-anchor"></use></svg></a></h3>
 <ul class="tsd-signatures">
@@ -466,7 +466,7 @@
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">&gt;</span></h4>
 <div class="tsd-comment tsd-typography"></div><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/0db2fe5/bindings/nodejs/index.d.ts#L199">index.d.ts:199</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/0721a6e/bindings/nodejs/index.d.ts#L199">index.d.ts:199</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member"><a id="renameSync" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>rename<wbr/>Sync</span><a href="#renameSync" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="#icon-anchor"></use></svg></a></h3>
 <ul class="tsd-signatures">
@@ -487,7 +487,7 @@
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">void</span></h4>
 <div class="tsd-comment tsd-typography"></div><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/0db2fe5/bindings/nodejs/index.d.ts#L210">index.d.ts:210</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/0721a6e/bindings/nodejs/index.d.ts#L210">index.d.ts:210</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member"><a id="scan" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>scan</span><a href="#scan" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="#icon-anchor"></use></svg></a></h3>
 <ul class="tsd-signatures">
@@ -507,7 +507,7 @@
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Promise</span><span class="tsd-signature-symbol">&lt;</span><a href="Lister.html" class="tsd-signature-type tsd-kind-class">Lister</a><span class="tsd-signature-symbol">&gt;</span></h4>
 <div class="tsd-comment tsd-typography"></div><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/0db2fe5/bindings/nodejs/index.d.ts#L234">index.d.ts:234</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/0721a6e/bindings/nodejs/index.d.ts#L234">index.d.ts:234</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member"><a id="scanSync" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>scan<wbr/>Sync</span><a href="#scanSync" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="#icon-anchor"></use></svg></a></h3>
 <ul class="tsd-signatures">
@@ -527,7 +527,7 @@
 <h4 class="tsd-returns-title">Returns <a href="BlockingLister.html" class="tsd-signature-type tsd-kind-class">BlockingLister</a></h4>
 <div class="tsd-comment tsd-typography"></div><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/0db2fe5/bindings/nodejs/index.d.ts#L257">index.d.ts:257</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/0721a6e/bindings/nodejs/index.d.ts#L257">index.d.ts:257</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member"><a id="stat" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>stat</span><a href="#stat" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="#icon-anchor"></use></svg></a></h3>
 <ul class="tsd-signatures">
@@ -551,7 +551,7 @@
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Promise</span><span class="tsd-signature-symbol">&lt;</span><a href="Metadata.html" class="tsd-signature-type tsd-kind-class">Metadata</a><span class="tsd-signature-symbol">&gt;</span></h4>
 <div class="tsd-comment tsd-typography"></div><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/0db2fe5/bindings/nodejs/index.d.ts#L55">index.d.ts:55</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/0721a6e/bindings/nodejs/index.d.ts#L55">index.d.ts:55</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member"><a id="statSync" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>stat<wbr/>Sync</span><a href="#statSync" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="#icon-anchor"></use></svg></a></h3>
 <ul class="tsd-signatures">
@@ -569,7 +569,7 @@
 <h4 class="tsd-returns-title">Returns <a href="Metadata.html" class="tsd-signature-type tsd-kind-class">Metadata</a></h4>
 <div class="tsd-comment tsd-typography"></div><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/0db2fe5/bindings/nodejs/index.d.ts#L67">index.d.ts:67</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/0721a6e/bindings/nodejs/index.d.ts#L67">index.d.ts:67</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member"><a id="write" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>write</span><a href="#write" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="#icon-anchor"></use></svg></a></h3>
 <ul class="tsd-signatures">
@@ -589,7 +589,7 @@
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type ">Promise</span><span class="tsd-signature-symbol">&lt;</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">&gt;</span></h4>
 <div class="tsd-comment tsd-typography"></div><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/0db2fe5/bindings/nodejs/index.d.ts#L143">index.d.ts:143</a></li></ul></aside></li></ul></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/0721a6e/bindings/nodejs/index.d.ts#L143">index.d.ts:143</a></li></ul></aside></li></ul></section>
 <section class="tsd-panel tsd-member"><a id="writeSync" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>write<wbr/>Sync</span><a href="#writeSync" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="#icon-anchor"></use></svg></a></h3>
 <ul class="tsd-signatures">
@@ -609,7 +609,7 @@
 <h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">void</span></h4>
 <div class="tsd-comment tsd-typography"></div><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/0db2fe5/bindings/nodejs/index.d.ts#L154">index.d.ts:154</a></li></ul></aside></li></ul></section></section></div>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/0721a6e/bindings/nodejs/index.d.ts#L154">index.d.ts:154</a></li></ul></aside></li></ul></section></section></div>
 <div class="col-sidebar">
 <div class="page-menu">
 <div class="tsd-navigation settings">
diff --git a/docs/nodejs/interfaces/PresignedRequest.html b/docs/nodejs/interfaces/PresignedRequest.html
index aa1b0d495..37d2c497b 100644
--- a/docs/nodejs/interfaces/PresignedRequest.html
+++ b/docs/nodejs/interfaces/PresignedRequest.html
@@ -20,7 +20,7 @@
 <ul class="tsd-hierarchy">
 <li><span class="target">PresignedRequest</span></li></ul></section><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/0db2fe5/bindings/nodejs/index.d.ts#L25">index.d.ts:25</a></li></ul></aside>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/0721a6e/bindings/nodejs/index.d.ts#L25">index.d.ts:25</a></li></ul></aside>
 <section class="tsd-panel-group tsd-index-group">
 <section class="tsd-panel tsd-index-panel">
 <details class="tsd-index-content tsd-index-accordion" open><summary class="tsd-accordion-summary tsd-index-summary">
@@ -41,7 +41,7 @@
 </div>
 <div class="tsd-comment tsd-typography"></div><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/0db2fe5/bindings/nodejs/index.d.ts#L31">index.d.ts:31</a></li></ul></aside></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/0721a6e/bindings/nodejs/index.d.ts#L31">index.d.ts:31</a></li></ul></aside></section>
 <section class="tsd-panel tsd-member"><a id="method" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>method</span><a href="#method" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="#icon-anchor"></use></svg></a></h3>
 <div class="tsd-signature"><span class="tsd-kind-property">method</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span></div>
@@ -49,7 +49,7 @@
 </div>
 <div class="tsd-comment tsd-typography"></div><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/0db2fe5/bindings/nodejs/index.d.ts#L27">index.d.ts:27</a></li></ul></aside></section>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/0721a6e/bindings/nodejs/index.d.ts#L27">index.d.ts:27</a></li></ul></aside></section>
 <section class="tsd-panel tsd-member"><a id="url" class="tsd-anchor"></a>
 <h3 class="tsd-anchor-link"><span>url</span><a href="#url" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="#icon-anchor"></use></svg></a></h3>
 <div class="tsd-signature"><span class="tsd-kind-property">url</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span></div>
@@ -57,7 +57,7 @@
 </div>
 <div class="tsd-comment tsd-typography"></div><aside class="tsd-sources">
 <ul>
-<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/0db2fe5/bindings/nodejs/index.d.ts#L29">index.d.ts:29</a></li></ul></aside></section></section></div>
+<li>Defined in <a href="https://github.com/apache/incubator-opendal/blob/0721a6e/bindings/nodejs/index.d.ts#L29">index.d.ts:29</a></li></ul></aside></section></section></div>
 <div class="col-sidebar">
 <div class="page-menu">
 <div class="tsd-navigation settings">
diff --git a/docs/overview/index.html b/docs/overview/index.html
index 3126fbea0..218458a5c 100644
--- a/docs/overview/index.html
+++ b/docs/overview/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">Welcome to Apache OpenDAL | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/overview"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="cu [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.e8c8dc66.js" as="script">
-<link rel="preload" href="/assets/js/main.b5b973fb.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.23901fca.js" as="script">
+<link rel="preload" href="/assets/js/main.b461bd80.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.e8c8dc66.js"></script>
-<script src="/assets/js/main.b5b973fb.js"></script>
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
+<script src="/assets/js/runtime~main.23901fca.js"></script>
+<script src="/assets/js/main.b461bd80.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/python/opendal.html b/docs/python/opendal.html
index 2c241f70b..ac699e1f8 100644
--- a/docs/python/opendal.html
+++ b/docs/python/opendal.html
@@ -174,19 +174,19 @@
                                 <a class="variable" href="#Metadata.content_length">content_length</a>
                         </li>
                         <li>
-                                <a class="variable" href="#Metadata.etag">etag</a>
+                                <a class="variable" href="#Metadata.content_md5">content_md5</a>
                         </li>
                         <li>
                                 <a class="variable" href="#Metadata.mode">mode</a>
                         </li>
                         <li>
-                                <a class="variable" href="#Metadata.content_type">content_type</a>
+                                <a class="variable" href="#Metadata.etag">etag</a>
                         </li>
                         <li>
                                 <a class="variable" href="#Metadata.content_disposition">content_disposition</a>
                         </li>
                         <li>
-                                <a class="variable" href="#Metadata.content_md5">content_md5</a>
+                                <a class="variable" href="#Metadata.content_type">content_type</a>
                         </li>
                 </ul>
 
@@ -195,13 +195,13 @@
                     <a class="class" href="#PresignedRequest">PresignedRequest</a>
                             <ul class="memberlist">
                         <li>
-                                <a class="variable" href="#PresignedRequest.url">url</a>
+                                <a class="variable" href="#PresignedRequest.headers">headers</a>
                         </li>
                         <li>
-                                <a class="variable" href="#PresignedRequest.method">method</a>
+                                <a class="variable" href="#PresignedRequest.url">url</a>
                         </li>
                         <li>
-                                <a class="variable" href="#PresignedRequest.headers">headers</a>
+                                <a class="variable" href="#PresignedRequest.method">method</a>
                         </li>
                 </ul>
 
@@ -210,124 +210,124 @@
                     <a class="class" href="#Capability">Capability</a>
                             <ul class="memberlist">
                         <li>
-                                <a class="variable" href="#Capability.read_with_override_content_disposition">read_with_override_content_disposition</a>
+                                <a class="variable" href="#Capability.list_with_limit">list_with_limit</a>
                         </li>
                         <li>
-                                <a class="variable" href="#Capability.create_dir">create_dir</a>
+                                <a class="variable" href="#Capability.batch_delete">batch_delete</a>
                         </li>
                         <li>
-                                <a class="variable" href="#Capability.write">write</a>
+                                <a class="variable" href="#Capability.list_with_delimiter_slash">list_with_delimiter_slash</a>
                         </li>
                         <li>
-                                <a class="variable" href="#Capability.write_with_content_disposition">write_with_content_disposition</a>
+                                <a class="variable" href="#Capability.write_can_empty">write_can_empty</a>
                         </li>
                         <li>
-                                <a class="variable" href="#Capability.list_with_delimiter_slash">list_with_delimiter_slash</a>
+                                <a class="variable" href="#Capability.write_multi_min_size">write_multi_min_size</a>
                         </li>
                         <li>
-                                <a class="variable" href="#Capability.read">read</a>
+                                <a class="variable" href="#Capability.write_total_max_size">write_total_max_size</a>
                         </li>
                         <li>
-                                <a class="variable" href="#Capability.read_with_if_none_match">read_with_if_none_match</a>
+                                <a class="variable" href="#Capability.rename">rename</a>
                         </li>
                         <li>
-                                <a class="variable" href="#Capability.read_can_next">read_can_next</a>
+                                <a class="variable" href="#Capability.list">list</a>
                         </li>
                         <li>
-                                <a class="variable" href="#Capability.read_can_seek">read_can_seek</a>
+                                <a class="variable" href="#Capability.presign_write">presign_write</a>
                         </li>
                         <li>
-                                <a class="variable" href="#Capability.read_with_if_match">read_with_if_match</a>
+                                <a class="variable" href="#Capability.delete">delete</a>
                         </li>
                         <li>
-                                <a class="variable" href="#Capability.write_multi_max_size">write_multi_max_size</a>
+                                <a class="variable" href="#Capability.read_with_if_none_match">read_with_if_none_match</a>
                         </li>
                         <li>
-                                <a class="variable" href="#Capability.write_multi_align_size">write_multi_align_size</a>
+                                <a class="variable" href="#Capability.batch">batch</a>
                         </li>
                         <li>
-                                <a class="variable" href="#Capability.copy">copy</a>
+                                <a class="variable" href="#Capability.read_with_override_content_disposition">read_with_override_content_disposition</a>
                         </li>
                         <li>
-                                <a class="variable" href="#Capability.rename">rename</a>
+                                <a class="variable" href="#Capability.read_can_seek">read_can_seek</a>
                         </li>
                         <li>
-                                <a class="variable" href="#Capability.batch">batch</a>
+                                <a class="variable" href="#Capability.blocking">blocking</a>
                         </li>
                         <li>
-                                <a class="variable" href="#Capability.write_multi_min_size">write_multi_min_size</a>
+                                <a class="variable" href="#Capability.stat_with_if_match">stat_with_if_match</a>
                         </li>
                         <li>
-                                <a class="variable" href="#Capability.stat_with_if_match">stat_with_if_match</a>
+                                <a class="variable" href="#Capability.presign">presign</a>
                         </li>
                         <li>
-                                <a class="variable" href="#Capability.delete">delete</a>
+                                <a class="variable" href="#Capability.presign_read">presign_read</a>
                         </li>
                         <li>
-                                <a class="variable" href="#Capability.list_without_delimiter">list_without_delimiter</a>
+                                <a class="variable" href="#Capability.read_with_range">read_with_range</a>
                         </li>
                         <li>
-                                <a class="variable" href="#Capability.presign_stat">presign_stat</a>
+                                <a class="variable" href="#Capability.read_with_override_cache_control">read_with_override_cache_control</a>
                         </li>
                         <li>
-                                <a class="variable" href="#Capability.presign">presign</a>
+                                <a class="variable" href="#Capability.write_multi_max_size">write_multi_max_size</a>
                         </li>
                         <li>
-                                <a class="variable" href="#Capability.batch_delete">batch_delete</a>
+                                <a class="variable" href="#Capability.read">read</a>
                         </li>
                         <li>
-                                <a class="variable" href="#Capability.write_can_multi">write_can_multi</a>
+                                <a class="variable" href="#Capability.write">write</a>
                         </li>
                         <li>
-                                <a class="variable" href="#Capability.write_total_max_size">write_total_max_size</a>
+                                <a class="variable" href="#Capability.read_with_override_content_type">read_with_override_content_type</a>
                         </li>
                         <li>
-                                <a class="variable" href="#Capability.read_with_override_cache_control">read_with_override_cache_control</a>
+                                <a class="variable" href="#Capability.list_without_delimiter">list_without_delimiter</a>
                         </li>
                         <li>
-                                <a class="variable" href="#Capability.list">list</a>
+                                <a class="variable" href="#Capability.write_can_append">write_can_append</a>
                         </li>
                         <li>
-                                <a class="variable" href="#Capability.stat_with_if_none_match">stat_with_if_none_match</a>
+                                <a class="variable" href="#Capability.write_with_content_type">write_with_content_type</a>
                         </li>
                         <li>
-                                <a class="variable" href="#Capability.presign_write">presign_write</a>
+                                <a class="variable" href="#Capability.create_dir">create_dir</a>
                         </li>
                         <li>
-                                <a class="variable" href="#Capability.write_with_content_type">write_with_content_type</a>
+                                <a class="variable" href="#Capability.copy">copy</a>
                         </li>
                         <li>
-                                <a class="variable" href="#Capability.read_with_range">read_with_range</a>
+                                <a class="variable" href="#Capability.write_multi_align_size">write_multi_align_size</a>
                         </li>
                         <li>
-                                <a class="variable" href="#Capability.list_with_limit">list_with_limit</a>
+                                <a class="variable" href="#Capability.stat_with_if_none_match">stat_with_if_none_match</a>
                         </li>
                         <li>
-                                <a class="variable" href="#Capability.presign_read">presign_read</a>
+                                <a class="variable" href="#Capability.read_with_if_match">read_with_if_match</a>
                         </li>
                         <li>
-                                <a class="variable" href="#Capability.write_can_append">write_can_append</a>
+                                <a class="variable" href="#Capability.stat">stat</a>
                         </li>
                         <li>
-                                <a class="variable" href="#Capability.write_can_empty">write_can_empty</a>
+                                <a class="variable" href="#Capability.write_can_multi">write_can_multi</a>
                         </li>
                         <li>
-                                <a class="variable" href="#Capability.list_with_start_after">list_with_start_after</a>
+                                <a class="variable" href="#Capability.write_with_content_disposition">write_with_content_disposition</a>
                         </li>
                         <li>
-                                <a class="variable" href="#Capability.write_with_cache_control">write_with_cache_control</a>
+                                <a class="variable" href="#Capability.presign_stat">presign_stat</a>
                         </li>
                         <li>
                                 <a class="variable" href="#Capability.batch_max_operations">batch_max_operations</a>
                         </li>
                         <li>
-                                <a class="variable" href="#Capability.blocking">blocking</a>
+                                <a class="variable" href="#Capability.list_with_start_after">list_with_start_after</a>
                         </li>
                         <li>
-                                <a class="variable" href="#Capability.read_with_override_content_type">read_with_override_content_type</a>
+                                <a class="variable" href="#Capability.write_with_cache_control">write_with_cache_control</a>
                         </li>
                         <li>
-                                <a class="variable" href="#Capability.stat">stat</a>
+                                <a class="variable" href="#Capability.read_can_next">read_can_next</a>
                         </li>
                 </ul>
 
@@ -1095,15 +1095,15 @@ The default value for whence is <code>SEEK_SET</code>. Values for <code>whence</
 
 
                             </div>
-                            <div id="Metadata.etag" class="classattr">
+                            <div id="Metadata.content_md5" class="classattr">
                                 <div class="attr variable">
-            <span class="name">etag</span><span class="annotation">: Optional[str]</span>
+            <span class="name">content_md5</span><span class="annotation">: Optional[str]</span>
 
         
     </div>
-    <a class="headerlink" href="#Metadata.etag"></a>
+    <a class="headerlink" href="#Metadata.content_md5"></a>
     
-            <div class="docstring"><p>ETag of this entry.</p>
+            <div class="docstring"><p>Content MD5 of this entry.</p>
 </div>
 
 
@@ -1121,15 +1121,15 @@ The default value for whence is <code>SEEK_SET</code>. Values for <code>whence</
 
 
                             </div>
-                            <div id="Metadata.content_type" class="classattr">
+                            <div id="Metadata.etag" class="classattr">
                                 <div class="attr variable">
-            <span class="name">content_type</span><span class="annotation">: Optional[str]</span>
+            <span class="name">etag</span><span class="annotation">: Optional[str]</span>
 
         
     </div>
-    <a class="headerlink" href="#Metadata.content_type"></a>
+    <a class="headerlink" href="#Metadata.etag"></a>
     
-            <div class="docstring"><p>Content Type of this entry.</p>
+            <div class="docstring"><p>ETag of this entry.</p>
 </div>
 
 
@@ -1145,15 +1145,15 @@ The default value for whence is <code>SEEK_SET</code>. Values for <code>whence</
     
 
                             </div>
-                            <div id="Metadata.content_md5" class="classattr">
+                            <div id="Metadata.content_type" class="classattr">
                                 <div class="attr variable">
-            <span class="name">content_md5</span><span class="annotation">: Optional[str]</span>
+            <span class="name">content_type</span><span class="annotation">: Optional[str]</span>
 
         
     </div>
-    <a class="headerlink" href="#Metadata.content_md5"></a>
+    <a class="headerlink" href="#Metadata.content_type"></a>
     
-            <div class="docstring"><p>Content MD5 of this entry.</p>
+            <div class="docstring"><p>Content Type of this entry.</p>
 </div>
 
 
@@ -1171,41 +1171,41 @@ The default value for whence is <code>SEEK_SET</code>. Values for <code>whence</
     
     
 
-                            <div id="PresignedRequest.url" class="classattr">
+                            <div id="PresignedRequest.headers" class="classattr">
                                 <div class="attr variable">
-            <span class="name">url</span><span class="annotation">: str</span>
+            <span class="name">headers</span><span class="annotation">: dict[str, str]</span>
 
         
     </div>
-    <a class="headerlink" href="#PresignedRequest.url"></a>
+    <a class="headerlink" href="#PresignedRequest.headers"></a>
     
-            <div class="docstring"><p>Return the URL of this request.</p>
+            <div class="docstring"><p>Return the HTTP headers of this request.</p>
 </div>
 
 
                             </div>
-                            <div id="PresignedRequest.method" class="classattr">
+                            <div id="PresignedRequest.url" class="classattr">
                                 <div class="attr variable">
-            <span class="name">method</span><span class="annotation">: str</span>
+            <span class="name">url</span><span class="annotation">: str</span>
 
         
     </div>
-    <a class="headerlink" href="#PresignedRequest.method"></a>
+    <a class="headerlink" href="#PresignedRequest.url"></a>
     
-            <div class="docstring"><p>Return the HTTP method of this request.</p>
+            <div class="docstring"><p>Return the URL of this request.</p>
 </div>
 
 
                             </div>
-                            <div id="PresignedRequest.headers" class="classattr">
+                            <div id="PresignedRequest.method" class="classattr">
                                 <div class="attr variable">
-            <span class="name">headers</span><span class="annotation">: dict[str, str]</span>
+            <span class="name">method</span><span class="annotation">: str</span>
 
         
     </div>
-    <a class="headerlink" href="#PresignedRequest.headers"></a>
+    <a class="headerlink" href="#PresignedRequest.method"></a>
     
-            <div class="docstring"><p>Return the HTTP headers of this request.</p>
+            <div class="docstring"><p>Return the HTTP method of this request.</p>
 </div>
 
 
@@ -1223,398 +1223,398 @@ The default value for whence is <code>SEEK_SET</code>. Values for <code>whence</
     
     
 
-                            <div id="Capability.read_with_override_content_disposition" class="classattr">
+                            <div id="Capability.list_with_limit" class="classattr">
                                 <div class="attr variable">
-            <span class="name">read_with_override_content_disposition</span><span class="annotation">: bool</span>
+            <span class="name">list_with_limit</span><span class="annotation">: bool</span>
 
         
     </div>
-    <a class="headerlink" href="#Capability.read_with_override_content_disposition"></a>
+    <a class="headerlink" href="#Capability.list_with_limit"></a>
     
     
 
                             </div>
-                            <div id="Capability.create_dir" class="classattr">
+                            <div id="Capability.batch_delete" class="classattr">
                                 <div class="attr variable">
-            <span class="name">create_dir</span><span class="annotation">: bool</span>
+            <span class="name">batch_delete</span><span class="annotation">: bool</span>
 
         
     </div>
-    <a class="headerlink" href="#Capability.create_dir"></a>
+    <a class="headerlink" href="#Capability.batch_delete"></a>
     
     
 
                             </div>
-                            <div id="Capability.write" class="classattr">
+                            <div id="Capability.list_with_delimiter_slash" class="classattr">
                                 <div class="attr variable">
-            <span class="name">write</span><span class="annotation">: bool</span>
+            <span class="name">list_with_delimiter_slash</span><span class="annotation">: bool</span>
 
         
     </div>
-    <a class="headerlink" href="#Capability.write"></a>
+    <a class="headerlink" href="#Capability.list_with_delimiter_slash"></a>
     
     
 
                             </div>
-                            <div id="Capability.write_with_content_disposition" class="classattr">
+                            <div id="Capability.write_can_empty" class="classattr">
                                 <div class="attr variable">
-            <span class="name">write_with_content_disposition</span><span class="annotation">: bool</span>
+            <span class="name">write_can_empty</span><span class="annotation">: bool</span>
 
         
     </div>
-    <a class="headerlink" href="#Capability.write_with_content_disposition"></a>
+    <a class="headerlink" href="#Capability.write_can_empty"></a>
     
     
 
                             </div>
-                            <div id="Capability.list_with_delimiter_slash" class="classattr">
+                            <div id="Capability.write_multi_min_size" class="classattr">
                                 <div class="attr variable">
-            <span class="name">list_with_delimiter_slash</span><span class="annotation">: bool</span>
+            <span class="name">write_multi_min_size</span><span class="annotation">: Optional[int]</span>
 
         
     </div>
-    <a class="headerlink" href="#Capability.list_with_delimiter_slash"></a>
+    <a class="headerlink" href="#Capability.write_multi_min_size"></a>
     
     
 
                             </div>
-                            <div id="Capability.read" class="classattr">
+                            <div id="Capability.write_total_max_size" class="classattr">
                                 <div class="attr variable">
-            <span class="name">read</span><span class="annotation">: bool</span>
+            <span class="name">write_total_max_size</span><span class="annotation">: Optional[int]</span>
 
         
     </div>
-    <a class="headerlink" href="#Capability.read"></a>
+    <a class="headerlink" href="#Capability.write_total_max_size"></a>
     
     
 
                             </div>
-                            <div id="Capability.read_with_if_none_match" class="classattr">
+                            <div id="Capability.rename" class="classattr">
                                 <div class="attr variable">
-            <span class="name">read_with_if_none_match</span><span class="annotation">: bool</span>
+            <span class="name">rename</span><span class="annotation">: bool</span>
 
         
     </div>
-    <a class="headerlink" href="#Capability.read_with_if_none_match"></a>
+    <a class="headerlink" href="#Capability.rename"></a>
     
     
 
                             </div>
-                            <div id="Capability.read_can_next" class="classattr">
+                            <div id="Capability.list" class="classattr">
                                 <div class="attr variable">
-            <span class="name">read_can_next</span><span class="annotation">: bool</span>
+            <span class="name">list</span><span class="annotation">: bool</span>
 
         
     </div>
-    <a class="headerlink" href="#Capability.read_can_next"></a>
+    <a class="headerlink" href="#Capability.list"></a>
     
     
 
                             </div>
-                            <div id="Capability.read_can_seek" class="classattr">
+                            <div id="Capability.presign_write" class="classattr">
                                 <div class="attr variable">
-            <span class="name">read_can_seek</span><span class="annotation">: bool</span>
+            <span class="name">presign_write</span><span class="annotation">: bool</span>
 
         
     </div>
-    <a class="headerlink" href="#Capability.read_can_seek"></a>
+    <a class="headerlink" href="#Capability.presign_write"></a>
     
     
 
                             </div>
-                            <div id="Capability.read_with_if_match" class="classattr">
+                            <div id="Capability.delete" class="classattr">
                                 <div class="attr variable">
-            <span class="name">read_with_if_match</span><span class="annotation">: bool</span>
+            <span class="name">delete</span><span class="annotation">: bool</span>
 
         
     </div>
-    <a class="headerlink" href="#Capability.read_with_if_match"></a>
+    <a class="headerlink" href="#Capability.delete"></a>
     
     
 
                             </div>
-                            <div id="Capability.write_multi_max_size" class="classattr">
+                            <div id="Capability.read_with_if_none_match" class="classattr">
                                 <div class="attr variable">
-            <span class="name">write_multi_max_size</span><span class="annotation">: Optional[int]</span>
+            <span class="name">read_with_if_none_match</span><span class="annotation">: bool</span>
 
         
     </div>
-    <a class="headerlink" href="#Capability.write_multi_max_size"></a>
+    <a class="headerlink" href="#Capability.read_with_if_none_match"></a>
     
     
 
                             </div>
-                            <div id="Capability.write_multi_align_size" class="classattr">
+                            <div id="Capability.batch" class="classattr">
                                 <div class="attr variable">
-            <span class="name">write_multi_align_size</span><span class="annotation">: Optional[int]</span>
+            <span class="name">batch</span><span class="annotation">: bool</span>
 
         
     </div>
-    <a class="headerlink" href="#Capability.write_multi_align_size"></a>
+    <a class="headerlink" href="#Capability.batch"></a>
     
     
 
                             </div>
-                            <div id="Capability.copy" class="classattr">
+                            <div id="Capability.read_with_override_content_disposition" class="classattr">
                                 <div class="attr variable">
-            <span class="name">copy</span><span class="annotation">: bool</span>
+            <span class="name">read_with_override_content_disposition</span><span class="annotation">: bool</span>
 
         
     </div>
-    <a class="headerlink" href="#Capability.copy"></a>
+    <a class="headerlink" href="#Capability.read_with_override_content_disposition"></a>
     
     
 
                             </div>
-                            <div id="Capability.rename" class="classattr">
+                            <div id="Capability.read_can_seek" class="classattr">
                                 <div class="attr variable">
-            <span class="name">rename</span><span class="annotation">: bool</span>
+            <span class="name">read_can_seek</span><span class="annotation">: bool</span>
 
         
     </div>
-    <a class="headerlink" href="#Capability.rename"></a>
+    <a class="headerlink" href="#Capability.read_can_seek"></a>
     
     
 
                             </div>
-                            <div id="Capability.batch" class="classattr">
+                            <div id="Capability.blocking" class="classattr">
                                 <div class="attr variable">
-            <span class="name">batch</span><span class="annotation">: bool</span>
+            <span class="name">blocking</span><span class="annotation">: bool</span>
 
         
     </div>
-    <a class="headerlink" href="#Capability.batch"></a>
+    <a class="headerlink" href="#Capability.blocking"></a>
     
     
 
                             </div>
-                            <div id="Capability.write_multi_min_size" class="classattr">
+                            <div id="Capability.stat_with_if_match" class="classattr">
                                 <div class="attr variable">
-            <span class="name">write_multi_min_size</span><span class="annotation">: Optional[int]</span>
+            <span class="name">stat_with_if_match</span><span class="annotation">: bool</span>
 
         
     </div>
-    <a class="headerlink" href="#Capability.write_multi_min_size"></a>
+    <a class="headerlink" href="#Capability.stat_with_if_match"></a>
     
     
 
                             </div>
-                            <div id="Capability.stat_with_if_match" class="classattr">
+                            <div id="Capability.presign" class="classattr">
                                 <div class="attr variable">
-            <span class="name">stat_with_if_match</span><span class="annotation">: bool</span>
+            <span class="name">presign</span><span class="annotation">: bool</span>
 
         
     </div>
-    <a class="headerlink" href="#Capability.stat_with_if_match"></a>
+    <a class="headerlink" href="#Capability.presign"></a>
     
     
 
                             </div>
-                            <div id="Capability.delete" class="classattr">
+                            <div id="Capability.presign_read" class="classattr">
                                 <div class="attr variable">
-            <span class="name">delete</span><span class="annotation">: bool</span>
+            <span class="name">presign_read</span><span class="annotation">: bool</span>
 
         
     </div>
-    <a class="headerlink" href="#Capability.delete"></a>
+    <a class="headerlink" href="#Capability.presign_read"></a>
     
     
 
                             </div>
-                            <div id="Capability.list_without_delimiter" class="classattr">
+                            <div id="Capability.read_with_range" class="classattr">
                                 <div class="attr variable">
-            <span class="name">list_without_delimiter</span><span class="annotation">: bool</span>
+            <span class="name">read_with_range</span><span class="annotation">: bool</span>
 
         
     </div>
-    <a class="headerlink" href="#Capability.list_without_delimiter"></a>
+    <a class="headerlink" href="#Capability.read_with_range"></a>
     
     
 
                             </div>
-                            <div id="Capability.presign_stat" class="classattr">
+                            <div id="Capability.read_with_override_cache_control" class="classattr">
                                 <div class="attr variable">
-            <span class="name">presign_stat</span><span class="annotation">: bool</span>
+            <span class="name">read_with_override_cache_control</span><span class="annotation">: bool</span>
 
         
     </div>
-    <a class="headerlink" href="#Capability.presign_stat"></a>
+    <a class="headerlink" href="#Capability.read_with_override_cache_control"></a>
     
     
 
                             </div>
-                            <div id="Capability.presign" class="classattr">
+                            <div id="Capability.write_multi_max_size" class="classattr">
                                 <div class="attr variable">
-            <span class="name">presign</span><span class="annotation">: bool</span>
+            <span class="name">write_multi_max_size</span><span class="annotation">: Optional[int]</span>
 
         
     </div>
-    <a class="headerlink" href="#Capability.presign"></a>
+    <a class="headerlink" href="#Capability.write_multi_max_size"></a>
     
     
 
                             </div>
-                            <div id="Capability.batch_delete" class="classattr">
+                            <div id="Capability.read" class="classattr">
                                 <div class="attr variable">
-            <span class="name">batch_delete</span><span class="annotation">: bool</span>
+            <span class="name">read</span><span class="annotation">: bool</span>
 
         
     </div>
-    <a class="headerlink" href="#Capability.batch_delete"></a>
+    <a class="headerlink" href="#Capability.read"></a>
     
     
 
                             </div>
-                            <div id="Capability.write_can_multi" class="classattr">
+                            <div id="Capability.write" class="classattr">
                                 <div class="attr variable">
-            <span class="name">write_can_multi</span><span class="annotation">: bool</span>
+            <span class="name">write</span><span class="annotation">: bool</span>
 
         
     </div>
-    <a class="headerlink" href="#Capability.write_can_multi"></a>
+    <a class="headerlink" href="#Capability.write"></a>
     
     
 
                             </div>
-                            <div id="Capability.write_total_max_size" class="classattr">
+                            <div id="Capability.read_with_override_content_type" class="classattr">
                                 <div class="attr variable">
-            <span class="name">write_total_max_size</span><span class="annotation">: Optional[int]</span>
+            <span class="name">read_with_override_content_type</span><span class="annotation">: bool</span>
 
         
     </div>
-    <a class="headerlink" href="#Capability.write_total_max_size"></a>
+    <a class="headerlink" href="#Capability.read_with_override_content_type"></a>
     
     
 
                             </div>
-                            <div id="Capability.read_with_override_cache_control" class="classattr">
+                            <div id="Capability.list_without_delimiter" class="classattr">
                                 <div class="attr variable">
-            <span class="name">read_with_override_cache_control</span><span class="annotation">: bool</span>
+            <span class="name">list_without_delimiter</span><span class="annotation">: bool</span>
 
         
     </div>
-    <a class="headerlink" href="#Capability.read_with_override_cache_control"></a>
+    <a class="headerlink" href="#Capability.list_without_delimiter"></a>
     
     
 
                             </div>
-                            <div id="Capability.list" class="classattr">
+                            <div id="Capability.write_can_append" class="classattr">
                                 <div class="attr variable">
-            <span class="name">list</span><span class="annotation">: bool</span>
+            <span class="name">write_can_append</span><span class="annotation">: bool</span>
 
         
     </div>
-    <a class="headerlink" href="#Capability.list"></a>
+    <a class="headerlink" href="#Capability.write_can_append"></a>
     
     
 
                             </div>
-                            <div id="Capability.stat_with_if_none_match" class="classattr">
+                            <div id="Capability.write_with_content_type" class="classattr">
                                 <div class="attr variable">
-            <span class="name">stat_with_if_none_match</span><span class="annotation">: bool</span>
+            <span class="name">write_with_content_type</span><span class="annotation">: bool</span>
 
         
     </div>
-    <a class="headerlink" href="#Capability.stat_with_if_none_match"></a>
+    <a class="headerlink" href="#Capability.write_with_content_type"></a>
     
     
 
                             </div>
-                            <div id="Capability.presign_write" class="classattr">
+                            <div id="Capability.create_dir" class="classattr">
                                 <div class="attr variable">
-            <span class="name">presign_write</span><span class="annotation">: bool</span>
+            <span class="name">create_dir</span><span class="annotation">: bool</span>
 
         
     </div>
-    <a class="headerlink" href="#Capability.presign_write"></a>
+    <a class="headerlink" href="#Capability.create_dir"></a>
     
     
 
                             </div>
-                            <div id="Capability.write_with_content_type" class="classattr">
+                            <div id="Capability.copy" class="classattr">
                                 <div class="attr variable">
-            <span class="name">write_with_content_type</span><span class="annotation">: bool</span>
+            <span class="name">copy</span><span class="annotation">: bool</span>
 
         
     </div>
-    <a class="headerlink" href="#Capability.write_with_content_type"></a>
+    <a class="headerlink" href="#Capability.copy"></a>
     
     
 
                             </div>
-                            <div id="Capability.read_with_range" class="classattr">
+                            <div id="Capability.write_multi_align_size" class="classattr">
                                 <div class="attr variable">
-            <span class="name">read_with_range</span><span class="annotation">: bool</span>
+            <span class="name">write_multi_align_size</span><span class="annotation">: Optional[int]</span>
 
         
     </div>
-    <a class="headerlink" href="#Capability.read_with_range"></a>
+    <a class="headerlink" href="#Capability.write_multi_align_size"></a>
     
     
 
                             </div>
-                            <div id="Capability.list_with_limit" class="classattr">
+                            <div id="Capability.stat_with_if_none_match" class="classattr">
                                 <div class="attr variable">
-            <span class="name">list_with_limit</span><span class="annotation">: bool</span>
+            <span class="name">stat_with_if_none_match</span><span class="annotation">: bool</span>
 
         
     </div>
-    <a class="headerlink" href="#Capability.list_with_limit"></a>
+    <a class="headerlink" href="#Capability.stat_with_if_none_match"></a>
     
     
 
                             </div>
-                            <div id="Capability.presign_read" class="classattr">
+                            <div id="Capability.read_with_if_match" class="classattr">
                                 <div class="attr variable">
-            <span class="name">presign_read</span><span class="annotation">: bool</span>
+            <span class="name">read_with_if_match</span><span class="annotation">: bool</span>
 
         
     </div>
-    <a class="headerlink" href="#Capability.presign_read"></a>
+    <a class="headerlink" href="#Capability.read_with_if_match"></a>
     
     
 
                             </div>
-                            <div id="Capability.write_can_append" class="classattr">
+                            <div id="Capability.stat" class="classattr">
                                 <div class="attr variable">
-            <span class="name">write_can_append</span><span class="annotation">: bool</span>
+            <span class="name">stat</span><span class="annotation">: bool</span>
 
         
     </div>
-    <a class="headerlink" href="#Capability.write_can_append"></a>
+    <a class="headerlink" href="#Capability.stat"></a>
     
     
 
                             </div>
-                            <div id="Capability.write_can_empty" class="classattr">
+                            <div id="Capability.write_can_multi" class="classattr">
                                 <div class="attr variable">
-            <span class="name">write_can_empty</span><span class="annotation">: bool</span>
+            <span class="name">write_can_multi</span><span class="annotation">: bool</span>
 
         
     </div>
-    <a class="headerlink" href="#Capability.write_can_empty"></a>
+    <a class="headerlink" href="#Capability.write_can_multi"></a>
     
     
 
                             </div>
-                            <div id="Capability.list_with_start_after" class="classattr">
+                            <div id="Capability.write_with_content_disposition" class="classattr">
                                 <div class="attr variable">
-            <span class="name">list_with_start_after</span><span class="annotation">: bool</span>
+            <span class="name">write_with_content_disposition</span><span class="annotation">: bool</span>
 
         
     </div>
-    <a class="headerlink" href="#Capability.list_with_start_after"></a>
+    <a class="headerlink" href="#Capability.write_with_content_disposition"></a>
     
     
 
                             </div>
-                            <div id="Capability.write_with_cache_control" class="classattr">
+                            <div id="Capability.presign_stat" class="classattr">
                                 <div class="attr variable">
-            <span class="name">write_with_cache_control</span><span class="annotation">: bool</span>
+            <span class="name">presign_stat</span><span class="annotation">: bool</span>
 
         
     </div>
-    <a class="headerlink" href="#Capability.write_with_cache_control"></a>
+    <a class="headerlink" href="#Capability.presign_stat"></a>
     
     
 
@@ -1630,35 +1630,35 @@ The default value for whence is <code>SEEK_SET</code>. Values for <code>whence</
     
 
                             </div>
-                            <div id="Capability.blocking" class="classattr">
+                            <div id="Capability.list_with_start_after" class="classattr">
                                 <div class="attr variable">
-            <span class="name">blocking</span><span class="annotation">: bool</span>
+            <span class="name">list_with_start_after</span><span class="annotation">: bool</span>
 
         
     </div>
-    <a class="headerlink" href="#Capability.blocking"></a>
+    <a class="headerlink" href="#Capability.list_with_start_after"></a>
     
     
 
                             </div>
-                            <div id="Capability.read_with_override_content_type" class="classattr">
+                            <div id="Capability.write_with_cache_control" class="classattr">
                                 <div class="attr variable">
-            <span class="name">read_with_override_content_type</span><span class="annotation">: bool</span>
+            <span class="name">write_with_cache_control</span><span class="annotation">: bool</span>
 
         
     </div>
-    <a class="headerlink" href="#Capability.read_with_override_content_type"></a>
+    <a class="headerlink" href="#Capability.write_with_cache_control"></a>
     
     
 
                             </div>
-                            <div id="Capability.stat" class="classattr">
+                            <div id="Capability.read_can_next" class="classattr">
                                 <div class="attr variable">
-            <span class="name">stat</span><span class="annotation">: bool</span>
+            <span class="name">read_can_next</span><span class="annotation">: bool</span>
 
         
     </div>
-    <a class="headerlink" href="#Capability.stat"></a>
+    <a class="headerlink" href="#Capability.read_can_next"></a>
     
     
 
diff --git a/docs/python/search.js b/docs/python/search.js
index 46b5da461..1966dfcf9 100644
--- a/docs/python/search.js
+++ b/docs/python/search.js
@@ -1,6 +1,6 @@
 window.pdocSearch = (function(){
 /** elasticlunr - http://weixsong.github.io * Copyright (C) 2017 Oliver Nightingale * Copyright (C) 2017 Wei Song * MIT Licensed */!function(){function e(e){if(null===e||"object"!=typeof e)return e;var t=e.constructor();for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);return t}var t=function(e){var n=new t.Index;return n.pipeline.add(t.trimmer,t.stopWordFilter,t.stemmer),e&&e.call(n,n),n};t.version="0.9.5",lunr=t,t.utils={},t.utils.warn=function(e){return function(t){e.console&&console.wa [...]
-    /** pdoc search index */const docs = {"version": "0.9.5", "fields": ["qualname", "fullname", "annotation", "default_value", "signature", "bases", "doc"], "ref": "fullname", "documentStore": {"docs": {"opendal": {"fullname": "opendal", "modulename": "opendal", "kind": "module", "doc": "<p>OpenDAL Python binding</p>\n\n<h2 id=\"installation\">Installation</h2>\n\n<div class=\"pdoc-code codehilite\">\n<pre><span></span><code>pip<span class=\"w\"> </span>install<span class=\"w\"> </span> [...]
+    /** pdoc search index */const docs = {"version": "0.9.5", "fields": ["qualname", "fullname", "annotation", "default_value", "signature", "bases", "doc"], "ref": "fullname", "documentStore": {"docs": {"opendal": {"fullname": "opendal", "modulename": "opendal", "kind": "module", "doc": "<p>OpenDAL Python binding</p>\n\n<h2 id=\"installation\">Installation</h2>\n\n<div class=\"pdoc-code codehilite\">\n<pre><span></span><code>pip<span class=\"w\"> </span>install<span class=\"w\"> </span> [...]
 
     // mirrored in build-search-index.js (part 1)
     // Also split on html tags. this is a cheap heuristic, but good enough.
diff --git a/docs/quickstart/index.html b/docs/quickstart/index.html
index a5d8694b4..a0a7e9b90 100644
--- a/docs/quickstart/index.html
+++ b/docs/quickstart/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">Quickstart | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/quickstart"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta  [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.e8c8dc66.js" as="script">
-<link rel="preload" href="/assets/js/main.b5b973fb.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.23901fca.js" as="script">
+<link rel="preload" href="/assets/js/main.b461bd80.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.e8c8dc66.js"></script>
-<script src="/assets/js/main.b5b973fb.js"></script>
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
+<script src="/assets/js/runtime~main.23901fca.js"></script>
+<script src="/assets/js/main.b461bd80.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/rust/implementors/core/default/trait.Default.js b/docs/rust/implementors/core/default/trait.Default.js
index 1b38bfa35..049d0dfb3 100644
--- a/docs/rust/implementors/core/default/trait.Default.js
+++ b/docs/rust/implementors/core/default/trait.Default.js
@@ -1,3 +1,3 @@
 (function() {var implementors = {
-"opendal":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.73.0/core/default/trait.Default.html\" title=\"trait core::default::Default\">Default</a> for <a class=\"struct\" href=\"opendal/services/struct.Redis.html\" title=\"struct opendal::services::Redis\">RedisBuilder</a>"],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.73.0/core/default/trait.Default.html\" title=\"trait core::default::Default\">Default</a> for <a class=\"struct\" href=\"opendal/services/st [...]
+"opendal":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.73.0/core/default/trait.Default.html\" title=\"trait core::default::Default\">Default</a> for <a class=\"struct\" href=\"opendal/services/struct.Redis.html\" title=\"struct opendal::services::Redis\">RedisBuilder</a>"],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.73.0/core/default/trait.Default.html\" title=\"trait core::default::Default\">Default</a> for <a class=\"struct\" href=\"opendal/services/st [...]
 };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()
\ No newline at end of file
diff --git a/docs/rust/implementors/core/fmt/trait.Debug.js b/docs/rust/implementors/core/fmt/trait.Debug.js
index dd5c440b3..0c583429b 100644
--- a/docs/rust/implementors/core/fmt/trait.Debug.js
+++ b/docs/rust/implementors/core/fmt/trait.Debug.js
@@ -1,3 +1,3 @@
 (function() {var implementors = {
-"opendal":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.73.0/core/fmt/trait.Debug.html\" title=\"trait core::fmt::Debug\">Debug</a> for <a class=\"struct\" href=\"opendal/raw/struct.BytesContentRange.html\" title=\"struct opendal::raw::BytesContentRange\">BytesContentRange</a>"],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.73.0/core/fmt/trait.Debug.html\" title=\"trait core::fmt::Debug\">Debug</a> for <a class=\"struct\" href=\"opendal/layers/struct.Blocki [...]
+"opendal":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.73.0/core/fmt/trait.Debug.html\" title=\"trait core::fmt::Debug\">Debug</a> for <a class=\"struct\" href=\"opendal/raw/struct.BytesContentRange.html\" title=\"struct opendal::raw::BytesContentRange\">BytesContentRange</a>"],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.73.0/core/fmt/trait.Debug.html\" title=\"trait core::fmt::Debug\">Debug</a> for <a class=\"struct\" href=\"opendal/layers/struct.Blocki [...]
 };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()
\ No newline at end of file
diff --git a/docs/rust/implementors/core/marker/trait.Freeze.js b/docs/rust/implementors/core/marker/trait.Freeze.js
index 3169ba6a2..08622159c 100644
--- a/docs/rust/implementors/core/marker/trait.Freeze.js
+++ b/docs/rust/implementors/core/marker/trait.Freeze.js
@@ -1,3 +1,3 @@
 (function() {var implementors = {
-"opendal":[["impl Freeze for <a class=\"enum\" href=\"opendal/enum.EntryMode.html\" title=\"enum opendal::EntryMode\">EntryMode</a>",1,["opendal::types::mode::EntryMode"]],["impl Freeze for <a class=\"struct\" href=\"opendal/struct.Entry.html\" title=\"struct opendal::Entry\">Entry</a>",1,["opendal::types::entry::Entry"]],["impl Freeze for <a class=\"struct\" href=\"opendal/struct.Metadata.html\" title=\"struct opendal::Metadata\">Metadata</a>",1,["opendal::types::metadata::Metadata"]],[ [...]
+"opendal":[["impl Freeze for <a class=\"enum\" href=\"opendal/enum.EntryMode.html\" title=\"enum opendal::EntryMode\">EntryMode</a>",1,["opendal::types::mode::EntryMode"]],["impl Freeze for <a class=\"struct\" href=\"opendal/struct.Entry.html\" title=\"struct opendal::Entry\">Entry</a>",1,["opendal::types::entry::Entry"]],["impl Freeze for <a class=\"struct\" href=\"opendal/struct.Metadata.html\" title=\"struct opendal::Metadata\">Metadata</a>",1,["opendal::types::metadata::Metadata"]],[ [...]
 };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()
\ No newline at end of file
diff --git a/docs/rust/implementors/core/marker/trait.Send.js b/docs/rust/implementors/core/marker/trait.Send.js
index 8552ccbc3..be2cb0ba0 100644
--- a/docs/rust/implementors/core/marker/trait.Send.js
+++ b/docs/rust/implementors/core/marker/trait.Send.js
@@ -1,3 +1,3 @@
 (function() {var implementors = {
-"opendal":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.73.0/core/marker/trait.Send.html\" title=\"trait core::marker::Send\">Send</a> for <a class=\"enum\" href=\"opendal/enum.EntryMode.html\" title=\"enum opendal::EntryMode\">EntryMode</a>",1,["opendal::types::mode::EntryMode"]],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.73.0/core/marker/trait.Send.html\" title=\"trait core::marker::Send\">Send</a> for <a class=\"struct\" href=\"opendal/struct.Entry.ht [...]
+"opendal":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.73.0/core/marker/trait.Send.html\" title=\"trait core::marker::Send\">Send</a> for <a class=\"enum\" href=\"opendal/enum.EntryMode.html\" title=\"enum opendal::EntryMode\">EntryMode</a>",1,["opendal::types::mode::EntryMode"]],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.73.0/core/marker/trait.Send.html\" title=\"trait core::marker::Send\">Send</a> for <a class=\"struct\" href=\"opendal/struct.Entry.ht [...]
 };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()
\ No newline at end of file
diff --git a/docs/rust/implementors/core/marker/trait.Sync.js b/docs/rust/implementors/core/marker/trait.Sync.js
index e7544d0dc..c781e3d26 100644
--- a/docs/rust/implementors/core/marker/trait.Sync.js
+++ b/docs/rust/implementors/core/marker/trait.Sync.js
@@ -1,3 +1,3 @@
 (function() {var implementors = {
-"opendal":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.73.0/core/marker/trait.Sync.html\" title=\"trait core::marker::Sync\">Sync</a> for <a class=\"enum\" href=\"opendal/enum.EntryMode.html\" title=\"enum opendal::EntryMode\">EntryMode</a>",1,["opendal::types::mode::EntryMode"]],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.73.0/core/marker/trait.Sync.html\" title=\"trait core::marker::Sync\">Sync</a> for <a class=\"struct\" href=\"opendal/struct.Entry.ht [...]
+"opendal":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.73.0/core/marker/trait.Sync.html\" title=\"trait core::marker::Sync\">Sync</a> for <a class=\"enum\" href=\"opendal/enum.EntryMode.html\" title=\"enum opendal::EntryMode\">EntryMode</a>",1,["opendal::types::mode::EntryMode"]],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.73.0/core/marker/trait.Sync.html\" title=\"trait core::marker::Sync\">Sync</a> for <a class=\"struct\" href=\"opendal/struct.Entry.ht [...]
 };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()
\ No newline at end of file
diff --git a/docs/rust/implementors/core/marker/trait.Unpin.js b/docs/rust/implementors/core/marker/trait.Unpin.js
index ea779cdbf..a2612190c 100644
--- a/docs/rust/implementors/core/marker/trait.Unpin.js
+++ b/docs/rust/implementors/core/marker/trait.Unpin.js
@@ -1,3 +1,3 @@
 (function() {var implementors = {
-"opendal":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.73.0/core/marker/trait.Unpin.html\" title=\"trait core::marker::Unpin\">Unpin</a> for <a class=\"enum\" href=\"opendal/enum.EntryMode.html\" title=\"enum opendal::EntryMode\">EntryMode</a>",1,["opendal::types::mode::EntryMode"]],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.73.0/core/marker/trait.Unpin.html\" title=\"trait core::marker::Unpin\">Unpin</a> for <a class=\"struct\" href=\"opendal/struct.En [...]
+"opendal":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.73.0/core/marker/trait.Unpin.html\" title=\"trait core::marker::Unpin\">Unpin</a> for <a class=\"enum\" href=\"opendal/enum.EntryMode.html\" title=\"enum opendal::EntryMode\">EntryMode</a>",1,["opendal::types::mode::EntryMode"]],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.73.0/core/marker/trait.Unpin.html\" title=\"trait core::marker::Unpin\">Unpin</a> for <a class=\"struct\" href=\"opendal/struct.En [...]
 };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()
\ No newline at end of file
diff --git a/docs/rust/implementors/core/panic/unwind_safe/trait.RefUnwindSafe.js b/docs/rust/implementors/core/panic/unwind_safe/trait.RefUnwindSafe.js
index 05ce2255f..7386f39e5 100644
--- a/docs/rust/implementors/core/panic/unwind_safe/trait.RefUnwindSafe.js
+++ b/docs/rust/implementors/core/panic/unwind_safe/trait.RefUnwindSafe.js
@@ -1,3 +1,3 @@
 (function() {var implementors = {
-"opendal":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.73.0/core/panic/unwind_safe/trait.RefUnwindSafe.html\" title=\"trait core::panic::unwind_safe::RefUnwindSafe\">RefUnwindSafe</a> for <a class=\"enum\" href=\"opendal/enum.EntryMode.html\" title=\"enum opendal::EntryMode\">EntryMode</a>",1,["opendal::types::mode::EntryMode"]],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.73.0/core/panic/unwind_safe/trait.RefUnwindSafe.html\" title=\"trait core::panic::u [...]
+"opendal":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.73.0/core/panic/unwind_safe/trait.RefUnwindSafe.html\" title=\"trait core::panic::unwind_safe::RefUnwindSafe\">RefUnwindSafe</a> for <a class=\"enum\" href=\"opendal/enum.EntryMode.html\" title=\"enum opendal::EntryMode\">EntryMode</a>",1,["opendal::types::mode::EntryMode"]],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.73.0/core/panic/unwind_safe/trait.RefUnwindSafe.html\" title=\"trait core::panic::u [...]
 };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()
\ No newline at end of file
diff --git a/docs/rust/implementors/core/panic/unwind_safe/trait.UnwindSafe.js b/docs/rust/implementors/core/panic/unwind_safe/trait.UnwindSafe.js
index 77f566ea6..dafae27e1 100644
--- a/docs/rust/implementors/core/panic/unwind_safe/trait.UnwindSafe.js
+++ b/docs/rust/implementors/core/panic/unwind_safe/trait.UnwindSafe.js
@@ -1,3 +1,3 @@
 (function() {var implementors = {
-"opendal":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.73.0/core/panic/unwind_safe/trait.UnwindSafe.html\" title=\"trait core::panic::unwind_safe::UnwindSafe\">UnwindSafe</a> for <a class=\"enum\" href=\"opendal/enum.EntryMode.html\" title=\"enum opendal::EntryMode\">EntryMode</a>",1,["opendal::types::mode::EntryMode"]],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.73.0/core/panic/unwind_safe/trait.UnwindSafe.html\" title=\"trait core::panic::unwind_safe:: [...]
+"opendal":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.73.0/core/panic/unwind_safe/trait.UnwindSafe.html\" title=\"trait core::panic::unwind_safe::UnwindSafe\">UnwindSafe</a> for <a class=\"enum\" href=\"opendal/enum.EntryMode.html\" title=\"enum opendal::EntryMode\">EntryMode</a>",1,["opendal::types::mode::EntryMode"]],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.73.0/core/panic/unwind_safe/trait.UnwindSafe.html\" title=\"trait core::panic::unwind_safe:: [...]
 };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()
\ No newline at end of file
diff --git a/docs/rust/opendal/all.html b/docs/rust/opendal/all.html
index 1a779920b..a65258806 100644
--- a/docs/rust/opendal/all.html
+++ b/docs/rust/opendal/all.html
@@ -1 +1 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="List of all items in this crate"><title>List of all items in this crate</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../static.fi [...]
\ No newline at end of file
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="List of all items in this crate"><title>List of all items in this crate</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../static.fi [...]
\ No newline at end of file
diff --git a/docs/rust/opendal/docs/upgrade/index.html b/docs/rust/opendal/docs/upgrade/index.html
index 872acae54..29ec2bebe 100644
--- a/docs/rust/opendal/docs/upgrade/index.html
+++ b/docs/rust/opendal/docs/upgrade/index.html
@@ -14,6 +14,8 @@
 <ul>
 <li>The <code>enable_create_simulation</code> option has been removed. We add this option to allow ghac simulate create empty file, but it’s could result in unexpected behavior when users create a file with content length <code>1</code>. So we remove it.</li>
 </ul>
+<h4 id="wasabi-service-removed"><a href="#wasabi-service-removed">Wasabi Service Removed</a></h4>
+<p><code>wasabi</code> service native support has been removed. Users who want to access wasabi can use our <code>s3</code> service instead.</p>
 <h2 id="upgrade-to-v041"><a href="#upgrade-to-v041">Upgrade to v0.41</a></h2>
 <p>There is no public API and raw API changes.</p>
 <h2 id="upgrade-to-v040"><a href="#upgrade-to-v040">Upgrade to v0.40</a></h2><h3 id="public-api-1"><a href="#public-api-1">Public API</a></h3><h4 id="rfc-2578-merge-append-into-write"><a href="#rfc-2578-merge-append-into-write">RFC-2578 Merge Append Into Write</a></h4>
diff --git a/docs/rust/opendal/enum.Scheme.html b/docs/rust/opendal/enum.Scheme.html
index bd7870aa7..0f9b0820d 100644
--- a/docs/rust/opendal/enum.Scheme.html
+++ b/docs/rust/opendal/enum.Scheme.html
@@ -1,5 +1,5 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Services that OpenDAL supports"><title>Scheme in opendal - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../static.files/Fira [...]
-<details class="toggle type-contents-toggle"><summary class="hideme"><span>Show 48 variants</span></summary>    Atomicserver,
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Services that OpenDAL supports"><title>Scheme in opendal - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../static.files/Fira [...]
+<details class="toggle type-contents-toggle"><summary class="hideme"><span>Show 47 variants</span></summary>    Atomicserver,
     Azblob,
     Azdls,
     Cacache,
@@ -39,7 +39,6 @@
     Sled,
     Supabase,
     VercelArtifacts,
-    Wasabi,
     Webdav,
     Webhdfs,
     Redb,
@@ -94,7 +93,6 @@
 </div><section id="variant.Sled" class="variant"><a href="#variant.Sled" class="anchor">§</a><h3 class="code-header">Sled</h3></section><div class="docblock"><p><a href="services/struct.Sled.html" title="struct opendal::services::Sled">sled</a>: Sled services</p>
 </div><section id="variant.Supabase" class="variant"><a href="#variant.Supabase" class="anchor">§</a><h3 class="code-header">Supabase</h3></section><div class="docblock"><p><a href="services/struct.Supabase.html" title="struct opendal::services::Supabase">Supabase</a>: Supabase storage service</p>
 </div><section id="variant.VercelArtifacts" class="variant"><a href="#variant.VercelArtifacts" class="anchor">§</a><h3 class="code-header">VercelArtifacts</h3></section><div class="docblock"><p><a href="services/struct.VercelArtifacts.html" title="struct opendal::services::VercelArtifacts">Vercel Artifacts</a>: Vercel Artifacts service, as known as Vercel Remote Caching.</p>
-</div><section id="variant.Wasabi" class="variant"><a href="#variant.Wasabi" class="anchor">§</a><h3 class="code-header">Wasabi</h3></section><div class="docblock"><p><a href="services/struct.Wasabi.html" title="struct opendal::services::Wasabi">wasabi</a>: Wasabi service</p>
 </div><section id="variant.Webdav" class="variant"><a href="#variant.Webdav" class="anchor">§</a><h3 class="code-header">Webdav</h3></section><div class="docblock"><p><a href="services/struct.Webdav.html" title="struct opendal::services::Webdav">webdav</a>: WebDAV support.</p>
 </div><section id="variant.Webhdfs" class="variant"><a href="#variant.Webhdfs" class="anchor">§</a><h3 class="code-header">Webhdfs</h3></section><div class="docblock"><p><a href="services/struct.Webhdfs.html" title="struct opendal::services::Webhdfs">webhdfs</a>: WebHDFS RESTful API Services</p>
 </div><section id="variant.Redb" class="variant"><a href="#variant.Redb" class="anchor">§</a><h3 class="code-header">Redb</h3></section><div class="docblock"><p><a href="services/struct.Redb.html" title="struct opendal::services::Redb">redb</a>: Redb Services</p>
@@ -107,8 +105,8 @@
 <li>Custom must not overwrite any existing services name.</li>
 <li>Custom must be lowed cases.</li>
 </ul>
-</div></div><h2 id="implementations" class="small-section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Scheme" class="impl"><a class="src rightside" href="../src/opendal/types/scheme.rs.html#139-252">source</a><a href="#impl-Scheme" class="anchor">§</a><h3 class="code-header">impl <a class="enum" href="enum.Scheme.html" title="enum opendal::Scheme">Sche [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.enabled" class="method"><a class="src rightside" href="../src/opendal/types/scheme.rs.html#160-251">source</a><h4 class="code-header">pub fn <a href="#method.enabled" class="fn">enabled</a>() -&gt; <a class="struct" href="https://doc.rust-lang.org/1.73.0/std/collections/hash/set/struct.HashSet.html" title="struct std::collections::hash::set::HashSet">HashSet</a>&lt;<a class="enum" href="enum.Scheme.ht [...]
+</div></div><h2 id="implementations" class="small-section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Scheme" class="impl"><a class="src rightside" href="../src/opendal/types/scheme.rs.html#137-248">source</a><a href="#impl-Scheme" class="anchor">§</a><h3 class="code-header">impl <a class="enum" href="enum.Scheme.html" title="enum opendal::Scheme">Sche [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.enabled" class="method"><a class="src rightside" href="../src/opendal/types/scheme.rs.html#158-247">source</a><h4 class="code-header">pub fn <a href="#method.enabled" class="fn">enabled</a>() -&gt; <a class="struct" href="https://doc.rust-lang.org/1.73.0/std/collections/hash/set/struct.HashSet.html" title="struct std::collections::hash::set::HashSet">HashSet</a>&lt;<a class="enum" href="enum.Scheme.ht [...]
 <p>OpenDAL could be compiled with different features, which will enable different schemes.
 This function returns all enabled schemes so users can make decisions based on it.</p>
 <h5 id="examples"><a href="#examples">Examples</a></h5>
@@ -118,7 +116,7 @@ This function returns all enabled schemes so users can make decisions based on i
 <span class="kw">if </span>!enabled_schemes.contains(<span class="kw-2">&amp;</span>Scheme::Memory) {
    <span class="macro">panic!</span>(<span class="string">&quot;s3 support is not enabled&quot;</span>)
 }</code></pre></div>
-</div></details></div></details></div><h2 id="trait-implementations" class="small-section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Clone-for-Scheme" class="impl"><a class="src rightside" href="../src/opendal/types/scheme.rs.html#32">source</a><a href="#impl-Clone-for-Scheme" class="anchor">§</a><h3 class="code-header">impl <a class [...]
+</div></details></div></details></div><h2 id="trait-implementations" class="small-section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Clone-for-Scheme" class="impl"><a class="src rightside" href="../src/opendal/types/scheme.rs.html#32">source</a><a href="#impl-Clone-for-Scheme" class="anchor">§</a><h3 class="code-header">impl <a class [...]
     H: <a class="trait" href="https://doc.rust-lang.org/1.73.0/core/hash/trait.Hasher.html" title="trait core::hash::Hasher">Hasher</a>,
     Self: <a class="trait" href="https://doc.rust-lang.org/1.73.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h4></section></summary><div class='docblock'>Feeds a slice of this type into the given <a href="https://doc.rust-lang.org/1.73.0/core/hash/trait.Hasher.html" title="trait core::hash::Hasher"><code>Hasher</code></a>. <a href="https://doc.rust-lang.org/1.73.0/core/hash/trait.Hash.html#method.hash_slice">Read more</a></div></details></div></det [...]
 by <code>==</code>.</div></details><details class="toggle method-toggle" open><summary><section id="method.ne" class="method trait-impl"><span class="rightside"><span class="since" title="Stable since Rust version 1.0.0">1.0.0</span> · <a class="src" href="https://doc.rust-lang.org/1.73.0/src/core/cmp.rs.html#226">source</a></span><a href="#method.ne" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.73.0/core/cmp/trait.PartialEq.html#method.ne" class="f [...]
diff --git a/docs/rust/opendal/services/index.html b/docs/rust/opendal/services/index.html
index 4da6ea8a0..dd114e962 100644
--- a/docs/rust/opendal/services/index.html
+++ b/docs/rust/opendal/services/index.html
@@ -1,8 +1,8 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Services will provide builders to build underlying backends."><title>opendal::services - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" cross [...]
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Services will provide builders to build underlying backends."><title>opendal::services - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" cross [...]
 <p>More ongoing services support is tracked at <a href="https://github.com/apache/incubator-opendal/issues/5">opendal#5</a>. Please feel free to submit issues if there are services not covered.</p>
 </div></details><h2 id="structs" class="small-section-header"><a href="#structs">Structs</a></h2><ul class="item-table"><li><div class="item-name"><a class="struct" href="struct.Atomicserver.html" title="struct opendal::services::Atomicserver">Atomicserver</a></div><div class="desc docblock-short">Atomicserver service support.</div></li><li><div class="item-name"><a class="struct" href="struct.Azblob.html" title="struct opendal::services::Azblob">Azblob</a></div><div class="desc docblock [...]
 As known as <code>abfs</code>, <code>azdls</code> or <code>azdls</code>.</div></li><li><div class="item-name"><a class="struct" href="struct.Azfile.html" title="struct opendal::services::Azfile">Azfile</a></div><div class="desc docblock-short">Azure File services support.</div></li><li><div class="item-name"><a class="struct" href="struct.Cacache.html" title="struct opendal::services::Cacache">Cacache</a></div><div class="desc docblock-short">cacache service support.</div></li><li><div c [...]
 This service will visit the <a href="https://docs.databricks.com/api/azure/workspace/dbfs">DBFS API</a> supported by <a href="https://docs.databricks.com/en/dbfs/index.html">Databricks File System</a>.</div></li><li><div class="item-name"><a class="struct" href="struct.Dropbox.html" title="struct opendal::services::Dropbox">Dropbox</a></div><div class="desc docblock-short"><a href="https://www.dropbox.com/">Dropbox</a> backend support.</div></li><li><div class="item-name"><a class="struc [...]
 A distributed file system that provides high-throughput access to application data.</div></li><li><div class="item-name"><a class="struct" href="struct.Http.html" title="struct opendal::services::Http">Http</a></div><div class="desc docblock-short">HTTP Read-only service support like <a href="https://www.nginx.com/">Nginx</a> and <a href="https://caddyserver.com/">Caddy</a>.</div></li><li><div class="item-name"><a class="struct" href="struct.Ipfs.html" title="struct opendal::services::Ip [...]
-For more information about s3-compatible services, refer to <a href="#compatible-services">Compatible Services</a>.</div></li><li><div class="item-name"><a class="struct" href="struct.Sftp.html" title="struct opendal::services::Sftp">Sftp</a></div><div class="desc docblock-short">SFTP services support. (only works on unix)</div></li><li><div class="item-name"><a class="struct" href="struct.Sled.html" title="struct opendal::services::Sled">Sled</a></div><div class="desc docblock-short">Sl [...]
+For more information about s3-compatible services, refer to <a href="#compatible-services">Compatible Services</a>.</div></li><li><div class="item-name"><a class="struct" href="struct.Sftp.html" title="struct opendal::services::Sftp">Sftp</a></div><div class="desc docblock-short">SFTP services support. (only works on unix)</div></li><li><div class="item-name"><a class="struct" href="struct.Sled.html" title="struct opendal::services::Sled">Sled</a></div><div class="desc docblock-short">Sl [...]
 There two implementations of WebHDFS REST API:</div></li></ul></section></div></main></body></html>
\ No newline at end of file
diff --git a/docs/rust/opendal/services/sidebar-items.js b/docs/rust/opendal/services/sidebar-items.js
index 513b259fd..7bac09c2b 100644
--- a/docs/rust/opendal/services/sidebar-items.js
+++ b/docs/rust/opendal/services/sidebar-items.js
@@ -1 +1 @@
-window.SIDEBAR_ITEMS = {"struct":["Atomicserver","Azblob","Azdls","Azfile","Cacache","CloudflareKv","Cos","D1","Dashmap","Dbfs","Dropbox","Etcd","Foundationdb","Fs","Ftp","Gcs","Gdrive","Ghac","Hdfs","Http","Ipfs","Ipmfs","Libsql","Memcached","Memory","MiniMoka","Moka","Mongodb","Mysql","Obs","Onedrive","Oss","Persy","Postgresql","Redb","Redis","Rocksdb","S3","Sftp","Sled","Sqlite","Supabase","Tikv","VercelArtifacts","Wasabi","Webdav","Webhdfs"]};
\ No newline at end of file
+window.SIDEBAR_ITEMS = {"struct":["Atomicserver","Azblob","Azdls","Azfile","Cacache","CloudflareKv","Cos","D1","Dashmap","Dbfs","Dropbox","Etcd","Foundationdb","Fs","Ftp","Gcs","Gdrive","Ghac","Hdfs","Http","Ipfs","Ipmfs","Libsql","Memcached","Memory","MiniMoka","Moka","Mongodb","Mysql","Obs","Onedrive","Oss","Persy","Postgresql","Redb","Redis","Rocksdb","S3","Sftp","Sled","Sqlite","Supabase","Tikv","VercelArtifacts","Webdav","Webhdfs"]};
\ No newline at end of file
diff --git a/docs/rust/opendal/services/struct.Wasabi.html b/docs/rust/opendal/services/struct.Wasabi.html
deleted file mode 100644
index ae81c7860..000000000
--- a/docs/rust/opendal/services/struct.Wasabi.html
+++ /dev/null
@@ -1,416 +0,0 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Wasabi (an aws S3 compatible service) support"><title>Wasabi in opendal::services - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigi [...]
-<h3 id="capabilities"><a href="#capabilities">Capabilities</a></h3>
-<p>This service can be used to:</p>
-<ul>
-<li><input disabled="" type="checkbox" checked=""/>
-stat</li>
-<li><input disabled="" type="checkbox" checked=""/>
-read</li>
-<li><input disabled="" type="checkbox" checked=""/>
-write</li>
-<li><input disabled="" type="checkbox" checked=""/>
-create_dir</li>
-<li><input disabled="" type="checkbox" checked=""/>
-delete</li>
-<li><input disabled="" type="checkbox" checked=""/>
-copy</li>
-<li><input disabled="" type="checkbox" checked=""/>
-rename</li>
-<li><input disabled="" type="checkbox" checked=""/>
-list</li>
-<li><input disabled="" type="checkbox" checked=""/>
-scan</li>
-<li><input disabled="" type="checkbox" checked=""/>
-presign</li>
-<li><input disabled="" type="checkbox"/>
-blocking</li>
-</ul>
-<h3 id="configuration"><a href="#configuration">Configuration</a></h3>
-<ul>
-<li><code>root</code>: Set the work dir for backend.</li>
-<li><code>bucket</code>: Set the container name for backend.</li>
-<li><code>endpoint</code>: Set the endpoint for backend.</li>
-<li><code>region</code>: Set the region for backend.</li>
-<li><code>access_key_id</code>: Set the access_key_id for backend.</li>
-<li><code>secret_access_key</code>: Set the secret_access_key for backend.</li>
-<li><code>security_token</code>: Set the security_token for backend.</li>
-<li><code>default_storage_class</code>: Set the default storage_class for backend.</li>
-<li><code>server_side_encryption</code>: Set the server_side_encryption for backend.</li>
-<li><code>server_side_encryption_aws_kms_key_id</code>: Set the server_side_encryption_aws_kms_key_id for backend.</li>
-<li><code>server_side_encryption_customer_algorithm</code>: Set the server_side_encryption_customer_algorithm for kend.</li>
-<li><code>server_side_encryption_customer_key</code>: Set the server_side_encryption_customer_key for backend.</li>
-<li><code>server_side_encryption_customer_key_md5</code>: Set the server_side_encryption_customer_key_md5 for kend.</li>
-<li><code>disable_config_load</code>: Disable aws config load from env</li>
-<li><code>enable_virtual_host_style</code>: Enable virtual host style.</li>
-</ul>
-<p>Refer to <a href="struct.Wasabi.html" title="struct opendal::services::Wasabi"><code>WasabiBuilder</code></a>’s public API docs for more information.</p>
-<h4 id="temporary-security-credentials"><a href="#temporary-security-credentials">Temporary security credentials</a></h4>
-<p>OpenDAL now provides support for S3 temporary security credentials in IAM.</p>
-<p>The way to take advantage of this feature is to build your S3 backend with <code>Builder::security_token</code>.</p>
-<p>But OpenDAL will not refresh the temporary security credentials, please keep in mind to refresh those entials in time.</p>
-<h4 id="server-side-encryption"><a href="#server-side-encryption">Server Side Encryption</a></h4>
-<p>OpenDAL provides full support of S3 Server Side Encryption(SSE) features.</p>
-<p>The easiest way to configure them is to use helper functions like</p>
-<ul>
-<li>SSE-KMS: <code>server_side_encryption_with_aws_managed_kms_key</code></li>
-<li>SSE-KMS: <code>server_side_encryption_with_customer_managed_kms_key</code></li>
-<li>SSE-S3: <code>server_side_encryption_with_s3_key</code></li>
-<li>SSE-C: <code>server_side_encryption_with_customer_key</code></li>
-</ul>
-<p>If those functions don’t fulfill need, low-level options are also provided:</p>
-<ul>
-<li>Use service managed kms key
-<ul>
-<li><code>server_side_encryption=&quot;aws:kms&quot;</code></li>
-</ul>
-</li>
-<li>Use customer provided kms key
-<ul>
-<li><code>server_side_encryption=&quot;aws:kms&quot;</code></li>
-<li><code>server_side_encryption_aws_kms_key_id=&quot;your-kms-key&quot;</code></li>
-</ul>
-</li>
-<li>Use S3 managed key
-<ul>
-<li><code>server_side_encryption=&quot;AES256&quot;</code></li>
-</ul>
-</li>
-<li>Use customer key
-<ul>
-<li><code>server_side_encryption_customer_algorithm=&quot;AES256&quot;</code></li>
-<li><code>server_side_encryption_customer_key=&quot;base64-of-your-aes256-key&quot;</code></li>
-<li><code>server_side_encryption_customer_key_md5=&quot;base64-of-your-aes256-key-md5&quot;</code></li>
-</ul>
-</li>
-</ul>
-<p>After SSE have been configured, all requests send by this backed will attach those headers.</p>
-<p>Reference: <a href="https://docs.aws.amazon.com/AmazonS3/latest/rguide/serv-side-encryption.html">Protecting data using server-side encryption</a></p>
-<h3 id="example"><a href="#example">Example</a></h3><h4 id="via-builder"><a href="#via-builder">Via Builder</a></h4><h5 id="basic-setup"><a href="#basic-setup">Basic Setup</a></h5>
-<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use </span>anyhow::Result;
-<span class="kw">use </span>opendal::services::Wasabi;
-<span class="kw">use </span>opendal::Operator;
-
-<span class="attr">#[tokio::main]
-</span><span class="kw">async fn </span>main() -&gt; <span class="prelude-ty">Result</span>&lt;()&gt; {
-    <span class="comment">// Create s3 backend builder.
-    </span><span class="kw">let </span><span class="kw-2">mut </span>builder = Wasabi::default();
-    <span class="comment">// Set the root for s3, all operations will happen under this root.
-    //
-    // NOTE: the root must be absolute path.
-    </span>builder.root(<span class="string">&quot;/path/to/dir&quot;</span>);
-    <span class="comment">// Set the bucket name, this is required.
-    </span>builder.bucket(<span class="string">&quot;test&quot;</span>);
-    <span class="comment">// Set the endpoint.
-    //
-    // For examples:
-    // - &quot;https://s3.wasabisys.com&quot;
-    // - &quot;http://127.0.0.1:9000&quot;
-    // - &quot;https://oss-ap-northeast-1.aliyuncs.com&quot;
-    // - &quot;https://cos.ap-seoul.myqcloud.com&quot;
-    //
-    // Default to &quot;https://s3.wasabisys.com&quot;
-    </span>builder.endpoint(<span class="string">&quot;https://s3.wasabisys.com&quot;</span>);
-    <span class="comment">// Set the access_key_id and secret_access_key.
-    //
-    // OpenDAL will try load credential from the env.
-    // If credential not set and no valid credential in env, OpenDAL will
-    // send request without signing like anonymous user.
-    </span>builder.access_key_id(<span class="string">&quot;access_key_id&quot;</span>);
-    builder.secret_access_key(<span class="string">&quot;secret_access_key&quot;</span>);
-
-    <span class="kw">let </span>op: Operator = Operator::new(builder)<span class="question-mark">?</span>.finish();
-
-    <span class="prelude-val">Ok</span>(())
-}</code></pre></div>
-<h5 id="wasabi-with-sse-c"><a href="#wasabi-with-sse-c">Wasabi with SSE-C</a></h5>
-<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use </span>anyhow::Result;
-<span class="kw">use </span>opendal::services::Wasabi;
-<span class="kw">use </span>opendal::Operator;
-
-<span class="attr">#[tokio::main]
-</span><span class="kw">async fn </span>main() -&gt; <span class="prelude-ty">Result</span>&lt;()&gt; {
-    <span class="kw">let </span><span class="kw-2">mut </span>builder = Wasabi::default();
-
-    <span class="comment">// Enable SSE-C
-    </span>builder.server_side_encryption_with_customer_key(<span class="string">&quot;AES256&quot;</span>, <span class="string">&quot;customer_key&quot;</span>.as_bytes());
-
-    <span class="kw">let </span>op = Operator::new(builder)<span class="question-mark">?</span>.finish();
-
-    <span class="prelude-val">Ok</span>(())
-}</code></pre></div>
-<h5 id="wasabi-with-sse-kms-and-aws-managed-kms-key"><a href="#wasabi-with-sse-kms-and-aws-managed-kms-key">Wasabi with SSE-KMS and aws managed kms key</a></h5>
-<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use </span>anyhow::Result;
-<span class="kw">use </span>opendal::services::Wasabi;
-<span class="kw">use </span>opendal::Operator;
-
-<span class="attr">#[tokio::main]
-</span><span class="kw">async fn </span>main() -&gt; <span class="prelude-ty">Result</span>&lt;()&gt; {
-    <span class="kw">let </span><span class="kw-2">mut </span>builder = Wasabi::default();
-
-    <span class="comment">// Enable SSE-KMS with aws managed kms key
-    </span>builder.server_side_encryption_with_aws_managed_kms_key();
-
-    <span class="kw">let </span>op = Operator::new(builder)<span class="question-mark">?</span>.finish();
-
-    <span class="prelude-val">Ok</span>(())
-}</code></pre></div>
-<h5 id="wasabi-with-sse-kms-and-customer-managed-kms-key"><a href="#wasabi-with-sse-kms-and-customer-managed-kms-key">Wasabi with SSE-KMS and customer managed kms key</a></h5>
-<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use </span>anyhow::Result;
-<span class="kw">use </span>opendal::services::Wasabi;
-<span class="kw">use </span>opendal::Operator;
-
-<span class="attr">#[tokio::main]
-</span><span class="kw">async fn </span>main() -&gt; <span class="prelude-ty">Result</span>&lt;()&gt; {
-    <span class="kw">let </span><span class="kw-2">mut </span>builder = Wasabi::default();
-
-    <span class="comment">// Enable SSE-KMS with customer managed kms key
-    </span>builder.server_side_encryption_with_customer_managed_kms_key(<span class="string">&quot;aws_kms_key_id&quot;</span>);
-
-    <span class="kw">let </span>op = Operator::new(builder)<span class="question-mark">?</span>.finish();
-
-    <span class="prelude-val">Ok</span>(())
-}</code></pre></div>
-<h5 id="wasabi-with-sse-s3"><a href="#wasabi-with-sse-s3">Wasabi with SSE-S3</a></h5>
-<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use </span>anyhow::Result;
-<span class="kw">use </span>log::info;
-<span class="kw">use </span>opendal::services::Wasabi;
-<span class="kw">use </span>opendal::Operator;
-
-<span class="attr">#[tokio::main]
-</span><span class="kw">async fn </span>main() -&gt; <span class="prelude-ty">Result</span>&lt;()&gt; {
-    <span class="kw">let </span><span class="kw-2">mut </span>builder = Wasabi::default();
-
-    <span class="comment">// Enable SSE-S3
-    </span>builder.server_side_encryption_with_s3_key();
-
-    <span class="kw">let </span>op = Operator::new(builder)<span class="question-mark">?</span>.finish();
-
-    <span class="prelude-val">Ok</span>(())
-}</code></pre></div>
-</div></details><h2 id="implementations" class="small-section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-WasabiBuilder" class="impl"><a class="src rightside" href="../../src/opendal/services/wasabi/backend.rs.html#101-478">source</a><a href="#impl-WasabiBuilder" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.Wasabi.htm [...]
-<p>All operations will happen under this root.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.bucket" class="method"><a class="src rightside" href="../../src/opendal/services/wasabi/backend.rs.html#116-120">source</a><h4 class="code-header">pub fn <a href="#method.bucket" class="fn">bucket</a>(&amp;mut self, bucket: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.73.0/std/primitive.str.html">str</a>) -&gt; <a class="primitive" href="https://doc.rust-lang.org/1.73.0/std/primitive.re [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.endpoint" class="method"><a class="src rightside" href="../../src/opendal/services/wasabi/backend.rs.html#130-137">source</a><h4 class="code-header">pub fn <a href="#method.endpoint" class="fn">endpoint</a>(&amp;mut self, endpoint: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.73.0/std/primitive.str.html">str</a>) -&gt; <a class="primitive" href="https://doc.rust-lang.org/1.73.0/std/prim [...]
-<p>Endpoint must be full uri, e.g.</p>
-<ul>
-<li><code>https://s3.wasabisys.com</code> or <code>https://s3.{region}.wasabisys.com</code></li>
-</ul>
-<p>If user inputs endpoint without scheme like “s3.wasabisys.com”, we
-will prepend “https://” before it.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.region" class="method"><a class="src rightside" href="../../src/opendal/services/wasabi/backend.rs.html#143-149">source</a><h4 class="code-header">pub fn <a href="#method.region" class="fn">region</a>(&amp;mut self, region: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.73.0/std/primitive.str.html">str</a>) -&gt; <a class="primitive" href="https://doc.rust-lang.org/1.73.0/std/primitive.re [...]
-<ul>
-<li>If region is set, we will take user’s input first.</li>
-<li>If not, the default <code>us-east-1</code> will be used.</li>
-</ul>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.access_key_id" class="method"><a class="src rightside" href="../../src/opendal/services/wasabi/backend.rs.html#155-161">source</a><h4 class="code-header">pub fn <a href="#method.access_key_id" class="fn">access_key_id</a>(&amp;mut self, v: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.73.0/std/primitive.str.html">str</a>) -&gt; <a class="primitive" href="https://doc.rust-lang.org/1.73.0/ [...]
-<ul>
-<li>If access_key_id is set, we will take user’s input first.</li>
-<li>If not, we will try to load it from environment.</li>
-</ul>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.secret_access_key" class="method"><a class="src rightside" href="../../src/opendal/services/wasabi/backend.rs.html#167-173">source</a><h4 class="code-header">pub fn <a href="#method.secret_access_key" class="fn">secret_access_key</a>(&amp;mut self, v: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.73.0/std/primitive.str.html">str</a>) -&gt; <a class="primitive" href="https://doc.rust-lang [...]
-<ul>
-<li>If secret_access_key is set, we will take user’s input first.</li>
-<li>If not, we will try to load it from environment.</li>
-</ul>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.role_arn" class="method"><a class="src rightside" href="../../src/opendal/services/wasabi/backend.rs.html#176-182">source</a><h4 class="code-header">pub fn <a href="#method.role_arn" class="fn">role_arn</a>(&amp;mut self, v: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.73.0/std/primitive.str.html">str</a>) -&gt; <a class="primitive" href="https://doc.rust-lang.org/1.73.0/std/primitive.r [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.external_id" class="method"><a class="src rightside" href="../../src/opendal/services/wasabi/backend.rs.html#185-191">source</a><h4 class="code-header">pub fn <a href="#method.external_id" class="fn">external_id</a>(&amp;mut self, v: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.73.0/std/primitive.str.html">str</a>) -&gt; <a class="primitive" href="https://doc.rust-lang.org/1.73.0/std/pr [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.default_storage_class" class="method"><a class="src rightside" href="../../src/opendal/services/wasabi/backend.rs.html#200-206">source</a><h4 class="code-header">pub fn <a href="#method.default_storage_class" class="fn">default_storage_class</a>(&amp;mut self, v: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.73.0/std/primitive.str.html">str</a>) -&gt; <a class="primitive" href="https://d [...]
-Unlike S3, wasabi only supports one single storage class,
-which is most like standard S3 storage class,
-check <code>https://docs.wasabi.com/docs/operations-on-objects</code> for more details.</p>
-<p>Available values:</p>
-<ul>
-<li><code>STANDARD</code></li>
-</ul>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.server_side_encryption" class="method"><a class="src rightside" href="../../src/opendal/services/wasabi/backend.rs.html#218-224">source</a><h4 class="code-header">pub fn <a href="#method.server_side_encryption" class="fn">server_side_encryption</a>(&amp;mut self, v: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.73.0/std/primitive.str.html">str</a>) -&gt; <a class="primitive" href="https: [...]
-<p>Available values: <code>AES256</code>, <code>aws:kms</code>.</p>
-<h5 id="note"><a href="#note">Note</a></h5>
-<p>This function is the low-level setting for SSE related features.</p>
-<p>SSE related options should be set carefully to make them works.
-Please use <code>server_side_encryption_with_*</code> helpers if even possible.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.server_side_encryption_aws_kms_key_id" class="method"><a class="src rightside" href="../../src/opendal/services/wasabi/backend.rs.html#243-249">source</a><h4 class="code-header">pub fn <a href="#method.server_side_encryption_aws_kms_key_id" class="fn">server_side_encryption_aws_kms_key_id</a>(&amp;mut self, v: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.73.0/std/primitive.str.html">str [...]
-<ul>
-<li>If <code>server_side_encryption</code> set to <code>aws:kms</code>, and <code>server_side_encryption_aws_kms_key_id</code>
-is not set, S3 will use aws managed kms key to encrypt data.</li>
-<li>If <code>server_side_encryption</code> set to <code>aws:kms</code>, and <code>server_side_encryption_aws_kms_key_id</code>
-is a valid kms key id, S3 will use the provided kms key to encrypt data.</li>
-<li>If the <code>server_side_encryption_aws_kms_key_id</code> is invalid or not found, an error will be
-returned.</li>
-<li>If <code>server_side_encryption</code> is not <code>aws:kms</code>, setting <code>server_side_encryption_aws_kms_key_id</code>
-is a noop.</li>
-</ul>
-<h5 id="note-1"><a href="#note-1">Note</a></h5>
-<p>This function is the low-level setting for SSE related features.</p>
-<p>SSE related options should be set carefully to make them works.
-Please use <code>server_side_encryption_with_*</code> helpers if even possible.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.server_side_encryption_customer_algorithm" class="method"><a class="src rightside" href="../../src/opendal/services/wasabi/backend.rs.html#261-267">source</a><h4 class="code-header">pub fn <a href="#method.server_side_encryption_customer_algorithm" class="fn">server_side_encryption_customer_algorithm</a>(
-    &amp;mut self,
-    v: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.73.0/std/primitive.str.html">str</a>
-) -&gt; <a class="primitive" href="https://doc.rust-lang.org/1.73.0/std/primitive.reference.html">&amp;mut Self</a></h4></section></summary><div class="docblock"><p>Set server_side_encryption_customer_algorithm for this backend.</p>
-<p>Available values: <code>AES256</code>.</p>
-<h5 id="note-2"><a href="#note-2">Note</a></h5>
-<p>This function is the low-level setting for SSE related features.</p>
-<p>SSE related options should be set carefully to make them works.
-Please use <code>server_side_encryption_with_*</code> helpers if even possible.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.server_side_encryption_customer_key" class="method"><a class="src rightside" href="../../src/opendal/services/wasabi/backend.rs.html#282-288">source</a><h4 class="code-header">pub fn <a href="#method.server_side_encryption_customer_key" class="fn">server_side_encryption_customer_key</a>(&amp;mut self, v: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.73.0/std/primitive.str.html">str</a>)  [...]
-<h5 id="args"><a href="#args">Args</a></h5>
-<p><code>v</code>: base64 encoded key that matches algorithm specified in
-<code>server_side_encryption_customer_algorithm</code>.</p>
-<h5 id="note-3"><a href="#note-3">Note</a></h5>
-<p>This function is the low-level setting for SSE related features.</p>
-<p>SSE related options should be set carefully to make them works.
-Please use <code>server_side_encryption_with_*</code> helpers if even possible.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.server_side_encryption_customer_key_md5" class="method"><a class="src rightside" href="../../src/opendal/services/wasabi/backend.rs.html#302-308">source</a><h4 class="code-header">pub fn <a href="#method.server_side_encryption_customer_key_md5" class="fn">server_side_encryption_customer_key_md5</a>(&amp;mut self, v: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.73.0/std/primitive.str.htm [...]
-<h5 id="args-1"><a href="#args-1">Args</a></h5>
-<p><code>v</code>: MD5 digest of key specified in <code>server_side_encryption_customer_key</code>.</p>
-<h5 id="note-4"><a href="#note-4">Note</a></h5>
-<p>This function is the low-level setting for SSE related features.</p>
-<p>SSE related options should be set carefully to make them works.
-Please use <code>server_side_encryption_with_*</code> helpers if even possible.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.server_side_encryption_with_aws_managed_kms_key" class="method"><a class="src rightside" href="../../src/opendal/services/wasabi/backend.rs.html#315-318">source</a><h4 class="code-header">pub fn <a href="#method.server_side_encryption_with_aws_managed_kms_key" class="fn">server_side_encryption_with_aws_managed_kms_key</a>(&amp;mut self) -&gt; <a class="primitive" href="https://doc.rust-lang.org/1.73.0 [...]
-<p>As known as: SSE-KMS</p>
-<p>NOTE: This function should not be used along with other <code>server_side_encryption_with_</code> functions.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.server_side_encryption_with_customer_managed_kms_key" class="method"><a class="src rightside" href="../../src/opendal/services/wasabi/backend.rs.html#325-332">source</a><h4 class="code-header">pub fn <a href="#method.server_side_encryption_with_customer_managed_kms_key" class="fn">server_side_encryption_with_customer_managed_kms_key</a>(
-    &amp;mut self,
-    aws_kms_key_id: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.73.0/std/primitive.str.html">str</a>
-) -&gt; <a class="primitive" href="https://doc.rust-lang.org/1.73.0/std/primitive.reference.html">&amp;mut Self</a></h4></section></summary><div class="docblock"><p>Enable server side encryption with customer managed kms key</p>
-<p>As known as: SSE-KMS</p>
-<p>NOTE: This function should not be used along with other <code>server_side_encryption_with_</code> functions.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.server_side_encryption_with_s3_key" class="method"><a class="src rightside" href="../../src/opendal/services/wasabi/backend.rs.html#339-342">source</a><h4 class="code-header">pub fn <a href="#method.server_side_encryption_with_s3_key" class="fn">server_side_encryption_with_s3_key</a>(&amp;mut self) -&gt; <a class="primitive" href="https://doc.rust-lang.org/1.73.0/std/primitive.reference.html">&amp;mut [...]
-<p>As known as: SSE-S3</p>
-<p>NOTE: This function should not be used along with other <code>server_side_encryption_with_</code> functions.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.server_side_encryption_with_customer_key" class="method"><a class="src rightside" href="../../src/opendal/services/wasabi/backend.rs.html#349-359">source</a><h4 class="code-header">pub fn <a href="#method.server_side_encryption_with_customer_key" class="fn">server_side_encryption_with_customer_key</a>(
-    &amp;mut self,
-    algorithm: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.73.0/std/primitive.str.html">str</a>,
-    key: &amp;[<a class="primitive" href="https://doc.rust-lang.org/1.73.0/std/primitive.u8.html">u8</a>]
-) -&gt; <a class="primitive" href="https://doc.rust-lang.org/1.73.0/std/primitive.reference.html">&amp;mut Self</a></h4></section></summary><div class="docblock"><p>Enable server side encryption with customer key.</p>
-<p>As known as: SSE-C</p>
-<p>NOTE: This function should not be used along with other <code>server_side_encryption_with_</code> functions.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.security_token" class="method"><a class="src rightside" href="../../src/opendal/services/wasabi/backend.rs.html#366-371">source</a><h4 class="code-header">pub fn <a href="#method.security_token" class="fn">security_token</a>(&amp;mut self, token: &amp;<a class="primitive" href="https://doc.rust-lang.org/1.73.0/std/primitive.str.html">str</a>) -&gt; <a class="primitive" href="https://doc.rust-lang.org/ [...]
-<h5 id="warning"><a href="#warning">Warning</a></h5>
-<p>security token’s lifetime is short and requires users to refresh in time.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.disable_config_load" class="method"><a class="src rightside" href="../../src/opendal/services/wasabi/backend.rs.html#380-383">source</a><h4 class="code-header">pub fn <a href="#method.disable_config_load" class="fn">disable_config_load</a>(&amp;mut self) -&gt; <a class="primitive" href="https://doc.rust-lang.org/1.73.0/std/primitive.reference.html">&amp;mut Self</a></h4></section></summary><div class= [...]
-environment.</p>
-<p>For examples:</p>
-<ul>
-<li>envs like <code>AWS_ACCESS_KEY_ID</code></li>
-<li>files like <code>~/.aws/config</code></li>
-</ul>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.disable_ec2_metadata" class="method"><a class="src rightside" href="../../src/opendal/services/wasabi/backend.rs.html#389-392">source</a><h4 class="code-header">pub fn <a href="#method.disable_ec2_metadata" class="fn">disable_ec2_metadata</a>(&amp;mut self) -&gt; <a class="primitive" href="https://doc.rust-lang.org/1.73.0/std/primitive.reference.html">&amp;mut Self</a></h4></section></summary><div cla [...]
-<p>This option is used to disable the default behavior of opendal
-to load credential from ec2 metadata, a.k.a, IMDSv2</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.enable_virtual_host_style" class="method"><a class="src rightside" href="../../src/opendal/services/wasabi/backend.rs.html#399-402">source</a><h4 class="code-header">pub fn <a href="#method.enable_virtual_host_style" class="fn">enable_virtual_host_style</a>(&amp;mut self) -&gt; <a class="primitive" href="https://doc.rust-lang.org/1.73.0/std/primitive.reference.html">&amp;mut Self</a></h4></section></s [...]
-in virtual host style instead of path style.</p>
-<ul>
-<li>By default, opendal will send API to <code>https://s3.us-east-1.wasabisys.com/bucket_name</code></li>
-<li>Enabled, opendal will send API to <code>https://bucket_name.s3.us-east-1.wasabisys.com</code></li>
-</ul>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.customed_credential_load" class="method"><a class="src rightside" href="../../src/opendal/services/wasabi/backend.rs.html#405-408">source</a><h4 class="code-header">pub fn <a href="#method.customed_credential_load" class="fn">customed_credential_load</a>(
-    &amp;mut self,
-    cred: <a class="struct" href="https://doc.rust-lang.org/1.73.0/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn AwsCredentialLoad&gt;
-) -&gt; <a class="primitive" href="https://doc.rust-lang.org/1.73.0/std/primitive.reference.html">&amp;mut Self</a></h4></section></summary><div class="docblock"><p>Adding a customed credential load for service.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.http_client" class="method"><a class="src rightside" href="../../src/opendal/services/wasabi/backend.rs.html#416-419">source</a><h4 class="code-header">pub fn <a href="#method.http_client" class="fn">http_client</a>(&amp;mut self, client: <a class="struct" href="../raw/struct.HttpClient.html" title="struct opendal::raw::HttpClient">HttpClient</a>) -&gt; <a class="primitive" href="https://doc.rust-lang [...]
-<h5 id="notes"><a href="#notes">Notes</a></h5>
-<p>This API is part of OpenDAL’s Raw API. <code>HttpClient</code> could be changed
-during minor updates.</p>
-</div></details></div></details></div><h2 id="trait-implementations" class="small-section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Builder-for-WasabiBuilder" class="impl"><a class="src rightside" href="../../src/opendal/services/wasabi/backend.rs.html#480-661">source</a><a href="#impl-Builder-for-WasabiBuilder" class="anchor">§</a> [...]
-    T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/1.73.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/1.73.0/src/core/any.rs.html#136">source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a href= [...]
-    T: ?<a class="trait" href="https://doc.rust-lang.org/1.73.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/1.73.0/src/core/borrow.rs.html#210">source</a><a href="#method.borrow" class="anchor">§</a><h4 class="code-header">fn <a href="https:// [...]
-    T: ?<a class="trait" href="https://doc.rust-lang.org/1.73.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow_mut" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/1.73.0/src/core/borrow.rs.html#217">source</a><a href="#method.borrow_mut" class="anchor">§</a><h4 class="code-header">fn <a href=" [...]
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.73.0/core/convert/trait.Into.html" title="trait core::convert::Into">Into</a>&lt;T&gt;,</span></h4></section></summary><div class='docblock'>Converts <code>self</code> into <code>T</code> using <code>Into&lt;T&gt;</code>. <a>Read more</a></div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-CoproductSubsetter%3CCNil,+HNil%3E-for-WasabiBuilder" class="impl"><a href="#impl-Coproduc [...]
-    self
-) -&gt; <a class="enum" href="https://doc.rust-lang.org/1.73.0/core/result/enum.Result.html" title="enum core::result::Result">Result</a>&lt;CNil, &lt;Choices as CoproductSubsetter&lt;CNil, HNil&gt;&gt;::Remainder&gt;</h4></section></summary><div class='docblock'>Extract a subset of the possible types in a coproduct (or get the remaining possibilities) <a>Read more</a></div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-FmtForward-for-Was [...]
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.73.0/core/fmt/trait.Binary.html" title="trait core::fmt::Binary">Binary</a>,</span></h4></section></summary><div class='docblock'>Causes <code>self</code> to use its <code>Binary</code> implementation when <code>Debug</code>-formatted.</div></details><details class="toggle method-toggle" open><summary><section id="method.fmt_display" class="method trait-impl"><a href="#method.fmt_display" class="anchor">§</a><h4 class="code-hea [...]
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.73.0/core/fmt/trait.Display.html" title="trait core::fmt::Display">Display</a>,</span></h4></section></summary><div class='docblock'>Causes <code>self</code> to use its <code>Display</code> implementation when
-<code>Debug</code>-formatted.</div></details><details class="toggle method-toggle" open><summary><section id="method.fmt_lower_exp" class="method trait-impl"><a href="#method.fmt_lower_exp" class="anchor">§</a><h4 class="code-header">fn <a class="fn">fmt_lower_exp</a>(self) -&gt; FmtLowerExp&lt;Self&gt;<span class="where fmt-newline">where
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.73.0/core/fmt/trait.LowerExp.html" title="trait core::fmt::LowerExp">LowerExp</a>,</span></h4></section></summary><div class='docblock'>Causes <code>self</code> to use its <code>LowerExp</code> implementation when
-<code>Debug</code>-formatted.</div></details><details class="toggle method-toggle" open><summary><section id="method.fmt_lower_hex" class="method trait-impl"><a href="#method.fmt_lower_hex" class="anchor">§</a><h4 class="code-header">fn <a class="fn">fmt_lower_hex</a>(self) -&gt; FmtLowerHex&lt;Self&gt;<span class="where fmt-newline">where
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.73.0/core/fmt/trait.LowerHex.html" title="trait core::fmt::LowerHex">LowerHex</a>,</span></h4></section></summary><div class='docblock'>Causes <code>self</code> to use its <code>LowerHex</code> implementation when
-<code>Debug</code>-formatted.</div></details><details class="toggle method-toggle" open><summary><section id="method.fmt_octal" class="method trait-impl"><a href="#method.fmt_octal" class="anchor">§</a><h4 class="code-header">fn <a class="fn">fmt_octal</a>(self) -&gt; FmtOctal&lt;Self&gt;<span class="where fmt-newline">where
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.73.0/core/fmt/trait.Octal.html" title="trait core::fmt::Octal">Octal</a>,</span></h4></section></summary><div class='docblock'>Causes <code>self</code> to use its <code>Octal</code> implementation when <code>Debug</code>-formatted.</div></details><details class="toggle method-toggle" open><summary><section id="method.fmt_pointer" class="method trait-impl"><a href="#method.fmt_pointer" class="anchor">§</a><h4 class="code-header" [...]
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.73.0/core/fmt/trait.Pointer.html" title="trait core::fmt::Pointer">Pointer</a>,</span></h4></section></summary><div class='docblock'>Causes <code>self</code> to use its <code>Pointer</code> implementation when
-<code>Debug</code>-formatted.</div></details><details class="toggle method-toggle" open><summary><section id="method.fmt_upper_exp" class="method trait-impl"><a href="#method.fmt_upper_exp" class="anchor">§</a><h4 class="code-header">fn <a class="fn">fmt_upper_exp</a>(self) -&gt; FmtUpperExp&lt;Self&gt;<span class="where fmt-newline">where
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.73.0/core/fmt/trait.UpperExp.html" title="trait core::fmt::UpperExp">UpperExp</a>,</span></h4></section></summary><div class='docblock'>Causes <code>self</code> to use its <code>UpperExp</code> implementation when
-<code>Debug</code>-formatted.</div></details><details class="toggle method-toggle" open><summary><section id="method.fmt_upper_hex" class="method trait-impl"><a href="#method.fmt_upper_hex" class="anchor">§</a><h4 class="code-header">fn <a class="fn">fmt_upper_hex</a>(self) -&gt; FmtUpperHex&lt;Self&gt;<span class="where fmt-newline">where
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.73.0/core/fmt/trait.UpperHex.html" title="trait core::fmt::UpperHex">UpperHex</a>,</span></h4></section></summary><div class='docblock'>Causes <code>self</code> to use its <code>UpperHex</code> implementation when
-<code>Debug</code>-formatted.</div></details><details class="toggle method-toggle" open><summary><section id="method.fmt_list" class="method trait-impl"><a href="#method.fmt_list" class="anchor">§</a><h4 class="code-header">fn <a class="fn">fmt_list</a>(self) -&gt; FmtList&lt;Self&gt;<span class="where fmt-newline">where
-    <a class="primitive" href="https://doc.rust-lang.org/1.73.0/std/primitive.reference.html">&amp;'a Self</a>: for&lt;'a&gt; <a class="trait" href="https://doc.rust-lang.org/1.73.0/core/iter/traits/collect/trait.IntoIterator.html" title="trait core::iter::traits::collect::IntoIterator">IntoIterator</a>,</span></h4></section></summary><div class='docblock'>Formats each item in a sequence. <a>Read more</a></div></details></div></details><details class="toggle implementors-toggle"><summary [...]
-</div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-FutureExt-for-WasabiBuilder" class="impl"><a href="#impl-FutureExt-for-WasabiBuilder" class="anchor">§</a><h3 class="code-header">impl&lt;T&gt; FutureExt for T</h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.with_context" class="method trait-impl"><a href="#method.with_context" class="anchor">§</a><h4 class="code-he [...]
-wrapper. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.with_current_context" class="method trait-impl"><a href="#method.with_current_context" class="anchor">§</a><h4 class="code-header">fn <a class="fn">with_current_context</a>(self) -&gt; WithContext&lt;Self&gt;</h4></section></summary><div class='docblock'>Attaches the current <a href="crate::Context"><code>Context</code></a> to this type, returning a <code>WithContext</code>
-wrapper. <a>Read more</a></div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-Instrument-for-WasabiBuilder" class="impl"><a href="#impl-Instrument-for-WasabiBuilder" class="anchor">§</a><h3 class="code-header">impl&lt;T&gt; Instrument for T</h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.instrument" class="method trait-impl"><a href="#method.instrument" class="anchor" [...]
-<code>Instrumented</code> wrapper. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.in_current_span" class="method trait-impl"><a href="#method.in_current_span" class="anchor">§</a><h4 class="code-header">fn <a class="fn">in_current_span</a>(self) -&gt; Instrumented&lt;Self&gt;</h4></section></summary><div class='docblock'>Instruments this type with the <a href="super::Span::current()">current</a> <a href="crate::Span"><code>Span</co [...]
-<code>Instrumented</code> wrapper. <a>Read more</a></div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-Into%3CU%3E-for-WasabiBuilder" class="impl"><a class="src rightside" href="https://doc.rust-lang.org/1.73.0/src/core/convert/mod.rs.html#706">source</a><a href="#impl-Into%3CU%3E-for-WasabiBuilder" class="anchor">§</a><h3 class="code-header">impl&lt;T, U&gt; <a class="trait" href="https://doc.rust-lang.org/1.73.0/core/convert/trait.Into [...]
-    U: <a class="trait" href="https://doc.rust-lang.org/1.73.0/core/convert/trait.From.html" title="trait core::convert::From">From</a>&lt;T&gt;,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.into" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/1.73.0/src/core/convert/mod.rs.html#715">source</a><a href="#method.into" class="anchor">§</a><h4 class="code-header">fn <a href=" [...]
-<p>That is, this conversion is whatever the implementation of
-<code><a href="https://doc.rust-lang.org/1.73.0/core/convert/trait.From.html" title="trait core::convert::From">From</a>&lt;T&gt; for U</code> chooses to do.</p>
-</div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-IntoRequest%3CT%3E-for-WasabiBuilder" class="impl"><a class="src rightside" href="https://docs.rs/tonic/0.9.2/src/tonic/request.rs.html#384">source</a><a href="#impl-IntoRequest%3CT%3E-for-WasabiBuilder" class="anchor">§</a><h3 class="code-header">impl&lt;T&gt; <a class="trait" href="https://docs.rs/tonic/0.9.2/tonic/request/trait.IntoRequest.html" title="trait tonic::request::IntoReque [...]
-    U: LiftFrom&lt;T, I&gt;,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.lift_into" class="method trait-impl"><a href="#method.lift_into" class="anchor">§</a><h4 class="code-header">fn <a class="fn">lift_into</a>(self) -&gt; U</h4></section></summary><div class='docblock'>Performs the indexed conversion.</div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-P [...]
-    T: ?<a class="trait" href="https://doc.rust-lang.org/1.73.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.pipe" class="method trait-impl"><a href="#method.pipe" class="anchor">§</a><h4 class="code-header">fn <a class="fn">pipe</a>&lt;R&gt;(self, func: impl <a class="trait" href="https://doc.rust-lang.org/1.73.0/core/ops/function/t [...]
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.73.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h4></section></summary><div class='docblock'>Pipes by value. This is generally the method you want to use. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.pipe_ref" class="method trait-impl"><a href="#method.pipe_ref" class="anchor">§</a><h4 class="code-header">fn <a class="fn">pipe_ref [...]
-    R: 'a,</span></h4></section></summary><div class='docblock'>Borrows <code>self</code> and passes that borrow into the pipe function. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.pipe_ref_mut" class="method trait-impl"><a href="#method.pipe_ref_mut" class="anchor">§</a><h4 class="code-header">fn <a class="fn">pipe_ref_mut</a>&lt;'a, R&gt;(&amp;'a mut self, func: impl <a class="trait" href="https://doc.rust-lang.org/1.73.0/core [...]
-    R: 'a,</span></h4></section></summary><div class='docblock'>Mutably borrows <code>self</code> and passes that borrow into the pipe function. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.pipe_borrow" class="method trait-impl"><a href="#method.pipe_borrow" class="anchor">§</a><h4 class="code-header">fn <a class="fn">pipe_borrow</a>&lt;'a, B, R&gt;(&amp;'a self, func: impl <a class="trait" href="https://doc.rust-lang.org/1.73.0/ [...]
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.73.0/core/borrow/trait.Borrow.html" title="trait core::borrow::Borrow">Borrow</a>&lt;B&gt;,
-    B: 'a + ?<a class="trait" href="https://doc.rust-lang.org/1.73.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,
-    R: 'a,</span></h4></section></summary><div class='docblock'>Borrows <code>self</code>, then passes <code>self.borrow()</code> into the pipe function. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.pipe_borrow_mut" class="method trait-impl"><a href="#method.pipe_borrow_mut" class="anchor">§</a><h4 class="code-header">fn <a class="fn">pipe_borrow_mut</a>&lt;'a, B, R&gt;(
-    &amp;'a mut self,
-    func: impl <a class="trait" href="https://doc.rust-lang.org/1.73.0/core/ops/function/trait.FnOnce.html" title="trait core::ops::function::FnOnce">FnOnce</a>(<a class="primitive" href="https://doc.rust-lang.org/1.73.0/std/primitive.reference.html">&amp;'a mut B</a>) -&gt; R
-) -&gt; R<span class="where fmt-newline">where
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.73.0/core/borrow/trait.BorrowMut.html" title="trait core::borrow::BorrowMut">BorrowMut</a>&lt;B&gt;,
-    B: 'a + ?<a class="trait" href="https://doc.rust-lang.org/1.73.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,
-    R: 'a,</span></h4></section></summary><div class='docblock'>Mutably borrows <code>self</code>, then passes <code>self.borrow_mut()</code> into the pipe
-function. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.pipe_as_ref" class="method trait-impl"><a href="#method.pipe_as_ref" class="anchor">§</a><h4 class="code-header">fn <a class="fn">pipe_as_ref</a>&lt;'a, U, R&gt;(&amp;'a self, func: impl <a class="trait" href="https://doc.rust-lang.org/1.73.0/core/ops/function/trait.FnOnce.html" title="trait core::ops::function::FnOnce">FnOnce</a>(<a class="primitive" href="https://doc.rust-l [...]
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.73.0/core/convert/trait.AsRef.html" title="trait core::convert::AsRef">AsRef</a>&lt;U&gt;,
-    U: 'a + ?<a class="trait" href="https://doc.rust-lang.org/1.73.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,
-    R: 'a,</span></h4></section></summary><div class='docblock'>Borrows <code>self</code>, then passes <code>self.as_ref()</code> into the pipe function.</div></details><details class="toggle method-toggle" open><summary><section id="method.pipe_as_mut" class="method trait-impl"><a href="#method.pipe_as_mut" class="anchor">§</a><h4 class="code-header">fn <a class="fn">pipe_as_mut</a>&lt;'a, U, R&gt;(&amp;'a mut self, func: impl <a class="trait" href="https://doc.rust-lang.org/1.73.0/core [...]
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.73.0/core/convert/trait.AsMut.html" title="trait core::convert::AsMut">AsMut</a>&lt;U&gt;,
-    U: 'a + ?<a class="trait" href="https://doc.rust-lang.org/1.73.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,
-    R: 'a,</span></h4></section></summary><div class='docblock'>Mutably borrows <code>self</code>, then passes <code>self.as_mut()</code> into the pipe
-function.</div></details><details class="toggle method-toggle" open><summary><section id="method.pipe_deref" class="method trait-impl"><a href="#method.pipe_deref" class="anchor">§</a><h4 class="code-header">fn <a class="fn">pipe_deref</a>&lt;'a, T, R&gt;(&amp;'a self, func: impl <a class="trait" href="https://doc.rust-lang.org/1.73.0/core/ops/function/trait.FnOnce.html" title="trait core::ops::function::FnOnce">FnOnce</a>(<a class="primitive" href="https://doc.rust-lang.org/1.73.0/std/p [...]
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.73.0/core/ops/deref/trait.Deref.html" title="trait core::ops::deref::Deref">Deref</a>&lt;Target = T&gt;,
-    T: 'a + ?<a class="trait" href="https://doc.rust-lang.org/1.73.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,
-    R: 'a,</span></h4></section></summary><div class='docblock'>Borrows <code>self</code>, then passes <code>self.deref()</code> into the pipe function.</div></details><details class="toggle method-toggle" open><summary><section id="method.pipe_deref_mut" class="method trait-impl"><a href="#method.pipe_deref_mut" class="anchor">§</a><h4 class="code-header">fn <a class="fn">pipe_deref_mut</a>&lt;'a, T, R&gt;(
-    &amp;'a mut self,
-    func: impl <a class="trait" href="https://doc.rust-lang.org/1.73.0/core/ops/function/trait.FnOnce.html" title="trait core::ops::function::FnOnce">FnOnce</a>(<a class="primitive" href="https://doc.rust-lang.org/1.73.0/std/primitive.reference.html">&amp;'a mut T</a>) -&gt; R
-) -&gt; R<span class="where fmt-newline">where
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.73.0/core/ops/deref/trait.DerefMut.html" title="trait core::ops::deref::DerefMut">DerefMut</a>&lt;Target = T&gt; + <a class="trait" href="https://doc.rust-lang.org/1.73.0/core/ops/deref/trait.Deref.html" title="trait core::ops::deref::Deref">Deref</a>,
-    T: 'a + ?<a class="trait" href="https://doc.rust-lang.org/1.73.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,
-    R: 'a,</span></h4></section></summary><div class='docblock'>Mutably borrows <code>self</code>, then passes <code>self.deref_mut()</code> into the pipe
-function.</div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-Pointable-for-WasabiBuilder" class="impl"><a href="#impl-Pointable-for-WasabiBuilder" class="anchor">§</a><h3 class="code-header">impl&lt;T&gt; Pointable for T</h3></section></summary><div class="impl-items"><details class="toggle" open><summary><section id="associatedconstant.ALIGN" class="associatedconstant trait-impl"><a href="#associatedconstant.ALIGN" class="anchor">§</a>< [...]
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.73.0/core/borrow/trait.Borrow.html" title="trait core::borrow::Borrow">Borrow</a>&lt;B&gt;,
-    B: ?<a class="trait" href="https://doc.rust-lang.org/1.73.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h4></section></summary><div class='docblock'>Immutable access to the <code>Borrow&lt;B&gt;</code> of a value. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.tap_borrow_mut" class="method trait-impl"><a href="#method.tap_borrow_mut" class="anchor">§</a><h4 class="code-header">fn <a class= [...]
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.73.0/core/borrow/trait.BorrowMut.html" title="trait core::borrow::BorrowMut">BorrowMut</a>&lt;B&gt;,
-    B: ?<a class="trait" href="https://doc.rust-lang.org/1.73.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h4></section></summary><div class='docblock'>Mutable access to the <code>BorrowMut&lt;B&gt;</code> of a value. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.tap_ref" class="method trait-impl"><a href="#method.tap_ref" class="anchor">§</a><h4 class="code-header">fn <a class="fn">tap_ref< [...]
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.73.0/core/convert/trait.AsRef.html" title="trait core::convert::AsRef">AsRef</a>&lt;R&gt;,
-    R: ?<a class="trait" href="https://doc.rust-lang.org/1.73.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h4></section></summary><div class='docblock'>Immutable access to the <code>AsRef&lt;R&gt;</code> view of a value. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.tap_ref_mut" class="method trait-impl"><a href="#method.tap_ref_mut" class="anchor">§</a><h4 class="code-header">fn <a class="f [...]
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.73.0/core/convert/trait.AsMut.html" title="trait core::convert::AsMut">AsMut</a>&lt;R&gt;,
-    R: ?<a class="trait" href="https://doc.rust-lang.org/1.73.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h4></section></summary><div class='docblock'>Mutable access to the <code>AsMut&lt;R&gt;</code> view of a value. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.tap_deref" class="method trait-impl"><a href="#method.tap_deref" class="anchor">§</a><h4 class="code-header">fn <a class="fn">tap [...]
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.73.0/core/ops/deref/trait.Deref.html" title="trait core::ops::deref::Deref">Deref</a>&lt;Target = T&gt;,
-    T: ?<a class="trait" href="https://doc.rust-lang.org/1.73.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h4></section></summary><div class='docblock'>Immutable access to the <code>Deref::Target</code> of a value. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.tap_deref_mut" class="method trait-impl"><a href="#method.tap_deref_mut" class="anchor">§</a><h4 class="code-header">fn <a class="fn" [...]
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.73.0/core/ops/deref/trait.DerefMut.html" title="trait core::ops::deref::DerefMut">DerefMut</a>&lt;Target = T&gt; + <a class="trait" href="https://doc.rust-lang.org/1.73.0/core/ops/deref/trait.Deref.html" title="trait core::ops::deref::Deref">Deref</a>,
-    T: ?<a class="trait" href="https://doc.rust-lang.org/1.73.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h4></section></summary><div class='docblock'>Mutable access to the <code>Deref::Target</code> of a value. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.tap_dbg" class="method trait-impl"><a href="#method.tap_dbg" class="anchor">§</a><h4 class="code-header">fn <a class="fn">tap_dbg</a>(s [...]
-builds.</div></details><details class="toggle method-toggle" open><summary><section id="method.tap_borrow_dbg" class="method trait-impl"><a href="#method.tap_borrow_dbg" class="anchor">§</a><h4 class="code-header">fn <a class="fn">tap_borrow_dbg</a>&lt;B&gt;(self, func: impl <a class="trait" href="https://doc.rust-lang.org/1.73.0/core/ops/function/trait.FnOnce.html" title="trait core::ops::function::FnOnce">FnOnce</a>(<a class="primitive" href="https://doc.rust-lang.org/1.73.0/std/primit [...]
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.73.0/core/borrow/trait.Borrow.html" title="trait core::borrow::Borrow">Borrow</a>&lt;B&gt;,
-    B: ?<a class="trait" href="https://doc.rust-lang.org/1.73.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h4></section></summary><div class='docblock'>Calls <code>.tap_borrow()</code> only in debug builds, and is erased in release
-builds.</div></details><details class="toggle method-toggle" open><summary><section id="method.tap_borrow_mut_dbg" class="method trait-impl"><a href="#method.tap_borrow_mut_dbg" class="anchor">§</a><h4 class="code-header">fn <a class="fn">tap_borrow_mut_dbg</a>&lt;B&gt;(self, func: impl <a class="trait" href="https://doc.rust-lang.org/1.73.0/core/ops/function/trait.FnOnce.html" title="trait core::ops::function::FnOnce">FnOnce</a>(<a class="primitive" href="https://doc.rust-lang.org/1.73. [...]
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.73.0/core/borrow/trait.BorrowMut.html" title="trait core::borrow::BorrowMut">BorrowMut</a>&lt;B&gt;,
-    B: ?<a class="trait" href="https://doc.rust-lang.org/1.73.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h4></section></summary><div class='docblock'>Calls <code>.tap_borrow_mut()</code> only in debug builds, and is erased in release
-builds.</div></details><details class="toggle method-toggle" open><summary><section id="method.tap_ref_dbg" class="method trait-impl"><a href="#method.tap_ref_dbg" class="anchor">§</a><h4 class="code-header">fn <a class="fn">tap_ref_dbg</a>&lt;R&gt;(self, func: impl <a class="trait" href="https://doc.rust-lang.org/1.73.0/core/ops/function/trait.FnOnce.html" title="trait core::ops::function::FnOnce">FnOnce</a>(<a class="primitive" href="https://doc.rust-lang.org/1.73.0/std/primitive.refer [...]
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.73.0/core/convert/trait.AsRef.html" title="trait core::convert::AsRef">AsRef</a>&lt;R&gt;,
-    R: ?<a class="trait" href="https://doc.rust-lang.org/1.73.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h4></section></summary><div class='docblock'>Calls <code>.tap_ref()</code> only in debug builds, and is erased in release
-builds.</div></details><details class="toggle method-toggle" open><summary><section id="method.tap_ref_mut_dbg" class="method trait-impl"><a href="#method.tap_ref_mut_dbg" class="anchor">§</a><h4 class="code-header">fn <a class="fn">tap_ref_mut_dbg</a>&lt;R&gt;(self, func: impl <a class="trait" href="https://doc.rust-lang.org/1.73.0/core/ops/function/trait.FnOnce.html" title="trait core::ops::function::FnOnce">FnOnce</a>(<a class="primitive" href="https://doc.rust-lang.org/1.73.0/std/pri [...]
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.73.0/core/convert/trait.AsMut.html" title="trait core::convert::AsMut">AsMut</a>&lt;R&gt;,
-    R: ?<a class="trait" href="https://doc.rust-lang.org/1.73.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h4></section></summary><div class='docblock'>Calls <code>.tap_ref_mut()</code> only in debug builds, and is erased in release
-builds.</div></details><details class="toggle method-toggle" open><summary><section id="method.tap_deref_dbg" class="method trait-impl"><a href="#method.tap_deref_dbg" class="anchor">§</a><h4 class="code-header">fn <a class="fn">tap_deref_dbg</a>&lt;T&gt;(self, func: impl <a class="trait" href="https://doc.rust-lang.org/1.73.0/core/ops/function/trait.FnOnce.html" title="trait core::ops::function::FnOnce">FnOnce</a>(<a class="primitive" href="https://doc.rust-lang.org/1.73.0/std/primitive [...]
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.73.0/core/ops/deref/trait.Deref.html" title="trait core::ops::deref::Deref">Deref</a>&lt;Target = T&gt;,
-    T: ?<a class="trait" href="https://doc.rust-lang.org/1.73.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h4></section></summary><div class='docblock'>Calls <code>.tap_deref()</code> only in debug builds, and is erased in release
-builds.</div></details><details class="toggle method-toggle" open><summary><section id="method.tap_deref_mut_dbg" class="method trait-impl"><a href="#method.tap_deref_mut_dbg" class="anchor">§</a><h4 class="code-header">fn <a class="fn">tap_deref_mut_dbg</a>&lt;T&gt;(self, func: impl <a class="trait" href="https://doc.rust-lang.org/1.73.0/core/ops/function/trait.FnOnce.html" title="trait core::ops::function::FnOnce">FnOnce</a>(<a class="primitive" href="https://doc.rust-lang.org/1.73.0/s [...]
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.73.0/core/ops/deref/trait.DerefMut.html" title="trait core::ops::deref::DerefMut">DerefMut</a>&lt;Target = T&gt; + <a class="trait" href="https://doc.rust-lang.org/1.73.0/core/ops/deref/trait.Deref.html" title="trait core::ops::deref::Deref">Deref</a>,
-    T: ?<a class="trait" href="https://doc.rust-lang.org/1.73.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</span></h4></section></summary><div class='docblock'>Calls <code>.tap_deref_mut()</code> only in debug builds, and is erased in release
-builds.</div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-TryConv-for-WasabiBuilder" class="impl"><a href="#impl-TryConv-for-WasabiBuilder" class="anchor">§</a><h3 class="code-header">impl&lt;T&gt; TryConv for T</h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.try_conv" class="method trait-impl"><a href="#method.try_conv" class="anchor">§</a><h4 class="code-header">f [...]
-    Self: <a class="trait" href="https://doc.rust-lang.org/1.73.0/core/convert/trait.TryInto.html" title="trait core::convert::TryInto">TryInto</a>&lt;T&gt;,</span></h4></section></summary><div class='docblock'>Attempts to convert <code>self</code> into <code>T</code> using <code>TryInto&lt;T&gt;</code>. <a>Read more</a></div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-TryFrom%3CU%3E-for-WasabiBuilder" class="impl"><a class="src rights [...]
-    U: <a class="trait" href="https://doc.rust-lang.org/1.73.0/core/convert/trait.Into.html" title="trait core::convert::Into">Into</a>&lt;T&gt;,</span></h3></section></summary><div class="impl-items"><details class="toggle" open><summary><section id="associatedtype.Error" class="associatedtype trait-impl"><a href="#associatedtype.Error" class="anchor">§</a><h4 class="code-header">type <a href="https://doc.rust-lang.org/1.73.0/core/convert/trait.TryFrom.html#associatedtype.Error" class=" [...]
-    U: <a class="trait" href="https://doc.rust-lang.org/1.73.0/core/convert/trait.TryFrom.html" title="trait core::convert::TryFrom">TryFrom</a>&lt;T&gt;,</span></h3></section></summary><div class="impl-items"><details class="toggle" open><summary><section id="associatedtype.Error-1" class="associatedtype trait-impl"><a href="#associatedtype.Error-1" class="anchor">§</a><h4 class="code-header">type <a href="https://doc.rust-lang.org/1.73.0/core/convert/trait.TryInto.html#associatedtype.E [...]
-    V: MultiLane&lt;T&gt;,</span></h3></section></summary><div class="impl-items"><section id="method.vzip" class="method trait-impl"><a href="#method.vzip" class="anchor">§</a><h4 class="code-header">fn <a class="fn">vzip</a>(self) -&gt; V</h4></section></div></details><details class="toggle implementors-toggle"><summary><section id="impl-WithSubscriber-for-WasabiBuilder" class="impl"><a href="#impl-WithSubscriber-for-WasabiBuilder" class="anchor">§</a><h3 class="code-header">impl&lt;T& [...]
-    S: <a class="trait" href="https://doc.rust-lang.org/1.73.0/core/convert/trait.Into.html" title="trait core::convert::Into">Into</a>&lt;Dispatch&gt;,</span></h4></section></summary><div class='docblock'>Attaches the provided <a href="super::Subscriber"><code>Subscriber</code></a> to this type, returning a
-[<code>WithDispatch</code>] wrapper. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.with_current_subscriber" class="method trait-impl"><a href="#method.with_current_subscriber" class="anchor">§</a><h4 class="code-header">fn <a class="fn">with_current_subscriber</a>(self) -&gt; WithDispatch&lt;Self&gt;</h4></section></summary><div class='docblock'>Attaches the current <a href="crate::dispatcher#setting-the-default-subscriber">defaul [...]
-[<code>WithDispatch</code>] wrapper. <a>Read more</a></div></details></div></details></div></section></div></main></body></html>
\ No newline at end of file
diff --git a/docs/rust/opendal/services/wasabi/backend/struct.WasabiBuilder.html b/docs/rust/opendal/services/wasabi/backend/struct.WasabiBuilder.html
deleted file mode 100644
index d7a5a6f65..000000000
--- a/docs/rust/opendal/services/wasabi/backend/struct.WasabiBuilder.html
+++ /dev/null
@@ -1,11 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
-    <meta http-equiv="refresh" content="0;URL=../../../../opendal/services/struct.Wasabi.html">
-    <title>Redirection</title>
-</head>
-<body>
-    <p>Redirecting to <a href="../../../../opendal/services/struct.Wasabi.html">../../../../opendal/services/struct.Wasabi.html</a>...</p>
-    <script>location.replace("../../../../opendal/services/struct.Wasabi.html" + location.search + location.hash);</script>
-</body>
-</html>
\ No newline at end of file
diff --git a/docs/rust/opendal/struct.Operator.html b/docs/rust/opendal/struct.Operator.html
index 2f33ae72d..334161a23 100644
--- a/docs/rust/opendal/struct.Operator.html
+++ b/docs/rust/opendal/struct.Operator.html
@@ -490,7 +490,7 @@ For fetching more metadata, please use <a href="struct.Operator.html#method.list
         .uri(signed_req.uri())
         .body(())<span class="question-mark">?</span>;
 </code></pre></div>
-</div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-Operator-3" class="impl"><a class="src rightside" href="../src/opendal/types/operator/builder.rs.html#48-293">source</a><a href="#impl-Operator-3" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.Operator.html" title="struct opendal::Operator">Operator</a></h3></section></summary><div class="docblock"><h4 id="operator-build-api"><a href="#operator-bui [...]
+</div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-Operator-3" class="impl"><a class="src rightside" href="../src/opendal/types/operator/builder.rs.html#48-291">source</a><a href="#impl-Operator-3" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.Operator.html" title="struct opendal::Operator">Operator</a></h3></section></summary><div class="docblock"><h4 id="operator-build-api"><a href="#operator-bui [...]
 <p>Operator should be built via <a href="struct.OperatorBuilder.html" title="struct opendal::OperatorBuilder"><code>OperatorBuilder</code></a>. We recommend to use <a href="struct.Operator.html#method.new" title="associated function opendal::Operator::new"><code>Operator::new</code></a> to get started:</p>
 
 <div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use </span>opendal::services::Fs;
@@ -558,7 +558,7 @@ type parameter which is not always easy to be used.</p>
 
     <span class="prelude-val">Ok</span>(())
 }</code></pre></div>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.via_map" class="method"><a class="src rightside" href="../src/opendal/types/operator/builder.rs.html#154-256">source</a><h4 class="code-header">pub fn <a href="#method.via_map" class="fn">via_map</a>(scheme: <a class="enum" href="enum.Scheme.html" title="enum opendal::Scheme">Scheme</a>, map: <a class="struct" href="https://doc.rust-lang.org/1.73.0/std/collections/hash/map/struct.HashMap.html" title=" [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.via_map" class="method"><a class="src rightside" href="../src/opendal/types/operator/builder.rs.html#154-254">source</a><h4 class="code-header">pub fn <a href="#method.via_map" class="fn">via_map</a>(scheme: <a class="enum" href="enum.Scheme.html" title="enum opendal::Scheme">Scheme</a>, map: <a class="struct" href="https://doc.rust-lang.org/1.73.0/std/collections/hash/map/struct.HashMap.html" title=" [...]
 <h5 id="notes-16"><a href="#notes-16">Notes</a></h5>
 <p>from_map is using static dispatch layers which is zero cost. via_map is
 using dynamic dispatch layers which has a bit runtime overhead with an
@@ -583,7 +583,7 @@ type parameter which is not always easy to be used.</p>
 
     <span class="prelude-val">Ok</span>(())
 }</code></pre></div>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.layer" class="method"><a class="src rightside" href="../src/opendal/types/operator/builder.rs.html#288-292">source</a><h4 class="code-header">pub fn <a href="#method.layer" class="fn">layer</a>&lt;L: <a class="trait" href="raw/trait.Layer.html" title="trait opendal::raw::Layer">Layer</a>&lt;<a class="type" href="raw/type.FusedAccessor.html" title="type opendal::raw::FusedAccessor">FusedAccessor</a>&gt [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.layer" class="method"><a class="src rightside" href="../src/opendal/types/operator/builder.rs.html#286-290">source</a><h4 class="code-header">pub fn <a href="#method.layer" class="fn">layer</a>&lt;L: <a class="trait" href="raw/trait.Layer.html" title="trait opendal::raw::Layer">Layer</a>&lt;<a class="type" href="raw/type.FusedAccessor.html" title="type opendal::raw::FusedAccessor">FusedAccessor</a>&gt [...]
 <h5 id="notes-17"><a href="#notes-17">Notes</a></h5>
 <p><code>OperatorBuilder::layer()</code> is using static dispatch which is zero
 cost. <code>Operator::layer()</code> is using dynamic dispatch which has a
diff --git a/docs/rust/opendal/struct.OperatorBuilder.html b/docs/rust/opendal/struct.OperatorBuilder.html
index e20b66aa8..e487bdbc3 100644
--- a/docs/rust/opendal/struct.OperatorBuilder.html
+++ b/docs/rust/opendal/struct.OperatorBuilder.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="OperatorBuilder is a typed builder to build an Operator."><title>OperatorBuilder in opendal - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" cro [...]
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="OperatorBuilder is a typed builder to build an Operator."><title>OperatorBuilder in opendal - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" cro [...]
 <h2 id="notes"><a href="#notes">Notes</a></h2>
 <p>OpenDAL uses static dispatch internally and only performs dynamic
 dispatch at the outmost type erase layer. OperatorBuilder is the only
@@ -35,8 +35,8 @@ public API provided by OpenDAL come with generic parameters.</p>
 
     <span class="prelude-val">Ok</span>(())
 }</code></pre></div>
-</div></details><h2 id="implementations" class="small-section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-OperatorBuilder%3CA%3E" class="impl"><a class="src rightside" href="../src/opendal/types/operator/builder.rs.html#343-395">source</a><a href="#impl-OperatorBuilder%3CA%3E" class="anchor">§</a><h3 class="code-header">impl&lt;A: <a class="trait" href [...]
-</div></details><details class="toggle method-toggle" open><summary><section id="method.layer" class="method"><a class="src rightside" href="../src/opendal/types/operator/builder.rs.html#384-388">source</a><h4 class="code-header">pub fn <a href="#method.layer" class="fn">layer</a>&lt;L: <a class="trait" href="raw/trait.Layer.html" title="trait opendal::raw::Layer">Layer</a>&lt;A&gt;&gt;(self, layer: L) -&gt; <a class="struct" href="struct.OperatorBuilder.html" title="struct opendal::Oper [...]
+</div></details><h2 id="implementations" class="small-section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-OperatorBuilder%3CA%3E" class="impl"><a class="src rightside" href="../src/opendal/types/operator/builder.rs.html#341-393">source</a><a href="#impl-OperatorBuilder%3CA%3E" class="anchor">§</a><h3 class="code-header">impl&lt;A: <a class="trait" href [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.layer" class="method"><a class="src rightside" href="../src/opendal/types/operator/builder.rs.html#382-386">source</a><h4 class="code-header">pub fn <a href="#method.layer" class="fn">layer</a>&lt;L: <a class="trait" href="raw/trait.Layer.html" title="trait opendal::raw::Layer">Layer</a>&lt;A&gt;&gt;(self, layer: L) -&gt; <a class="struct" href="struct.OperatorBuilder.html" title="struct opendal::Oper [...]
 <h5 id="notes-1"><a href="#notes-1">Notes</a></h5>
 <p><code>OperatorBuilder::layer()</code> is using static dispatch which is zero
 cost. <code>Operator::layer()</code> is using dynamic dispatch which has a
@@ -53,7 +53,7 @@ inline.</p>
     .finish();
 <span class="comment">// All operations will go through the new_layer
 </span><span class="kw">let _ </span>= op.read(<span class="string">&quot;test_file&quot;</span>).<span class="kw">await</span><span class="question-mark">?</span>;</code></pre></div>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.finish" class="method"><a class="src rightside" href="../src/opendal/types/operator/builder.rs.html#391-394">source</a><h4 class="code-header">pub fn <a href="#method.finish" class="fn">finish</a>(self) -&gt; <a class="struct" href="struct.Operator.html" title="struct opendal::Operator">Operator</a></h4></section></summary><div class="docblock"><p>Finish the building to construct an Operator.</p>
+</div></details><details class="toggle method-toggle" open><summary><section id="method.finish" class="method"><a class="src rightside" href="../src/opendal/types/operator/builder.rs.html#389-392">source</a><h4 class="code-header">pub fn <a href="#method.finish" class="fn">finish</a>(self) -&gt; <a class="struct" href="struct.Operator.html" title="struct opendal::Operator">Operator</a></h4></section></summary><div class="docblock"><p>Finish the building to construct an Operator.</p>
 </div></details></div></details></div><h2 id="synthetic-implementations" class="small-section-header">Auto Trait Implementations<a href="#synthetic-implementations" class="anchor">§</a></h2><div id="synthetic-implementations-list"><section id="impl-RefUnwindSafe-for-OperatorBuilder%3CA%3E" class="impl"><a href="#impl-RefUnwindSafe-for-OperatorBuilder%3CA%3E" class="anchor">§</a><h3 class="code-header">impl&lt;A&gt; <a class="trait" href="https://doc.rust-lang.org/1.73.0/core/panic/unwind [...]
     A: <a class="trait" href="https://doc.rust-lang.org/1.73.0/core/panic/unwind_safe/trait.RefUnwindSafe.html" title="trait core::panic::unwind_safe::RefUnwindSafe">RefUnwindSafe</a>,</span></h3></section><section id="impl-Send-for-OperatorBuilder%3CA%3E" class="impl"><a href="#impl-Send-for-OperatorBuilder%3CA%3E" class="anchor">§</a><h3 class="code-header">impl&lt;A&gt; <a class="trait" href="https://doc.rust-lang.org/1.73.0/core/marker/trait.Send.html" title="trait core::marker::Send [...]
     A: <a class="trait" href="https://doc.rust-lang.org/1.73.0/core/panic/unwind_safe/trait.UnwindSafe.html" title="trait core::panic::unwind_safe::UnwindSafe">UnwindSafe</a>,</span></h3></section></div><h2 id="blanket-implementations" class="small-section-header">Blanket Implementations<a href="#blanket-implementations" class="anchor">§</a></h2><div id="blanket-implementations-list"><details class="toggle implementors-toggle"><summary><section id="impl-Any-for-OperatorBuilder%3CA%3E" cl [...]
diff --git a/docs/rust/opendal/trait.Builder.html b/docs/rust/opendal/trait.Builder.html
index 2a8e43bcc..8e0127a62 100644
--- a/docs/rust/opendal/trait.Builder.html
+++ b/docs/rust/opendal/trait.Builder.html
@@ -22,4 +22,4 @@ We also promise that every public API will provide detailed documentation.</p>
 </div></details></div><h2 id="required-methods" class="small-section-header">Required Methods<a href="#required-methods" class="anchor">§</a></h2><div class="methods"><details class="toggle method-toggle" open><summary><section id="tymethod.from_map" class="method"><a class="src rightside" href="../src/opendal/types/builder.rs.html#45">source</a><h4 class="code-header">fn <a href="#tymethod.from_map" class="fn">from_map</a>(map: <a class="struct" href="https://doc.rust-lang.org/1.73.0/st [...]
 </div></details><details class="toggle method-toggle" open><summary><section id="tymethod.build" class="method"><a class="src rightside" href="../src/opendal/types/builder.rs.html#48">source</a><h4 class="code-header">fn <a href="#tymethod.build" class="fn">build</a>(&amp;mut self) -&gt; <a class="type" href="type.Result.html" title="type opendal::Result">Result</a>&lt;Self::<a class="associatedtype" href="trait.Builder.html#associatedtype.Accessor" title="type opendal::Builder::Accessor [...]
 </div></details></div><h2 id="foreign-impls" class="small-section-header">Implementations on Foreign Types<a href="#foreign-impls" class="anchor">§</a></h2><details class="toggle implementors-toggle"><summary><section id="impl-Builder-for-()" class="impl"><a class="src rightside" href="../src/opendal/types/builder.rs.html#52-62">source</a><a href="#impl-Builder-for-()" class="anchor">§</a><h3 class="code-header">impl <a class="trait" href="trait.Builder.html" title="trait opendal::Builde [...]
-</div><div class="impl-items"><section id="associatedconstant.SCHEME-1" class="associatedconstant trait-impl"><a class="src rightside" href="../src/opendal/types/builder.rs.html#53">source</a><a href="#associatedconstant.SCHEME-1" class="anchor">§</a><h4 class="code-header">const <a href="#associatedconstant.SCHEME" class="constant">SCHEME</a>: <a class="enum" href="enum.Scheme.html" title="enum opendal::Scheme">Scheme</a> = _</h4></section><section id="associatedtype.Accessor-1" class=" [...]
\ No newline at end of file
+</div><div class="impl-items"><section id="associatedconstant.SCHEME-1" class="associatedconstant trait-impl"><a class="src rightside" href="../src/opendal/types/builder.rs.html#53">source</a><a href="#associatedconstant.SCHEME-1" class="anchor">§</a><h4 class="code-header">const <a href="#associatedconstant.SCHEME" class="constant">SCHEME</a>: <a class="enum" href="enum.Scheme.html" title="enum opendal::Scheme">Scheme</a> = _</h4></section><section id="associatedtype.Accessor-1" class=" [...]
\ No newline at end of file
diff --git a/docs/rust/search-index.js b/docs/rust/search-index.js
index a547c90a0..7f58182e1 100644
--- a/docs/rust/search-index.js
+++ b/docs/rust/search-index.js
@@ -1,5 +1,5 @@
 var searchIndex = JSON.parse('{\
-"opendal":{"doc":"OpenDAL is the Open Data Access Layer to <strong>freely</strong> access …","t":"QNNNNNDDDDINNDNNNNNNNNNNNNNNNNNNDEDENNNNNNNNNNNNNNNNNNDNNDENNNNNNNNNDDDNNNNNDNNGNNSENNNNNNNNNNNNNDLMMMLLLLMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLKLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMLLMLLLLLLMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLALLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLKLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL [...]
+"opendal":{"doc":"OpenDAL is the Open Data Access Layer to <strong>freely</strong> access …","t":"QNNNNNDDDDINNDNNNNNNNNNNNNNNNNNNDEDENNNNNNNNNNNNNNNNNNDNNDENNNNNNNNNDDDNNNNNDNNGNNSENNNNNNNNNNNNDLMMMLLLLMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLKLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMLLMLLLLLLMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLALLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLKLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL [...]
 }');
 if (typeof window !== 'undefined' && window.initSearch) {window.initSearch(searchIndex)};
 if (typeof exports !== 'undefined') {exports.searchIndex = searchIndex};
diff --git a/docs/rust/src-files.js b/docs/rust/src-files.js
index 0f40eaa5f..2b506923f 100644
--- a/docs/rust/src-files.js
+++ b/docs/rust/src-files.js
@@ -1,4 +1,4 @@
 var srcIndex = JSON.parse('{\
-"opendal":["",[["docs",[["comparisons",[],["mod.rs"]],["internals",[],["accessor.rs","layer.rs","mod.rs"]],["rfcs",[],["mod.rs"]]],["concepts.rs","mod.rs"]],["layers",[],["async_backtrace.rs","await_tree.rs","blocking.rs","chaos.rs","complete.rs","concurrent_limit.rs","error_context.rs","immutable_index.rs","logging.rs","madsim.rs","metrics.rs","minitrace.rs","mod.rs","oteltrace.rs","prometheus.rs","prometheus_client.rs","retry.rs","throttle.rs","timeout.rs","tracing.rs","type_eraser.rs" [...]
+"opendal":["",[["docs",[["comparisons",[],["mod.rs"]],["internals",[],["accessor.rs","layer.rs","mod.rs"]],["rfcs",[],["mod.rs"]]],["concepts.rs","mod.rs"]],["layers",[],["async_backtrace.rs","await_tree.rs","blocking.rs","chaos.rs","complete.rs","concurrent_limit.rs","error_context.rs","immutable_index.rs","logging.rs","madsim.rs","metrics.rs","minitrace.rs","mod.rs","oteltrace.rs","prometheus.rs","prometheus_client.rs","retry.rs","throttle.rs","timeout.rs","tracing.rs","type_eraser.rs" [...]
 }');
 createSrcSidebar();
diff --git a/docs/rust/src/opendal/services/mod.rs.html b/docs/rust/src/opendal/services/mod.rs.html
index 8d0d4f150..07370db14 100644
--- a/docs/rust/src/opendal/services/mod.rs.html
+++ b/docs/rust/src/opendal/services/mod.rs.html
@@ -248,11 +248,6 @@
 <a href="#248" id="248">248</a>
 <a href="#249" id="249">249</a>
 <a href="#250" id="250">250</a>
-<a href="#251" id="251">251</a>
-<a href="#252" id="252">252</a>
-<a href="#253" id="253">253</a>
-<a href="#254" id="254">254</a>
-<a href="#255" id="255">255</a>
 </pre></div><pre class="rust"><code><span class="comment">// Licensed to the Apache Software Foundation (ASF) under one
 // or more contributor license agreements.  See the NOTICE file
 // distributed with this work for additional information
@@ -419,11 +414,6 @@
 <span class="attr">#[cfg(feature = <span class="string">&quot;services-supabase&quot;</span>)]
 </span><span class="kw">pub use </span>supabase::Supabase;
 
-<span class="attr">#[cfg(feature = <span class="string">&quot;services-wasabi&quot;</span>)]
-</span><span class="kw">mod </span>wasabi;
-<span class="attr">#[cfg(feature = <span class="string">&quot;services-wasabi&quot;</span>)]
-</span><span class="kw">pub use </span>wasabi::Wasabi;
-
 <span class="attr">#[cfg(feature = <span class="string">&quot;services-webdav&quot;</span>)]
 </span><span class="kw">mod </span>webdav;
 <span class="attr">#[cfg(feature = <span class="string">&quot;services-webdav&quot;</span>)]
diff --git a/docs/rust/src/opendal/services/wasabi/backend.rs.html b/docs/rust/src/opendal/services/wasabi/backend.rs.html
deleted file mode 100644
index 017ee2bfb..000000000
--- a/docs/rust/src/opendal/services/wasabi/backend.rs.html
+++ /dev/null
@@ -1,1903 +0,0 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `core/src/services/wasabi/backend.rs`."><title>backend.rs - source</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" cr [...]
-<a href="#2" id="2">2</a>
-<a href="#3" id="3">3</a>
-<a href="#4" id="4">4</a>
-<a href="#5" id="5">5</a>
-<a href="#6" id="6">6</a>
-<a href="#7" id="7">7</a>
-<a href="#8" id="8">8</a>
-<a href="#9" id="9">9</a>
-<a href="#10" id="10">10</a>
-<a href="#11" id="11">11</a>
-<a href="#12" id="12">12</a>
-<a href="#13" id="13">13</a>
-<a href="#14" id="14">14</a>
-<a href="#15" id="15">15</a>
-<a href="#16" id="16">16</a>
-<a href="#17" id="17">17</a>
-<a href="#18" id="18">18</a>
-<a href="#19" id="19">19</a>
-<a href="#20" id="20">20</a>
-<a href="#21" id="21">21</a>
-<a href="#22" id="22">22</a>
-<a href="#23" id="23">23</a>
-<a href="#24" id="24">24</a>
-<a href="#25" id="25">25</a>
-<a href="#26" id="26">26</a>
-<a href="#27" id="27">27</a>
-<a href="#28" id="28">28</a>
-<a href="#29" id="29">29</a>
-<a href="#30" id="30">30</a>
-<a href="#31" id="31">31</a>
-<a href="#32" id="32">32</a>
-<a href="#33" id="33">33</a>
-<a href="#34" id="34">34</a>
-<a href="#35" id="35">35</a>
-<a href="#36" id="36">36</a>
-<a href="#37" id="37">37</a>
-<a href="#38" id="38">38</a>
-<a href="#39" id="39">39</a>
-<a href="#40" id="40">40</a>
-<a href="#41" id="41">41</a>
-<a href="#42" id="42">42</a>
-<a href="#43" id="43">43</a>
-<a href="#44" id="44">44</a>
-<a href="#45" id="45">45</a>
-<a href="#46" id="46">46</a>
-<a href="#47" id="47">47</a>
-<a href="#48" id="48">48</a>
-<a href="#49" id="49">49</a>
-<a href="#50" id="50">50</a>
-<a href="#51" id="51">51</a>
-<a href="#52" id="52">52</a>
-<a href="#53" id="53">53</a>
-<a href="#54" id="54">54</a>
-<a href="#55" id="55">55</a>
-<a href="#56" id="56">56</a>
-<a href="#57" id="57">57</a>
-<a href="#58" id="58">58</a>
-<a href="#59" id="59">59</a>
-<a href="#60" id="60">60</a>
-<a href="#61" id="61">61</a>
-<a href="#62" id="62">62</a>
-<a href="#63" id="63">63</a>
-<a href="#64" id="64">64</a>
-<a href="#65" id="65">65</a>
-<a href="#66" id="66">66</a>
-<a href="#67" id="67">67</a>
-<a href="#68" id="68">68</a>
-<a href="#69" id="69">69</a>
-<a href="#70" id="70">70</a>
-<a href="#71" id="71">71</a>
-<a href="#72" id="72">72</a>
-<a href="#73" id="73">73</a>
-<a href="#74" id="74">74</a>
-<a href="#75" id="75">75</a>
-<a href="#76" id="76">76</a>
-<a href="#77" id="77">77</a>
-<a href="#78" id="78">78</a>
-<a href="#79" id="79">79</a>
-<a href="#80" id="80">80</a>
-<a href="#81" id="81">81</a>
-<a href="#82" id="82">82</a>
-<a href="#83" id="83">83</a>
-<a href="#84" id="84">84</a>
-<a href="#85" id="85">85</a>
-<a href="#86" id="86">86</a>
-<a href="#87" id="87">87</a>
-<a href="#88" id="88">88</a>
-<a href="#89" id="89">89</a>
-<a href="#90" id="90">90</a>
-<a href="#91" id="91">91</a>
-<a href="#92" id="92">92</a>
-<a href="#93" id="93">93</a>
-<a href="#94" id="94">94</a>
-<a href="#95" id="95">95</a>
-<a href="#96" id="96">96</a>
-<a href="#97" id="97">97</a>
-<a href="#98" id="98">98</a>
-<a href="#99" id="99">99</a>
-<a href="#100" id="100">100</a>
-<a href="#101" id="101">101</a>
-<a href="#102" id="102">102</a>
-<a href="#103" id="103">103</a>
-<a href="#104" id="104">104</a>
-<a href="#105" id="105">105</a>
-<a href="#106" id="106">106</a>
-<a href="#107" id="107">107</a>
-<a href="#108" id="108">108</a>
-<a href="#109" id="109">109</a>
-<a href="#110" id="110">110</a>
-<a href="#111" id="111">111</a>
-<a href="#112" id="112">112</a>
-<a href="#113" id="113">113</a>
-<a href="#114" id="114">114</a>
-<a href="#115" id="115">115</a>
-<a href="#116" id="116">116</a>
-<a href="#117" id="117">117</a>
-<a href="#118" id="118">118</a>
-<a href="#119" id="119">119</a>
-<a href="#120" id="120">120</a>
-<a href="#121" id="121">121</a>
-<a href="#122" id="122">122</a>
-<a href="#123" id="123">123</a>
-<a href="#124" id="124">124</a>
-<a href="#125" id="125">125</a>
-<a href="#126" id="126">126</a>
-<a href="#127" id="127">127</a>
-<a href="#128" id="128">128</a>
-<a href="#129" id="129">129</a>
-<a href="#130" id="130">130</a>
-<a href="#131" id="131">131</a>
-<a href="#132" id="132">132</a>
-<a href="#133" id="133">133</a>
-<a href="#134" id="134">134</a>
-<a href="#135" id="135">135</a>
-<a href="#136" id="136">136</a>
-<a href="#137" id="137">137</a>
-<a href="#138" id="138">138</a>
-<a href="#139" id="139">139</a>
-<a href="#140" id="140">140</a>
-<a href="#141" id="141">141</a>
-<a href="#142" id="142">142</a>
-<a href="#143" id="143">143</a>
-<a href="#144" id="144">144</a>
-<a href="#145" id="145">145</a>
-<a href="#146" id="146">146</a>
-<a href="#147" id="147">147</a>
-<a href="#148" id="148">148</a>
-<a href="#149" id="149">149</a>
-<a href="#150" id="150">150</a>
-<a href="#151" id="151">151</a>
-<a href="#152" id="152">152</a>
-<a href="#153" id="153">153</a>
-<a href="#154" id="154">154</a>
-<a href="#155" id="155">155</a>
-<a href="#156" id="156">156</a>
-<a href="#157" id="157">157</a>
-<a href="#158" id="158">158</a>
-<a href="#159" id="159">159</a>
-<a href="#160" id="160">160</a>
-<a href="#161" id="161">161</a>
-<a href="#162" id="162">162</a>
-<a href="#163" id="163">163</a>
-<a href="#164" id="164">164</a>
-<a href="#165" id="165">165</a>
-<a href="#166" id="166">166</a>
-<a href="#167" id="167">167</a>
-<a href="#168" id="168">168</a>
-<a href="#169" id="169">169</a>
-<a href="#170" id="170">170</a>
-<a href="#171" id="171">171</a>
-<a href="#172" id="172">172</a>
-<a href="#173" id="173">173</a>
-<a href="#174" id="174">174</a>
-<a href="#175" id="175">175</a>
-<a href="#176" id="176">176</a>
-<a href="#177" id="177">177</a>
-<a href="#178" id="178">178</a>
-<a href="#179" id="179">179</a>
-<a href="#180" id="180">180</a>
-<a href="#181" id="181">181</a>
-<a href="#182" id="182">182</a>
-<a href="#183" id="183">183</a>
-<a href="#184" id="184">184</a>
-<a href="#185" id="185">185</a>
-<a href="#186" id="186">186</a>
-<a href="#187" id="187">187</a>
-<a href="#188" id="188">188</a>
-<a href="#189" id="189">189</a>
-<a href="#190" id="190">190</a>
-<a href="#191" id="191">191</a>
-<a href="#192" id="192">192</a>
-<a href="#193" id="193">193</a>
-<a href="#194" id="194">194</a>
-<a href="#195" id="195">195</a>
-<a href="#196" id="196">196</a>
-<a href="#197" id="197">197</a>
-<a href="#198" id="198">198</a>
-<a href="#199" id="199">199</a>
-<a href="#200" id="200">200</a>
-<a href="#201" id="201">201</a>
-<a href="#202" id="202">202</a>
-<a href="#203" id="203">203</a>
-<a href="#204" id="204">204</a>
-<a href="#205" id="205">205</a>
-<a href="#206" id="206">206</a>
-<a href="#207" id="207">207</a>
-<a href="#208" id="208">208</a>
-<a href="#209" id="209">209</a>
-<a href="#210" id="210">210</a>
-<a href="#211" id="211">211</a>
-<a href="#212" id="212">212</a>
-<a href="#213" id="213">213</a>
-<a href="#214" id="214">214</a>
-<a href="#215" id="215">215</a>
-<a href="#216" id="216">216</a>
-<a href="#217" id="217">217</a>
-<a href="#218" id="218">218</a>
-<a href="#219" id="219">219</a>
-<a href="#220" id="220">220</a>
-<a href="#221" id="221">221</a>
-<a href="#222" id="222">222</a>
-<a href="#223" id="223">223</a>
-<a href="#224" id="224">224</a>
-<a href="#225" id="225">225</a>
-<a href="#226" id="226">226</a>
-<a href="#227" id="227">227</a>
-<a href="#228" id="228">228</a>
-<a href="#229" id="229">229</a>
-<a href="#230" id="230">230</a>
-<a href="#231" id="231">231</a>
-<a href="#232" id="232">232</a>
-<a href="#233" id="233">233</a>
-<a href="#234" id="234">234</a>
-<a href="#235" id="235">235</a>
-<a href="#236" id="236">236</a>
-<a href="#237" id="237">237</a>
-<a href="#238" id="238">238</a>
-<a href="#239" id="239">239</a>
-<a href="#240" id="240">240</a>
-<a href="#241" id="241">241</a>
-<a href="#242" id="242">242</a>
-<a href="#243" id="243">243</a>
-<a href="#244" id="244">244</a>
-<a href="#245" id="245">245</a>
-<a href="#246" id="246">246</a>
-<a href="#247" id="247">247</a>
-<a href="#248" id="248">248</a>
-<a href="#249" id="249">249</a>
-<a href="#250" id="250">250</a>
-<a href="#251" id="251">251</a>
-<a href="#252" id="252">252</a>
-<a href="#253" id="253">253</a>
-<a href="#254" id="254">254</a>
-<a href="#255" id="255">255</a>
-<a href="#256" id="256">256</a>
-<a href="#257" id="257">257</a>
-<a href="#258" id="258">258</a>
-<a href="#259" id="259">259</a>
-<a href="#260" id="260">260</a>
-<a href="#261" id="261">261</a>
-<a href="#262" id="262">262</a>
-<a href="#263" id="263">263</a>
-<a href="#264" id="264">264</a>
-<a href="#265" id="265">265</a>
-<a href="#266" id="266">266</a>
-<a href="#267" id="267">267</a>
-<a href="#268" id="268">268</a>
-<a href="#269" id="269">269</a>
-<a href="#270" id="270">270</a>
-<a href="#271" id="271">271</a>
-<a href="#272" id="272">272</a>
-<a href="#273" id="273">273</a>
-<a href="#274" id="274">274</a>
-<a href="#275" id="275">275</a>
-<a href="#276" id="276">276</a>
-<a href="#277" id="277">277</a>
-<a href="#278" id="278">278</a>
-<a href="#279" id="279">279</a>
-<a href="#280" id="280">280</a>
-<a href="#281" id="281">281</a>
-<a href="#282" id="282">282</a>
-<a href="#283" id="283">283</a>
-<a href="#284" id="284">284</a>
-<a href="#285" id="285">285</a>
-<a href="#286" id="286">286</a>
-<a href="#287" id="287">287</a>
-<a href="#288" id="288">288</a>
-<a href="#289" id="289">289</a>
-<a href="#290" id="290">290</a>
-<a href="#291" id="291">291</a>
-<a href="#292" id="292">292</a>
-<a href="#293" id="293">293</a>
-<a href="#294" id="294">294</a>
-<a href="#295" id="295">295</a>
-<a href="#296" id="296">296</a>
-<a href="#297" id="297">297</a>
-<a href="#298" id="298">298</a>
-<a href="#299" id="299">299</a>
-<a href="#300" id="300">300</a>
-<a href="#301" id="301">301</a>
-<a href="#302" id="302">302</a>
-<a href="#303" id="303">303</a>
-<a href="#304" id="304">304</a>
-<a href="#305" id="305">305</a>
-<a href="#306" id="306">306</a>
-<a href="#307" id="307">307</a>
-<a href="#308" id="308">308</a>
-<a href="#309" id="309">309</a>
-<a href="#310" id="310">310</a>
-<a href="#311" id="311">311</a>
-<a href="#312" id="312">312</a>
-<a href="#313" id="313">313</a>
-<a href="#314" id="314">314</a>
-<a href="#315" id="315">315</a>
-<a href="#316" id="316">316</a>
-<a href="#317" id="317">317</a>
-<a href="#318" id="318">318</a>
-<a href="#319" id="319">319</a>
-<a href="#320" id="320">320</a>
-<a href="#321" id="321">321</a>
-<a href="#322" id="322">322</a>
-<a href="#323" id="323">323</a>
-<a href="#324" id="324">324</a>
-<a href="#325" id="325">325</a>
-<a href="#326" id="326">326</a>
-<a href="#327" id="327">327</a>
-<a href="#328" id="328">328</a>
-<a href="#329" id="329">329</a>
-<a href="#330" id="330">330</a>
-<a href="#331" id="331">331</a>
-<a href="#332" id="332">332</a>
-<a href="#333" id="333">333</a>
-<a href="#334" id="334">334</a>
-<a href="#335" id="335">335</a>
-<a href="#336" id="336">336</a>
-<a href="#337" id="337">337</a>
-<a href="#338" id="338">338</a>
-<a href="#339" id="339">339</a>
-<a href="#340" id="340">340</a>
-<a href="#341" id="341">341</a>
-<a href="#342" id="342">342</a>
-<a href="#343" id="343">343</a>
-<a href="#344" id="344">344</a>
-<a href="#345" id="345">345</a>
-<a href="#346" id="346">346</a>
-<a href="#347" id="347">347</a>
-<a href="#348" id="348">348</a>
-<a href="#349" id="349">349</a>
-<a href="#350" id="350">350</a>
-<a href="#351" id="351">351</a>
-<a href="#352" id="352">352</a>
-<a href="#353" id="353">353</a>
-<a href="#354" id="354">354</a>
-<a href="#355" id="355">355</a>
-<a href="#356" id="356">356</a>
-<a href="#357" id="357">357</a>
-<a href="#358" id="358">358</a>
-<a href="#359" id="359">359</a>
-<a href="#360" id="360">360</a>
-<a href="#361" id="361">361</a>
-<a href="#362" id="362">362</a>
-<a href="#363" id="363">363</a>
-<a href="#364" id="364">364</a>
-<a href="#365" id="365">365</a>
-<a href="#366" id="366">366</a>
-<a href="#367" id="367">367</a>
-<a href="#368" id="368">368</a>
-<a href="#369" id="369">369</a>
-<a href="#370" id="370">370</a>
-<a href="#371" id="371">371</a>
-<a href="#372" id="372">372</a>
-<a href="#373" id="373">373</a>
-<a href="#374" id="374">374</a>
-<a href="#375" id="375">375</a>
-<a href="#376" id="376">376</a>
-<a href="#377" id="377">377</a>
-<a href="#378" id="378">378</a>
-<a href="#379" id="379">379</a>
-<a href="#380" id="380">380</a>
-<a href="#381" id="381">381</a>
-<a href="#382" id="382">382</a>
-<a href="#383" id="383">383</a>
-<a href="#384" id="384">384</a>
-<a href="#385" id="385">385</a>
-<a href="#386" id="386">386</a>
-<a href="#387" id="387">387</a>
-<a href="#388" id="388">388</a>
-<a href="#389" id="389">389</a>
-<a href="#390" id="390">390</a>
-<a href="#391" id="391">391</a>
-<a href="#392" id="392">392</a>
-<a href="#393" id="393">393</a>
-<a href="#394" id="394">394</a>
-<a href="#395" id="395">395</a>
-<a href="#396" id="396">396</a>
-<a href="#397" id="397">397</a>
-<a href="#398" id="398">398</a>
-<a href="#399" id="399">399</a>
-<a href="#400" id="400">400</a>
-<a href="#401" id="401">401</a>
-<a href="#402" id="402">402</a>
-<a href="#403" id="403">403</a>
-<a href="#404" id="404">404</a>
-<a href="#405" id="405">405</a>
-<a href="#406" id="406">406</a>
-<a href="#407" id="407">407</a>
-<a href="#408" id="408">408</a>
-<a href="#409" id="409">409</a>
-<a href="#410" id="410">410</a>
-<a href="#411" id="411">411</a>
-<a href="#412" id="412">412</a>
-<a href="#413" id="413">413</a>
-<a href="#414" id="414">414</a>
-<a href="#415" id="415">415</a>
-<a href="#416" id="416">416</a>
-<a href="#417" id="417">417</a>
-<a href="#418" id="418">418</a>
-<a href="#419" id="419">419</a>
-<a href="#420" id="420">420</a>
-<a href="#421" id="421">421</a>
-<a href="#422" id="422">422</a>
-<a href="#423" id="423">423</a>
-<a href="#424" id="424">424</a>
-<a href="#425" id="425">425</a>
-<a href="#426" id="426">426</a>
-<a href="#427" id="427">427</a>
-<a href="#428" id="428">428</a>
-<a href="#429" id="429">429</a>
-<a href="#430" id="430">430</a>
-<a href="#431" id="431">431</a>
-<a href="#432" id="432">432</a>
-<a href="#433" id="433">433</a>
-<a href="#434" id="434">434</a>
-<a href="#435" id="435">435</a>
-<a href="#436" id="436">436</a>
-<a href="#437" id="437">437</a>
-<a href="#438" id="438">438</a>
-<a href="#439" id="439">439</a>
-<a href="#440" id="440">440</a>
-<a href="#441" id="441">441</a>
-<a href="#442" id="442">442</a>
-<a href="#443" id="443">443</a>
-<a href="#444" id="444">444</a>
-<a href="#445" id="445">445</a>
-<a href="#446" id="446">446</a>
-<a href="#447" id="447">447</a>
-<a href="#448" id="448">448</a>
-<a href="#449" id="449">449</a>
-<a href="#450" id="450">450</a>
-<a href="#451" id="451">451</a>
-<a href="#452" id="452">452</a>
-<a href="#453" id="453">453</a>
-<a href="#454" id="454">454</a>
-<a href="#455" id="455">455</a>
-<a href="#456" id="456">456</a>
-<a href="#457" id="457">457</a>
-<a href="#458" id="458">458</a>
-<a href="#459" id="459">459</a>
-<a href="#460" id="460">460</a>
-<a href="#461" id="461">461</a>
-<a href="#462" id="462">462</a>
-<a href="#463" id="463">463</a>
-<a href="#464" id="464">464</a>
-<a href="#465" id="465">465</a>
-<a href="#466" id="466">466</a>
-<a href="#467" id="467">467</a>
-<a href="#468" id="468">468</a>
-<a href="#469" id="469">469</a>
-<a href="#470" id="470">470</a>
-<a href="#471" id="471">471</a>
-<a href="#472" id="472">472</a>
-<a href="#473" id="473">473</a>
-<a href="#474" id="474">474</a>
-<a href="#475" id="475">475</a>
-<a href="#476" id="476">476</a>
-<a href="#477" id="477">477</a>
-<a href="#478" id="478">478</a>
-<a href="#479" id="479">479</a>
-<a href="#480" id="480">480</a>
-<a href="#481" id="481">481</a>
-<a href="#482" id="482">482</a>
-<a href="#483" id="483">483</a>
-<a href="#484" id="484">484</a>
-<a href="#485" id="485">485</a>
-<a href="#486" id="486">486</a>
-<a href="#487" id="487">487</a>
-<a href="#488" id="488">488</a>
-<a href="#489" id="489">489</a>
-<a href="#490" id="490">490</a>
-<a href="#491" id="491">491</a>
-<a href="#492" id="492">492</a>
-<a href="#493" id="493">493</a>
-<a href="#494" id="494">494</a>
-<a href="#495" id="495">495</a>
-<a href="#496" id="496">496</a>
-<a href="#497" id="497">497</a>
-<a href="#498" id="498">498</a>
-<a href="#499" id="499">499</a>
-<a href="#500" id="500">500</a>
-<a href="#501" id="501">501</a>
-<a href="#502" id="502">502</a>
-<a href="#503" id="503">503</a>
-<a href="#504" id="504">504</a>
-<a href="#505" id="505">505</a>
-<a href="#506" id="506">506</a>
-<a href="#507" id="507">507</a>
-<a href="#508" id="508">508</a>
-<a href="#509" id="509">509</a>
-<a href="#510" id="510">510</a>
-<a href="#511" id="511">511</a>
-<a href="#512" id="512">512</a>
-<a href="#513" id="513">513</a>
-<a href="#514" id="514">514</a>
-<a href="#515" id="515">515</a>
-<a href="#516" id="516">516</a>
-<a href="#517" id="517">517</a>
-<a href="#518" id="518">518</a>
-<a href="#519" id="519">519</a>
-<a href="#520" id="520">520</a>
-<a href="#521" id="521">521</a>
-<a href="#522" id="522">522</a>
-<a href="#523" id="523">523</a>
-<a href="#524" id="524">524</a>
-<a href="#525" id="525">525</a>
-<a href="#526" id="526">526</a>
-<a href="#527" id="527">527</a>
-<a href="#528" id="528">528</a>
-<a href="#529" id="529">529</a>
-<a href="#530" id="530">530</a>
-<a href="#531" id="531">531</a>
-<a href="#532" id="532">532</a>
-<a href="#533" id="533">533</a>
-<a href="#534" id="534">534</a>
-<a href="#535" id="535">535</a>
-<a href="#536" id="536">536</a>
-<a href="#537" id="537">537</a>
-<a href="#538" id="538">538</a>
-<a href="#539" id="539">539</a>
-<a href="#540" id="540">540</a>
-<a href="#541" id="541">541</a>
-<a href="#542" id="542">542</a>
-<a href="#543" id="543">543</a>
-<a href="#544" id="544">544</a>
-<a href="#545" id="545">545</a>
-<a href="#546" id="546">546</a>
-<a href="#547" id="547">547</a>
-<a href="#548" id="548">548</a>
-<a href="#549" id="549">549</a>
-<a href="#550" id="550">550</a>
-<a href="#551" id="551">551</a>
-<a href="#552" id="552">552</a>
-<a href="#553" id="553">553</a>
-<a href="#554" id="554">554</a>
-<a href="#555" id="555">555</a>
-<a href="#556" id="556">556</a>
-<a href="#557" id="557">557</a>
-<a href="#558" id="558">558</a>
-<a href="#559" id="559">559</a>
-<a href="#560" id="560">560</a>
-<a href="#561" id="561">561</a>
-<a href="#562" id="562">562</a>
-<a href="#563" id="563">563</a>
-<a href="#564" id="564">564</a>
-<a href="#565" id="565">565</a>
-<a href="#566" id="566">566</a>
-<a href="#567" id="567">567</a>
-<a href="#568" id="568">568</a>
-<a href="#569" id="569">569</a>
-<a href="#570" id="570">570</a>
-<a href="#571" id="571">571</a>
-<a href="#572" id="572">572</a>
-<a href="#573" id="573">573</a>
-<a href="#574" id="574">574</a>
-<a href="#575" id="575">575</a>
-<a href="#576" id="576">576</a>
-<a href="#577" id="577">577</a>
-<a href="#578" id="578">578</a>
-<a href="#579" id="579">579</a>
-<a href="#580" id="580">580</a>
-<a href="#581" id="581">581</a>
-<a href="#582" id="582">582</a>
-<a href="#583" id="583">583</a>
-<a href="#584" id="584">584</a>
-<a href="#585" id="585">585</a>
-<a href="#586" id="586">586</a>
-<a href="#587" id="587">587</a>
-<a href="#588" id="588">588</a>
-<a href="#589" id="589">589</a>
-<a href="#590" id="590">590</a>
-<a href="#591" id="591">591</a>
-<a href="#592" id="592">592</a>
-<a href="#593" id="593">593</a>
-<a href="#594" id="594">594</a>
-<a href="#595" id="595">595</a>
-<a href="#596" id="596">596</a>
-<a href="#597" id="597">597</a>
-<a href="#598" id="598">598</a>
-<a href="#599" id="599">599</a>
-<a href="#600" id="600">600</a>
-<a href="#601" id="601">601</a>
-<a href="#602" id="602">602</a>
-<a href="#603" id="603">603</a>
-<a href="#604" id="604">604</a>
-<a href="#605" id="605">605</a>
-<a href="#606" id="606">606</a>
-<a href="#607" id="607">607</a>
-<a href="#608" id="608">608</a>
-<a href="#609" id="609">609</a>
-<a href="#610" id="610">610</a>
-<a href="#611" id="611">611</a>
-<a href="#612" id="612">612</a>
-<a href="#613" id="613">613</a>
-<a href="#614" id="614">614</a>
-<a href="#615" id="615">615</a>
-<a href="#616" id="616">616</a>
-<a href="#617" id="617">617</a>
-<a href="#618" id="618">618</a>
-<a href="#619" id="619">619</a>
-<a href="#620" id="620">620</a>
-<a href="#621" id="621">621</a>
-<a href="#622" id="622">622</a>
-<a href="#623" id="623">623</a>
-<a href="#624" id="624">624</a>
-<a href="#625" id="625">625</a>
-<a href="#626" id="626">626</a>
-<a href="#627" id="627">627</a>
-<a href="#628" id="628">628</a>
-<a href="#629" id="629">629</a>
-<a href="#630" id="630">630</a>
-<a href="#631" id="631">631</a>
-<a href="#632" id="632">632</a>
-<a href="#633" id="633">633</a>
-<a href="#634" id="634">634</a>
-<a href="#635" id="635">635</a>
-<a href="#636" id="636">636</a>
-<a href="#637" id="637">637</a>
-<a href="#638" id="638">638</a>
-<a href="#639" id="639">639</a>
-<a href="#640" id="640">640</a>
-<a href="#641" id="641">641</a>
-<a href="#642" id="642">642</a>
-<a href="#643" id="643">643</a>
-<a href="#644" id="644">644</a>
-<a href="#645" id="645">645</a>
-<a href="#646" id="646">646</a>
-<a href="#647" id="647">647</a>
-<a href="#648" id="648">648</a>
-<a href="#649" id="649">649</a>
-<a href="#650" id="650">650</a>
-<a href="#651" id="651">651</a>
-<a href="#652" id="652">652</a>
-<a href="#653" id="653">653</a>
-<a href="#654" id="654">654</a>
-<a href="#655" id="655">655</a>
-<a href="#656" id="656">656</a>
-<a href="#657" id="657">657</a>
-<a href="#658" id="658">658</a>
-<a href="#659" id="659">659</a>
-<a href="#660" id="660">660</a>
-<a href="#661" id="661">661</a>
-<a href="#662" id="662">662</a>
-<a href="#663" id="663">663</a>
-<a href="#664" id="664">664</a>
-<a href="#665" id="665">665</a>
-<a href="#666" id="666">666</a>
-<a href="#667" id="667">667</a>
-<a href="#668" id="668">668</a>
-<a href="#669" id="669">669</a>
-<a href="#670" id="670">670</a>
-<a href="#671" id="671">671</a>
-<a href="#672" id="672">672</a>
-<a href="#673" id="673">673</a>
-<a href="#674" id="674">674</a>
-<a href="#675" id="675">675</a>
-<a href="#676" id="676">676</a>
-<a href="#677" id="677">677</a>
-<a href="#678" id="678">678</a>
-<a href="#679" id="679">679</a>
-<a href="#680" id="680">680</a>
-<a href="#681" id="681">681</a>
-<a href="#682" id="682">682</a>
-<a href="#683" id="683">683</a>
-<a href="#684" id="684">684</a>
-<a href="#685" id="685">685</a>
-<a href="#686" id="686">686</a>
-<a href="#687" id="687">687</a>
-<a href="#688" id="688">688</a>
-<a href="#689" id="689">689</a>
-<a href="#690" id="690">690</a>
-<a href="#691" id="691">691</a>
-<a href="#692" id="692">692</a>
-<a href="#693" id="693">693</a>
-<a href="#694" id="694">694</a>
-<a href="#695" id="695">695</a>
-<a href="#696" id="696">696</a>
-<a href="#697" id="697">697</a>
-<a href="#698" id="698">698</a>
-<a href="#699" id="699">699</a>
-<a href="#700" id="700">700</a>
-<a href="#701" id="701">701</a>
-<a href="#702" id="702">702</a>
-<a href="#703" id="703">703</a>
-<a href="#704" id="704">704</a>
-<a href="#705" id="705">705</a>
-<a href="#706" id="706">706</a>
-<a href="#707" id="707">707</a>
-<a href="#708" id="708">708</a>
-<a href="#709" id="709">709</a>
-<a href="#710" id="710">710</a>
-<a href="#711" id="711">711</a>
-<a href="#712" id="712">712</a>
-<a href="#713" id="713">713</a>
-<a href="#714" id="714">714</a>
-<a href="#715" id="715">715</a>
-<a href="#716" id="716">716</a>
-<a href="#717" id="717">717</a>
-<a href="#718" id="718">718</a>
-<a href="#719" id="719">719</a>
-<a href="#720" id="720">720</a>
-<a href="#721" id="721">721</a>
-<a href="#722" id="722">722</a>
-<a href="#723" id="723">723</a>
-<a href="#724" id="724">724</a>
-<a href="#725" id="725">725</a>
-<a href="#726" id="726">726</a>
-<a href="#727" id="727">727</a>
-<a href="#728" id="728">728</a>
-<a href="#729" id="729">729</a>
-<a href="#730" id="730">730</a>
-<a href="#731" id="731">731</a>
-<a href="#732" id="732">732</a>
-<a href="#733" id="733">733</a>
-<a href="#734" id="734">734</a>
-<a href="#735" id="735">735</a>
-<a href="#736" id="736">736</a>
-<a href="#737" id="737">737</a>
-<a href="#738" id="738">738</a>
-<a href="#739" id="739">739</a>
-<a href="#740" id="740">740</a>
-<a href="#741" id="741">741</a>
-<a href="#742" id="742">742</a>
-<a href="#743" id="743">743</a>
-<a href="#744" id="744">744</a>
-<a href="#745" id="745">745</a>
-<a href="#746" id="746">746</a>
-<a href="#747" id="747">747</a>
-<a href="#748" id="748">748</a>
-<a href="#749" id="749">749</a>
-<a href="#750" id="750">750</a>
-<a href="#751" id="751">751</a>
-<a href="#752" id="752">752</a>
-<a href="#753" id="753">753</a>
-<a href="#754" id="754">754</a>
-<a href="#755" id="755">755</a>
-<a href="#756" id="756">756</a>
-<a href="#757" id="757">757</a>
-<a href="#758" id="758">758</a>
-<a href="#759" id="759">759</a>
-<a href="#760" id="760">760</a>
-<a href="#761" id="761">761</a>
-<a href="#762" id="762">762</a>
-<a href="#763" id="763">763</a>
-<a href="#764" id="764">764</a>
-<a href="#765" id="765">765</a>
-<a href="#766" id="766">766</a>
-<a href="#767" id="767">767</a>
-<a href="#768" id="768">768</a>
-<a href="#769" id="769">769</a>
-<a href="#770" id="770">770</a>
-<a href="#771" id="771">771</a>
-<a href="#772" id="772">772</a>
-<a href="#773" id="773">773</a>
-<a href="#774" id="774">774</a>
-<a href="#775" id="775">775</a>
-<a href="#776" id="776">776</a>
-<a href="#777" id="777">777</a>
-<a href="#778" id="778">778</a>
-<a href="#779" id="779">779</a>
-<a href="#780" id="780">780</a>
-<a href="#781" id="781">781</a>
-<a href="#782" id="782">782</a>
-<a href="#783" id="783">783</a>
-<a href="#784" id="784">784</a>
-<a href="#785" id="785">785</a>
-<a href="#786" id="786">786</a>
-<a href="#787" id="787">787</a>
-<a href="#788" id="788">788</a>
-<a href="#789" id="789">789</a>
-<a href="#790" id="790">790</a>
-<a href="#791" id="791">791</a>
-<a href="#792" id="792">792</a>
-<a href="#793" id="793">793</a>
-<a href="#794" id="794">794</a>
-<a href="#795" id="795">795</a>
-<a href="#796" id="796">796</a>
-<a href="#797" id="797">797</a>
-<a href="#798" id="798">798</a>
-<a href="#799" id="799">799</a>
-<a href="#800" id="800">800</a>
-<a href="#801" id="801">801</a>
-<a href="#802" id="802">802</a>
-<a href="#803" id="803">803</a>
-<a href="#804" id="804">804</a>
-<a href="#805" id="805">805</a>
-<a href="#806" id="806">806</a>
-<a href="#807" id="807">807</a>
-<a href="#808" id="808">808</a>
-<a href="#809" id="809">809</a>
-<a href="#810" id="810">810</a>
-<a href="#811" id="811">811</a>
-<a href="#812" id="812">812</a>
-<a href="#813" id="813">813</a>
-<a href="#814" id="814">814</a>
-<a href="#815" id="815">815</a>
-<a href="#816" id="816">816</a>
-<a href="#817" id="817">817</a>
-<a href="#818" id="818">818</a>
-<a href="#819" id="819">819</a>
-<a href="#820" id="820">820</a>
-<a href="#821" id="821">821</a>
-<a href="#822" id="822">822</a>
-<a href="#823" id="823">823</a>
-<a href="#824" id="824">824</a>
-<a href="#825" id="825">825</a>
-<a href="#826" id="826">826</a>
-<a href="#827" id="827">827</a>
-<a href="#828" id="828">828</a>
-<a href="#829" id="829">829</a>
-<a href="#830" id="830">830</a>
-<a href="#831" id="831">831</a>
-<a href="#832" id="832">832</a>
-<a href="#833" id="833">833</a>
-<a href="#834" id="834">834</a>
-<a href="#835" id="835">835</a>
-<a href="#836" id="836">836</a>
-<a href="#837" id="837">837</a>
-<a href="#838" id="838">838</a>
-<a href="#839" id="839">839</a>
-<a href="#840" id="840">840</a>
-<a href="#841" id="841">841</a>
-<a href="#842" id="842">842</a>
-<a href="#843" id="843">843</a>
-<a href="#844" id="844">844</a>
-<a href="#845" id="845">845</a>
-<a href="#846" id="846">846</a>
-<a href="#847" id="847">847</a>
-<a href="#848" id="848">848</a>
-<a href="#849" id="849">849</a>
-<a href="#850" id="850">850</a>
-<a href="#851" id="851">851</a>
-<a href="#852" id="852">852</a>
-<a href="#853" id="853">853</a>
-<a href="#854" id="854">854</a>
-<a href="#855" id="855">855</a>
-<a href="#856" id="856">856</a>
-<a href="#857" id="857">857</a>
-<a href="#858" id="858">858</a>
-<a href="#859" id="859">859</a>
-<a href="#860" id="860">860</a>
-<a href="#861" id="861">861</a>
-<a href="#862" id="862">862</a>
-<a href="#863" id="863">863</a>
-<a href="#864" id="864">864</a>
-<a href="#865" id="865">865</a>
-<a href="#866" id="866">866</a>
-<a href="#867" id="867">867</a>
-<a href="#868" id="868">868</a>
-<a href="#869" id="869">869</a>
-<a href="#870" id="870">870</a>
-<a href="#871" id="871">871</a>
-<a href="#872" id="872">872</a>
-<a href="#873" id="873">873</a>
-<a href="#874" id="874">874</a>
-<a href="#875" id="875">875</a>
-<a href="#876" id="876">876</a>
-<a href="#877" id="877">877</a>
-<a href="#878" id="878">878</a>
-<a href="#879" id="879">879</a>
-<a href="#880" id="880">880</a>
-<a href="#881" id="881">881</a>
-<a href="#882" id="882">882</a>
-<a href="#883" id="883">883</a>
-<a href="#884" id="884">884</a>
-<a href="#885" id="885">885</a>
-<a href="#886" id="886">886</a>
-<a href="#887" id="887">887</a>
-<a href="#888" id="888">888</a>
-<a href="#889" id="889">889</a>
-<a href="#890" id="890">890</a>
-<a href="#891" id="891">891</a>
-<a href="#892" id="892">892</a>
-<a href="#893" id="893">893</a>
-<a href="#894" id="894">894</a>
-<a href="#895" id="895">895</a>
-<a href="#896" id="896">896</a>
-<a href="#897" id="897">897</a>
-<a href="#898" id="898">898</a>
-<a href="#899" id="899">899</a>
-<a href="#900" id="900">900</a>
-<a href="#901" id="901">901</a>
-<a href="#902" id="902">902</a>
-<a href="#903" id="903">903</a>
-<a href="#904" id="904">904</a>
-<a href="#905" id="905">905</a>
-<a href="#906" id="906">906</a>
-<a href="#907" id="907">907</a>
-<a href="#908" id="908">908</a>
-<a href="#909" id="909">909</a>
-<a href="#910" id="910">910</a>
-<a href="#911" id="911">911</a>
-<a href="#912" id="912">912</a>
-<a href="#913" id="913">913</a>
-<a href="#914" id="914">914</a>
-<a href="#915" id="915">915</a>
-<a href="#916" id="916">916</a>
-<a href="#917" id="917">917</a>
-<a href="#918" id="918">918</a>
-<a href="#919" id="919">919</a>
-<a href="#920" id="920">920</a>
-<a href="#921" id="921">921</a>
-<a href="#922" id="922">922</a>
-<a href="#923" id="923">923</a>
-<a href="#924" id="924">924</a>
-<a href="#925" id="925">925</a>
-<a href="#926" id="926">926</a>
-<a href="#927" id="927">927</a>
-<a href="#928" id="928">928</a>
-<a href="#929" id="929">929</a>
-<a href="#930" id="930">930</a>
-<a href="#931" id="931">931</a>
-<a href="#932" id="932">932</a>
-<a href="#933" id="933">933</a>
-<a href="#934" id="934">934</a>
-<a href="#935" id="935">935</a>
-<a href="#936" id="936">936</a>
-<a href="#937" id="937">937</a>
-<a href="#938" id="938">938</a>
-<a href="#939" id="939">939</a>
-<a href="#940" id="940">940</a>
-<a href="#941" id="941">941</a>
-<a href="#942" id="942">942</a>
-<a href="#943" id="943">943</a>
-<a href="#944" id="944">944</a>
-<a href="#945" id="945">945</a>
-<a href="#946" id="946">946</a>
-<a href="#947" id="947">947</a>
-<a href="#948" id="948">948</a>
-<a href="#949" id="949">949</a>
-<a href="#950" id="950">950</a>
-<a href="#951" id="951">951</a>
-</pre></div><pre class="rust"><code><span class="comment">// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// &quot;License&quot;); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// &quot;AS IS&quot; BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-
-</span><span class="kw">use </span>std::collections::HashMap;
-<span class="kw">use </span>std::fmt::Debug;
-<span class="kw">use </span>std::fmt::Formatter;
-<span class="kw">use </span>std::fmt::Write;
-<span class="kw">use </span>std::sync::Arc;
-
-<span class="kw">use </span>async_trait::async_trait;
-<span class="kw">use </span>base64::prelude::BASE64_STANDARD;
-<span class="kw">use </span>base64::Engine;
-<span class="kw">use </span>bytes::Buf;
-<span class="kw">use </span>http::StatusCode;
-<span class="kw">use </span>log::debug;
-<span class="kw">use </span>md5::Digest;
-<span class="kw">use </span>md5::Md5;
-<span class="kw">use </span>once_cell::sync::Lazy;
-<span class="kw">use </span>reqsign::AwsConfig;
-<span class="kw">use </span>reqsign::AwsCredentialLoad;
-<span class="kw">use </span>reqsign::AwsDefaultLoader;
-<span class="kw">use </span>reqsign::AwsV4Signer;
-
-<span class="kw">use </span><span class="kw">super</span>::core::<span class="kw-2">*</span>;
-<span class="kw">use </span><span class="kw">super</span>::error::parse_error;
-<span class="kw">use </span><span class="kw">super</span>::error::parse_wasabi_error_code;
-<span class="kw">use </span><span class="kw">super</span>::pager::WasabiPager;
-<span class="kw">use </span><span class="kw">super</span>::writer::WasabiWriter;
-<span class="kw">use </span><span class="kw">crate</span>::raw::<span class="kw-2">*</span>;
-<span class="kw">use crate</span>::<span class="kw-2">*</span>;
-
-<span class="doccomment">/// Allow constructing correct region endpoint if user gives a global endpoint.
-</span><span class="kw">static </span>ENDPOINT_TEMPLATES: Lazy&lt;HashMap&lt;<span class="kw-2">&amp;</span><span class="lifetime">&#39;static </span>str, <span class="kw-2">&amp;</span><span class="lifetime">&#39;static </span>str&gt;&gt; = Lazy::new(|| {
-    <span class="kw">let </span><span class="kw-2">mut </span>m = HashMap::new();
-    <span class="comment">// AWS S3 Service.
-    </span>m.insert(
-        <span class="string">&quot;https://s3.wasabisys.com&quot;</span>,
-        <span class="string">&quot;https://s3.{region}.wasabisys.com&quot;</span>,
-    );
-    m
-});
-
-<span class="doccomment">/// Wasabi (an aws S3 compatible service) support
-</span><span class="attr">#[doc = <span class="macro">include_str!</span>(<span class="string">&quot;docs.md&quot;</span>)]
-#[derive(Default)]
-</span><span class="kw">pub struct </span>WasabiBuilder {
-    root: <span class="prelude-ty">Option</span>&lt;String&gt;,
-
-    bucket: String,
-    endpoint: <span class="prelude-ty">Option</span>&lt;String&gt;,
-    region: <span class="prelude-ty">Option</span>&lt;String&gt;,
-    role_arn: <span class="prelude-ty">Option</span>&lt;String&gt;,
-    external_id: <span class="prelude-ty">Option</span>&lt;String&gt;,
-    access_key_id: <span class="prelude-ty">Option</span>&lt;String&gt;,
-    secret_access_key: <span class="prelude-ty">Option</span>&lt;String&gt;,
-    server_side_encryption: <span class="prelude-ty">Option</span>&lt;String&gt;,
-    server_side_encryption_aws_kms_key_id: <span class="prelude-ty">Option</span>&lt;String&gt;,
-    server_side_encryption_customer_algorithm: <span class="prelude-ty">Option</span>&lt;String&gt;,
-    server_side_encryption_customer_key: <span class="prelude-ty">Option</span>&lt;String&gt;,
-    server_side_encryption_customer_key_md5: <span class="prelude-ty">Option</span>&lt;String&gt;,
-    default_storage_class: <span class="prelude-ty">Option</span>&lt;String&gt;,
-
-    <span class="doccomment">/// temporary credentials, check the official [doc](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp.html) for detail
-    </span>security_token: <span class="prelude-ty">Option</span>&lt;String&gt;,
-
-    disable_config_load: bool,
-    disable_ec2_metadata: bool,
-    enable_virtual_host_style: bool,
-
-    http_client: <span class="prelude-ty">Option</span>&lt;HttpClient&gt;,
-    customed_credential_load: <span class="prelude-ty">Option</span>&lt;Box&lt;<span class="kw">dyn </span>AwsCredentialLoad&gt;&gt;,
-}
-
-<span class="kw">impl </span>Debug <span class="kw">for </span>WasabiBuilder {
-    <span class="kw">fn </span>fmt(<span class="kw-2">&amp;</span><span class="self">self</span>, f: <span class="kw-2">&amp;mut </span>Formatter&lt;<span class="lifetime">&#39;_</span>&gt;) -&gt; std::fmt::Result {
-        <span class="kw">let </span><span class="kw-2">mut </span>d = f.debug_struct(<span class="string">&quot;Builder&quot;</span>);
-
-        d.field(<span class="string">&quot;root&quot;</span>, <span class="kw-2">&amp;</span><span class="self">self</span>.root)
-            .field(<span class="string">&quot;bucket&quot;</span>, <span class="kw-2">&amp;</span><span class="self">self</span>.bucket)
-            .field(<span class="string">&quot;endpoint&quot;</span>, <span class="kw-2">&amp;</span><span class="self">self</span>.endpoint)
-            .field(<span class="string">&quot;region&quot;</span>, <span class="kw-2">&amp;</span><span class="self">self</span>.region);
-
-        d.finish_non_exhaustive()
-    }
-}
-
-<span class="kw">impl </span>WasabiBuilder {
-    <span class="doccomment">/// Set root of this backend.
-    ///
-    /// All operations will happen under this root.
-    </span><span class="kw">pub fn </span>root(<span class="kw-2">&amp;mut </span><span class="self">self</span>, root: <span class="kw-2">&amp;</span>str) -&gt; <span class="kw-2">&amp;mut </span><span class="self">Self </span>{
-        <span class="self">self</span>.root = <span class="kw">if </span>root.is_empty() {
-            <span class="prelude-val">None
-        </span>} <span class="kw">else </span>{
-            <span class="prelude-val">Some</span>(root.to_string())
-        };
-
-        <span class="self">self
-    </span>}
-
-    <span class="doccomment">/// Set bucket name of this backend.
-    </span><span class="kw">pub fn </span>bucket(<span class="kw-2">&amp;mut </span><span class="self">self</span>, bucket: <span class="kw-2">&amp;</span>str) -&gt; <span class="kw-2">&amp;mut </span><span class="self">Self </span>{
-        <span class="self">self</span>.bucket = bucket.to_string();
-
-        <span class="self">self
-    </span>}
-
-    <span class="doccomment">/// Set endpoint of this backend.
-    ///
-    /// Endpoint must be full uri, e.g.
-    ///
-    /// - `https://s3.wasabisys.com` or `https://s3.{region}.wasabisys.com`
-    ///
-    /// If user inputs endpoint without scheme like &quot;s3.wasabisys.com&quot;, we
-    /// will prepend &quot;https://&quot; before it.
-    </span><span class="kw">pub fn </span>endpoint(<span class="kw-2">&amp;mut </span><span class="self">self</span>, endpoint: <span class="kw-2">&amp;</span>str) -&gt; <span class="kw-2">&amp;mut </span><span class="self">Self </span>{
-        <span class="kw">if </span>!endpoint.is_empty() {
-            <span class="comment">// Trim trailing `/` so that we can accept `http://127.0.0.1:9000/`
-            </span><span class="self">self</span>.endpoint = <span class="prelude-val">Some</span>(endpoint.trim_end_matches(<span class="string">&#39;/&#39;</span>).to_string())
-        }
-
-        <span class="self">self
-    </span>}
-
-    <span class="doccomment">/// Region represent the signing region of this endpoint.
-    ///
-    /// - If region is set, we will take user&#39;s input first.
-    /// - If not, the default `us-east-1` will be used.
-    </span><span class="kw">pub fn </span>region(<span class="kw-2">&amp;mut </span><span class="self">self</span>, region: <span class="kw-2">&amp;</span>str) -&gt; <span class="kw-2">&amp;mut </span><span class="self">Self </span>{
-        <span class="kw">if </span>!region.is_empty() {
-            <span class="self">self</span>.region = <span class="prelude-val">Some</span>(region.to_string())
-        }
-
-        <span class="self">self
-    </span>}
-
-    <span class="doccomment">/// Set access_key_id of this backend.
-    ///
-    /// - If access_key_id is set, we will take user&#39;s input first.
-    /// - If not, we will try to load it from environment.
-    </span><span class="kw">pub fn </span>access_key_id(<span class="kw-2">&amp;mut </span><span class="self">self</span>, v: <span class="kw-2">&amp;</span>str) -&gt; <span class="kw-2">&amp;mut </span><span class="self">Self </span>{
-        <span class="kw">if </span>!v.is_empty() {
-            <span class="self">self</span>.access_key_id = <span class="prelude-val">Some</span>(v.to_string())
-        }
-
-        <span class="self">self
-    </span>}
-
-    <span class="doccomment">/// Set secret_access_key of this backend.
-    ///
-    /// - If secret_access_key is set, we will take user&#39;s input first.
-    /// - If not, we will try to load it from environment.
-    </span><span class="kw">pub fn </span>secret_access_key(<span class="kw-2">&amp;mut </span><span class="self">self</span>, v: <span class="kw-2">&amp;</span>str) -&gt; <span class="kw-2">&amp;mut </span><span class="self">Self </span>{
-        <span class="kw">if </span>!v.is_empty() {
-            <span class="self">self</span>.secret_access_key = <span class="prelude-val">Some</span>(v.to_string())
-        }
-
-        <span class="self">self
-    </span>}
-
-    <span class="doccomment">/// Set role_arn for this backend.
-    </span><span class="kw">pub fn </span>role_arn(<span class="kw-2">&amp;mut </span><span class="self">self</span>, v: <span class="kw-2">&amp;</span>str) -&gt; <span class="kw-2">&amp;mut </span><span class="self">Self </span>{
-        <span class="kw">if </span>!v.is_empty() {
-            <span class="self">self</span>.role_arn = <span class="prelude-val">Some</span>(v.to_string())
-        }
-
-        <span class="self">self
-    </span>}
-
-    <span class="doccomment">/// Set external_id for this backend.
-    </span><span class="kw">pub fn </span>external_id(<span class="kw-2">&amp;mut </span><span class="self">self</span>, v: <span class="kw-2">&amp;</span>str) -&gt; <span class="kw-2">&amp;mut </span><span class="self">Self </span>{
-        <span class="kw">if </span>!v.is_empty() {
-            <span class="self">self</span>.external_id = <span class="prelude-val">Some</span>(v.to_string())
-        }
-
-        <span class="self">self
-    </span>}
-
-    <span class="doccomment">/// Set default storage_class for this backend.
-    /// Unlike S3, wasabi only supports one single storage class,
-    /// which is most like standard S3 storage class,
-    /// check `https://docs.wasabi.com/docs/operations-on-objects` for more details.
-    ///
-    /// Available values:
-    /// - `STANDARD`
-    </span><span class="kw">pub fn </span>default_storage_class(<span class="kw-2">&amp;mut </span><span class="self">self</span>, v: <span class="kw-2">&amp;</span>str) -&gt; <span class="kw-2">&amp;mut </span><span class="self">Self </span>{
-        <span class="kw">if </span>!v.is_empty() {
-            <span class="self">self</span>.default_storage_class = <span class="prelude-val">Some</span>(v.to_string())
-        }
-
-        <span class="self">self
-    </span>}
-
-    <span class="doccomment">/// Set server_side_encryption for this backend.
-    ///
-    /// Available values: `AES256`, `aws:kms`.
-    ///
-    /// # Note
-    ///
-    /// This function is the low-level setting for SSE related features.
-    ///
-    /// SSE related options should be set carefully to make them works.
-    /// Please use `server_side_encryption_with_*` helpers if even possible.
-    </span><span class="kw">pub fn </span>server_side_encryption(<span class="kw-2">&amp;mut </span><span class="self">self</span>, v: <span class="kw-2">&amp;</span>str) -&gt; <span class="kw-2">&amp;mut </span><span class="self">Self </span>{
-        <span class="kw">if </span>!v.is_empty() {
-            <span class="self">self</span>.server_side_encryption = <span class="prelude-val">Some</span>(v.to_string())
-        }
-
-        <span class="self">self
-    </span>}
-
-    <span class="doccomment">/// Set server_side_encryption_aws_kms_key_id for this backend
-    ///
-    /// - If `server_side_encryption` set to `aws:kms`, and `server_side_encryption_aws_kms_key_id`
-    /// is not set, S3 will use aws managed kms key to encrypt data.
-    /// - If `server_side_encryption` set to `aws:kms`, and `server_side_encryption_aws_kms_key_id`
-    /// is a valid kms key id, S3 will use the provided kms key to encrypt data.
-    /// - If the `server_side_encryption_aws_kms_key_id` is invalid or not found, an error will be
-    /// returned.
-    /// - If `server_side_encryption` is not `aws:kms`, setting `server_side_encryption_aws_kms_key_id`
-    /// is a noop.
-    ///
-    /// # Note
-    ///
-    /// This function is the low-level setting for SSE related features.
-    ///
-    /// SSE related options should be set carefully to make them works.
-    /// Please use `server_side_encryption_with_*` helpers if even possible.
-    </span><span class="kw">pub fn </span>server_side_encryption_aws_kms_key_id(<span class="kw-2">&amp;mut </span><span class="self">self</span>, v: <span class="kw-2">&amp;</span>str) -&gt; <span class="kw-2">&amp;mut </span><span class="self">Self </span>{
-        <span class="kw">if </span>!v.is_empty() {
-            <span class="self">self</span>.server_side_encryption_aws_kms_key_id = <span class="prelude-val">Some</span>(v.to_string())
-        }
-
-        <span class="self">self
-    </span>}
-
-    <span class="doccomment">/// Set server_side_encryption_customer_algorithm for this backend.
-    ///
-    /// Available values: `AES256`.
-    ///
-    /// # Note
-    ///
-    /// This function is the low-level setting for SSE related features.
-    ///
-    /// SSE related options should be set carefully to make them works.
-    /// Please use `server_side_encryption_with_*` helpers if even possible.
-    </span><span class="kw">pub fn </span>server_side_encryption_customer_algorithm(<span class="kw-2">&amp;mut </span><span class="self">self</span>, v: <span class="kw-2">&amp;</span>str) -&gt; <span class="kw-2">&amp;mut </span><span class="self">Self </span>{
-        <span class="kw">if </span>!v.is_empty() {
-            <span class="self">self</span>.server_side_encryption_customer_algorithm = <span class="prelude-val">Some</span>(v.to_string())
-        }
-
-        <span class="self">self
-    </span>}
-
-    <span class="doccomment">/// Set server_side_encryption_customer_key for this backend.
-    ///
-    /// # Args
-    ///
-    /// `v`: base64 encoded key that matches algorithm specified in
-    /// `server_side_encryption_customer_algorithm`.
-    ///
-    /// # Note
-    ///
-    /// This function is the low-level setting for SSE related features.
-    ///
-    /// SSE related options should be set carefully to make them works.
-    /// Please use `server_side_encryption_with_*` helpers if even possible.
-    </span><span class="kw">pub fn </span>server_side_encryption_customer_key(<span class="kw-2">&amp;mut </span><span class="self">self</span>, v: <span class="kw-2">&amp;</span>str) -&gt; <span class="kw-2">&amp;mut </span><span class="self">Self </span>{
-        <span class="kw">if </span>!v.is_empty() {
-            <span class="self">self</span>.server_side_encryption_customer_key = <span class="prelude-val">Some</span>(v.to_string())
-        }
-
-        <span class="self">self
-    </span>}
-
-    <span class="doccomment">/// Set server_side_encryption_customer_key_md5 for this backend.
-    ///
-    /// # Args
-    ///
-    /// `v`: MD5 digest of key specified in `server_side_encryption_customer_key`.
-    ///
-    /// # Note
-    ///
-    /// This function is the low-level setting for SSE related features.
-    ///
-    /// SSE related options should be set carefully to make them works.
-    /// Please use `server_side_encryption_with_*` helpers if even possible.
-    </span><span class="kw">pub fn </span>server_side_encryption_customer_key_md5(<span class="kw-2">&amp;mut </span><span class="self">self</span>, v: <span class="kw-2">&amp;</span>str) -&gt; <span class="kw-2">&amp;mut </span><span class="self">Self </span>{
-        <span class="kw">if </span>!v.is_empty() {
-            <span class="self">self</span>.server_side_encryption_customer_key_md5 = <span class="prelude-val">Some</span>(v.to_string())
-        }
-
-        <span class="self">self
-    </span>}
-
-    <span class="doccomment">/// Enable server side encryption with aws managed kms key
-    ///
-    /// As known as: SSE-KMS
-    ///
-    /// NOTE: This function should not be used along with other `server_side_encryption_with_` functions.
-    </span><span class="kw">pub fn </span>server_side_encryption_with_aws_managed_kms_key(<span class="kw-2">&amp;mut </span><span class="self">self</span>) -&gt; <span class="kw-2">&amp;mut </span><span class="self">Self </span>{
-        <span class="self">self</span>.server_side_encryption = <span class="prelude-val">Some</span>(<span class="string">&quot;aws:kms&quot;</span>.to_string());
-        <span class="self">self
-    </span>}
-
-    <span class="doccomment">/// Enable server side encryption with customer managed kms key
-    ///
-    /// As known as: SSE-KMS
-    ///
-    /// NOTE: This function should not be used along with other `server_side_encryption_with_` functions.
-    </span><span class="kw">pub fn </span>server_side_encryption_with_customer_managed_kms_key(
-        <span class="kw-2">&amp;mut </span><span class="self">self</span>,
-        aws_kms_key_id: <span class="kw-2">&amp;</span>str,
-    ) -&gt; <span class="kw-2">&amp;mut </span><span class="self">Self </span>{
-        <span class="self">self</span>.server_side_encryption = <span class="prelude-val">Some</span>(<span class="string">&quot;aws:kms&quot;</span>.to_string());
-        <span class="self">self</span>.server_side_encryption_aws_kms_key_id = <span class="prelude-val">Some</span>(aws_kms_key_id.to_string());
-        <span class="self">self
-    </span>}
-
-    <span class="doccomment">/// Enable server side encryption with s3 managed key
-    ///
-    /// As known as: SSE-S3
-    ///
-    /// NOTE: This function should not be used along with other `server_side_encryption_with_` functions.
-    </span><span class="kw">pub fn </span>server_side_encryption_with_s3_key(<span class="kw-2">&amp;mut </span><span class="self">self</span>) -&gt; <span class="kw-2">&amp;mut </span><span class="self">Self </span>{
-        <span class="self">self</span>.server_side_encryption = <span class="prelude-val">Some</span>(<span class="string">&quot;AES256&quot;</span>.to_string());
-        <span class="self">self
-    </span>}
-
-    <span class="doccomment">/// Enable server side encryption with customer key.
-    ///
-    /// As known as: SSE-C
-    ///
-    /// NOTE: This function should not be used along with other `server_side_encryption_with_` functions.
-    </span><span class="kw">pub fn </span>server_side_encryption_with_customer_key(
-        <span class="kw-2">&amp;mut </span><span class="self">self</span>,
-        algorithm: <span class="kw-2">&amp;</span>str,
-        key: <span class="kw-2">&amp;</span>[u8],
-    ) -&gt; <span class="kw-2">&amp;mut </span><span class="self">Self </span>{
-        <span class="self">self</span>.server_side_encryption_customer_algorithm = <span class="prelude-val">Some</span>(algorithm.to_string());
-        <span class="self">self</span>.server_side_encryption_customer_key = <span class="prelude-val">Some</span>(BASE64_STANDARD.encode(key));
-        <span class="self">self</span>.server_side_encryption_customer_key_md5 =
-            <span class="prelude-val">Some</span>(BASE64_STANDARD.encode(Md5::digest(key).as_slice()));
-        <span class="self">self
-    </span>}
-
-    <span class="doccomment">/// Set temporary credential used in service connections
-    ///
-    /// # Warning
-    ///
-    /// security token&#39;s lifetime is short and requires users to refresh in time.
-    </span><span class="kw">pub fn </span>security_token(<span class="kw-2">&amp;mut </span><span class="self">self</span>, token: <span class="kw-2">&amp;</span>str) -&gt; <span class="kw-2">&amp;mut </span><span class="self">Self </span>{
-        <span class="kw">if </span>!token.is_empty() {
-            <span class="self">self</span>.security_token = <span class="prelude-val">Some</span>(token.to_string());
-        }
-        <span class="self">self
-    </span>}
-
-    <span class="doccomment">/// Disable config load so that opendal will not load config from
-    /// environment.
-    ///
-    /// For examples:
-    ///
-    /// - envs like `AWS_ACCESS_KEY_ID`
-    /// - files like `~/.aws/config`
-    </span><span class="kw">pub fn </span>disable_config_load(<span class="kw-2">&amp;mut </span><span class="self">self</span>) -&gt; <span class="kw-2">&amp;mut </span><span class="self">Self </span>{
-        <span class="self">self</span>.disable_config_load = <span class="bool-val">true</span>;
-        <span class="self">self
-    </span>}
-
-    <span class="doccomment">/// Disable load credential from ec2 metadata.
-    ///
-    /// This option is used to disable the default behavior of opendal
-    /// to load credential from ec2 metadata, a.k.a, IMDSv2
-    </span><span class="kw">pub fn </span>disable_ec2_metadata(<span class="kw-2">&amp;mut </span><span class="self">self</span>) -&gt; <span class="kw-2">&amp;mut </span><span class="self">Self </span>{
-        <span class="self">self</span>.disable_ec2_metadata = <span class="bool-val">true</span>;
-        <span class="self">self
-    </span>}
-
-    <span class="doccomment">/// Enable virtual host style so that opendal will send API requests
-    /// in virtual host style instead of path style.
-    ///
-    /// - By default, opendal will send API to `https://s3.us-east-1.wasabisys.com/bucket_name`
-    /// - Enabled, opendal will send API to `https://bucket_name.s3.us-east-1.wasabisys.com`
-    </span><span class="kw">pub fn </span>enable_virtual_host_style(<span class="kw-2">&amp;mut </span><span class="self">self</span>) -&gt; <span class="kw-2">&amp;mut </span><span class="self">Self </span>{
-        <span class="self">self</span>.enable_virtual_host_style = <span class="bool-val">true</span>;
-        <span class="self">self
-    </span>}
-
-    <span class="doccomment">/// Adding a customed credential load for service.
-    </span><span class="kw">pub fn </span>customed_credential_load(<span class="kw-2">&amp;mut </span><span class="self">self</span>, cred: Box&lt;<span class="kw">dyn </span>AwsCredentialLoad&gt;) -&gt; <span class="kw-2">&amp;mut </span><span class="self">Self </span>{
-        <span class="self">self</span>.customed_credential_load = <span class="prelude-val">Some</span>(cred);
-        <span class="self">self
-    </span>}
-
-    <span class="doccomment">/// Specify the http client that used by this service.
-    ///
-    /// # Notes
-    ///
-    /// This API is part of OpenDAL&#39;s Raw API. `HttpClient` could be changed
-    /// during minor updates.
-    </span><span class="kw">pub fn </span>http_client(<span class="kw-2">&amp;mut </span><span class="self">self</span>, client: HttpClient) -&gt; <span class="kw-2">&amp;mut </span><span class="self">Self </span>{
-        <span class="self">self</span>.http_client = <span class="prelude-val">Some</span>(client);
-        <span class="self">self
-    </span>}
-
-    <span class="doccomment">/// Check if `bucket` is valid
-    /// `bucket` must be not empty and if `enable_virtual_host_style` is true
-    /// it couldn&#39;t contain dot(.) character
-    </span><span class="kw">fn </span>is_bucket_valid(<span class="kw-2">&amp;</span><span class="self">self</span>) -&gt; bool {
-        <span class="kw">if </span><span class="self">self</span>.bucket.is_empty() {
-            <span class="kw">return </span><span class="bool-val">false</span>;
-        }
-        <span class="comment">// If enable virtual host style, `bucket` will reside in domain part,
-        // for example `https://bucket_name.s3.us-east-1.amazonaws.com`,
-        // so `bucket` with dot can&#39;t be recognized correctly for this format.
-        </span><span class="kw">if </span><span class="self">self</span>.enable_virtual_host_style &amp;&amp; <span class="self">self</span>.bucket.contains(<span class="string">&#39;.&#39;</span>) {
-            <span class="kw">return </span><span class="bool-val">false</span>;
-        }
-        <span class="bool-val">true
-    </span>}
-
-    <span class="doccomment">/// Build endpoint with given region.
-    </span><span class="kw">fn </span>build_endpoint(<span class="kw-2">&amp;</span><span class="self">self</span>, region: <span class="kw-2">&amp;</span>str) -&gt; String {
-        <span class="kw">let </span>bucket = {
-            <span class="macro">debug_assert!</span>(<span class="self">self</span>.is_bucket_valid(), <span class="string">&quot;bucket must be valid&quot;</span>);
-
-            <span class="self">self</span>.bucket.as_str()
-        };
-
-        <span class="kw">let </span><span class="kw-2">mut </span>endpoint = <span class="kw">match </span><span class="kw-2">&amp;</span><span class="self">self</span>.endpoint {
-            <span class="prelude-val">Some</span>(endpoint) =&gt; {
-                <span class="kw">if </span>endpoint.starts_with(<span class="string">&quot;http&quot;</span>) {
-                    endpoint.to_string()
-                } <span class="kw">else </span>{
-                    <span class="comment">// Prefix https if endpoint doesn&#39;t start with scheme.
-                    </span><span class="macro">format!</span>(<span class="string">&quot;https://{endpoint}&quot;</span>)
-                }
-            }
-            <span class="prelude-val">None </span>=&gt; <span class="string">&quot;https://s3.wasabisys.com&quot;</span>.to_string(),
-        };
-
-        <span class="comment">// If endpoint contains bucket name, we should trim them.
-        </span>endpoint = endpoint.replace(<span class="kw-2">&amp;</span><span class="macro">format!</span>(<span class="string">&quot;//{bucket}.&quot;</span>), <span class="string">&quot;//&quot;</span>);
-
-        <span class="comment">// Update with endpoint templates.
-        </span>endpoint = <span class="kw">if let </span><span class="prelude-val">Some</span>(template) = ENDPOINT_TEMPLATES.get(endpoint.as_str()) {
-            template.replace(<span class="string">&quot;{region}&quot;</span>, region)
-        } <span class="kw">else </span>{
-            <span class="comment">// If we don&#39;t know where about this endpoint, just leave
-            // them as it.
-            </span>endpoint.to_string()
-        };
-
-        <span class="comment">// Apply virtual host style.
-        </span><span class="kw">if </span><span class="self">self</span>.enable_virtual_host_style {
-            endpoint = endpoint.replace(<span class="string">&quot;//&quot;</span>, <span class="kw-2">&amp;</span><span class="macro">format!</span>(<span class="string">&quot;//{bucket}.&quot;</span>))
-        } <span class="kw">else </span>{
-            <span class="macro">write!</span>(endpoint, <span class="string">&quot;/{bucket}&quot;</span>).expect(<span class="string">&quot;write into string must succeed&quot;</span>);
-        };
-
-        endpoint
-    }
-}
-
-<span class="kw">impl </span>Builder <span class="kw">for </span>WasabiBuilder {
-    <span class="kw">const </span>SCHEME: Scheme = Scheme::Wasabi;
-    <span class="kw">type </span>Accessor = WasabiBackend;
-
-    <span class="kw">fn </span>from_map(map: HashMap&lt;String, String&gt;) -&gt; <span class="self">Self </span>{
-        <span class="kw">let </span><span class="kw-2">mut </span>builder = WasabiBuilder::default();
-
-        map.get(<span class="string">&quot;root&quot;</span>).map(|v| builder.root(v));
-        map.get(<span class="string">&quot;bucket&quot;</span>).map(|v| builder.bucket(v));
-        map.get(<span class="string">&quot;endpoint&quot;</span>).map(|v| builder.endpoint(v));
-        map.get(<span class="string">&quot;region&quot;</span>).map(|v| builder.region(v));
-        map.get(<span class="string">&quot;access_key_id&quot;</span>).map(|v| builder.access_key_id(v));
-        map.get(<span class="string">&quot;secret_access_key&quot;</span>)
-            .map(|v| builder.secret_access_key(v));
-        map.get(<span class="string">&quot;security_token&quot;</span>).map(|v| builder.security_token(v));
-        map.get(<span class="string">&quot;role_arn&quot;</span>).map(|v| builder.role_arn(v));
-        map.get(<span class="string">&quot;external_id&quot;</span>).map(|v| builder.external_id(v));
-        map.get(<span class="string">&quot;server_side_encryption&quot;</span>)
-            .map(|v| builder.server_side_encryption(v));
-        map.get(<span class="string">&quot;server_side_encryption_aws_kms_key_id&quot;</span>)
-            .map(|v| builder.server_side_encryption_aws_kms_key_id(v));
-        map.get(<span class="string">&quot;server_side_encryption_customer_algorithm&quot;</span>)
-            .map(|v| builder.server_side_encryption_customer_algorithm(v));
-        map.get(<span class="string">&quot;server_side_encryption_customer_key&quot;</span>)
-            .map(|v| builder.server_side_encryption_customer_key(v));
-        map.get(<span class="string">&quot;server_side_encryption_customer_key_md5&quot;</span>)
-            .map(|v| builder.server_side_encryption_customer_key_md5(v));
-        map.get(<span class="string">&quot;disable_config_load&quot;</span>)
-            .filter(|v| <span class="kw-2">*</span>v == <span class="string">&quot;on&quot; </span>|| <span class="kw-2">*</span>v == <span class="string">&quot;true&quot;</span>)
-            .map(|<span class="kw">_</span>| builder.disable_config_load());
-        map.get(<span class="string">&quot;disable_ec2_metadata&quot;</span>)
-            .filter(|v| <span class="kw-2">*</span>v == <span class="string">&quot;on&quot; </span>|| <span class="kw-2">*</span>v == <span class="string">&quot;true&quot;</span>)
-            .map(|<span class="kw">_</span>| builder.disable_ec2_metadata());
-        map.get(<span class="string">&quot;enable_virtual_host_style&quot;</span>)
-            .filter(|v| <span class="kw-2">*</span>v == <span class="string">&quot;on&quot; </span>|| <span class="kw-2">*</span>v == <span class="string">&quot;true&quot;</span>)
-            .map(|<span class="kw">_</span>| builder.enable_virtual_host_style());
-        map.get(<span class="string">&quot;default_storage_class&quot;</span>)
-            .map(|v| builder.default_storage_class(v));
-
-        builder
-    }
-
-    <span class="kw">fn </span>build(<span class="kw-2">&amp;mut </span><span class="self">self</span>) -&gt; <span class="prelude-ty">Result</span>&lt;<span class="self">Self</span>::Accessor&gt; {
-        <span class="macro">debug!</span>(<span class="string">&quot;backend build started: {:?}&quot;</span>, <span class="kw-2">&amp;</span><span class="self">self</span>);
-
-        <span class="kw">let </span>root = normalize_root(<span class="kw-2">&amp;</span><span class="self">self</span>.root.take().unwrap_or_default());
-        <span class="macro">debug!</span>(<span class="string">&quot;backend use root {}&quot;</span>, <span class="kw-2">&amp;</span>root);
-
-        <span class="comment">// Handle bucket name.
-        </span><span class="kw">let </span>bucket = <span class="kw">if </span><span class="self">self</span>.is_bucket_valid() {
-            <span class="prelude-val">Ok</span>(<span class="kw-2">&amp;</span><span class="self">self</span>.bucket)
-        } <span class="kw">else </span>{
-            <span class="prelude-val">Err</span>(
-                Error::new(ErrorKind::ConfigInvalid, <span class="string">&quot;The bucket is misconfigured&quot;</span>)
-                    .with_context(<span class="string">&quot;service&quot;</span>, Scheme::S3),
-            )
-        }<span class="question-mark">?</span>;
-        <span class="macro">debug!</span>(<span class="string">&quot;backend use bucket {}&quot;</span>, <span class="kw-2">&amp;</span>bucket);
-
-        <span class="kw">let </span>default_storage_class = <span class="kw">match </span><span class="kw-2">&amp;</span><span class="self">self</span>.default_storage_class {
-            <span class="prelude-val">None </span>=&gt; <span class="prelude-val">None</span>,
-            <span class="prelude-val">Some</span>(v) =&gt; <span class="prelude-val">Some</span>(
-                build_header_value(v).map_err(|err| err.with_context(<span class="string">&quot;key&quot;</span>, <span class="string">&quot;storage_class&quot;</span>))<span class="question-mark">?</span>,
-            ),
-        };
-
-        <span class="kw">let </span>server_side_encryption = <span class="kw">match </span><span class="kw-2">&amp;</span><span class="self">self</span>.server_side_encryption {
-            <span class="prelude-val">None </span>=&gt; <span class="prelude-val">None</span>,
-            <span class="prelude-val">Some</span>(v) =&gt; <span class="prelude-val">Some</span>(
-                build_header_value(v)
-                    .map_err(|err| err.with_context(<span class="string">&quot;key&quot;</span>, <span class="string">&quot;server_side_encryption&quot;</span>))<span class="question-mark">?</span>,
-            ),
-        };
-
-        <span class="kw">let </span>server_side_encryption_aws_kms_key_id =
-            <span class="kw">match </span><span class="kw-2">&amp;</span><span class="self">self</span>.server_side_encryption_aws_kms_key_id {
-                <span class="prelude-val">None </span>=&gt; <span class="prelude-val">None</span>,
-                <span class="prelude-val">Some</span>(v) =&gt; <span class="prelude-val">Some</span>(build_header_value(v).map_err(|err| {
-                    err.with_context(<span class="string">&quot;key&quot;</span>, <span class="string">&quot;server_side_encryption_aws_kms_key_id&quot;</span>)
-                })<span class="question-mark">?</span>),
-            };
-
-        <span class="kw">let </span>server_side_encryption_customer_algorithm =
-            <span class="kw">match </span><span class="kw-2">&amp;</span><span class="self">self</span>.server_side_encryption_customer_algorithm {
-                <span class="prelude-val">None </span>=&gt; <span class="prelude-val">None</span>,
-                <span class="prelude-val">Some</span>(v) =&gt; <span class="prelude-val">Some</span>(build_header_value(v).map_err(|err| {
-                    err.with_context(<span class="string">&quot;key&quot;</span>, <span class="string">&quot;server_side_encryption_customer_algorithm&quot;</span>)
-                })<span class="question-mark">?</span>),
-            };
-
-        <span class="kw">let </span>server_side_encryption_customer_key =
-            <span class="kw">match </span><span class="kw-2">&amp;</span><span class="self">self</span>.server_side_encryption_customer_key {
-                <span class="prelude-val">None </span>=&gt; <span class="prelude-val">None</span>,
-                <span class="prelude-val">Some</span>(v) =&gt; <span class="prelude-val">Some</span>(build_header_value(v).map_err(|err| {
-                    err.with_context(<span class="string">&quot;key&quot;</span>, <span class="string">&quot;server_side_encryption_customer_key&quot;</span>)
-                })<span class="question-mark">?</span>),
-            };
-
-        <span class="kw">let </span>server_side_encryption_customer_key_md5 =
-            <span class="kw">match </span><span class="kw-2">&amp;</span><span class="self">self</span>.server_side_encryption_customer_key_md5 {
-                <span class="prelude-val">None </span>=&gt; <span class="prelude-val">None</span>,
-                <span class="prelude-val">Some</span>(v) =&gt; <span class="prelude-val">Some</span>(build_header_value(v).map_err(|err| {
-                    err.with_context(<span class="string">&quot;key&quot;</span>, <span class="string">&quot;server_side_encryption_customer_key_md5&quot;</span>)
-                })<span class="question-mark">?</span>),
-            };
-
-        <span class="kw">let </span>client = <span class="kw">if let </span><span class="prelude-val">Some</span>(client) = <span class="self">self</span>.http_client.take() {
-            client
-        } <span class="kw">else </span>{
-            HttpClient::new().map_err(|err| {
-                err.with_operation(<span class="string">&quot;Builder::build&quot;</span>)
-                    .with_context(<span class="string">&quot;service&quot;</span>, Scheme::S3)
-            })<span class="question-mark">?
-        </span>};
-
-        <span class="kw">let </span><span class="kw-2">mut </span>cfg = AwsConfig::default();
-        <span class="kw">if </span>!<span class="self">self</span>.disable_config_load {
-            cfg = cfg.from_profile();
-            cfg = cfg.from_env();
-        }
-
-        <span class="comment">// Setting all value from user input if available.
-        </span><span class="kw">if let </span><span class="prelude-val">Some</span>(v) = <span class="self">self</span>.region.take() {
-            cfg.region = <span class="prelude-val">Some</span>(v);
-        }
-        <span class="kw">if let </span><span class="prelude-val">Some</span>(v) = <span class="self">self</span>.access_key_id.take() {
-            cfg.access_key_id = <span class="prelude-val">Some</span>(v)
-        }
-        <span class="kw">if let </span><span class="prelude-val">Some</span>(v) = <span class="self">self</span>.secret_access_key.take() {
-            cfg.secret_access_key = <span class="prelude-val">Some</span>(v)
-        }
-        <span class="kw">if let </span><span class="prelude-val">Some</span>(v) = <span class="self">self</span>.security_token.take() {
-            cfg.session_token = <span class="prelude-val">Some</span>(v)
-        }
-        <span class="kw">if let </span><span class="prelude-val">Some</span>(v) = <span class="self">self</span>.role_arn.take() {
-            cfg.role_arn = <span class="prelude-val">Some</span>(v)
-        }
-        <span class="kw">if let </span><span class="prelude-val">Some</span>(v) = <span class="self">self</span>.external_id.take() {
-            cfg.external_id = <span class="prelude-val">Some</span>(v)
-        }
-
-        <span class="kw">if </span>cfg.region.is_none() {
-            <span class="comment">// region is required to make signer work.
-            //
-            // If we don&#39;t know region after loading from builder and env.
-            // We will use `us-east-1` as default.
-            </span>cfg.region = <span class="prelude-val">Some</span>(<span class="string">&quot;us-east-1&quot;</span>.to_string());
-        }
-
-        <span class="kw">let </span>region = cfg.region.to_owned().unwrap();
-        <span class="macro">debug!</span>(<span class="string">&quot;backend use region: {region}&quot;</span>);
-
-        <span class="comment">// Building endpoint.
-        </span><span class="kw">let </span>endpoint = <span class="self">self</span>.build_endpoint(<span class="kw-2">&amp;</span>region);
-        <span class="macro">debug!</span>(<span class="string">&quot;backend use endpoint: {endpoint}&quot;</span>);
-
-        <span class="kw">let </span><span class="kw-2">mut </span>loader = AwsDefaultLoader::new(client.client(), cfg);
-        <span class="kw">if </span><span class="self">self</span>.disable_ec2_metadata {
-            loader = loader.with_disable_ec2_metadata();
-        }
-
-        <span class="kw">let </span>signer = AwsV4Signer::new(<span class="string">&quot;s3&quot;</span>, <span class="kw-2">&amp;</span>region);
-
-        <span class="macro">debug!</span>(<span class="string">&quot;backend build finished&quot;</span>);
-        <span class="prelude-val">Ok</span>(WasabiBackend {
-            core: Arc::new(WasabiCore {
-                bucket: bucket.to_string(),
-                endpoint,
-                root,
-                server_side_encryption,
-                server_side_encryption_aws_kms_key_id,
-                server_side_encryption_customer_algorithm,
-                server_side_encryption_customer_key,
-                server_side_encryption_customer_key_md5,
-                default_storage_class,
-                signer,
-                loader,
-                client,
-            }),
-        })
-    }
-}
-
-<span class="doccomment">/// Backend for wasabi service.
-</span><span class="attr">#[derive(Debug, Clone)]
-</span><span class="kw">pub struct </span>WasabiBackend {
-    core: Arc&lt;WasabiCore&gt;,
-}
-
-<span class="attr">#[async_trait]
-</span><span class="kw">impl </span>Accessor <span class="kw">for </span>WasabiBackend {
-    <span class="kw">type </span>Reader = IncomingAsyncBody;
-    <span class="kw">type </span>BlockingReader = ();
-    <span class="kw">type </span>Writer = oio::OneShotWriter&lt;WasabiWriter&gt;;
-    <span class="kw">type </span>BlockingWriter = ();
-    <span class="kw">type </span>Pager = WasabiPager;
-    <span class="kw">type </span>BlockingPager = ();
-
-    <span class="kw">fn </span>info(<span class="kw-2">&amp;</span><span class="self">self</span>) -&gt; AccessorInfo {
-        <span class="kw">let </span><span class="kw-2">mut </span>am = AccessorInfo::default();
-        am.set_scheme(Scheme::Wasabi)
-            .set_root(<span class="kw-2">&amp;</span><span class="self">self</span>.core.root)
-            .set_name(<span class="kw-2">&amp;</span><span class="self">self</span>.core.bucket)
-            .set_native_capability(Capability {
-                stat: <span class="bool-val">true</span>,
-                stat_with_if_match: <span class="bool-val">true</span>,
-                stat_with_if_none_match: <span class="bool-val">true</span>,
-
-                read: <span class="bool-val">true</span>,
-                read_can_next: <span class="bool-val">true</span>,
-                read_with_range: <span class="bool-val">true</span>,
-
-                write: <span class="bool-val">true</span>,
-                create_dir: <span class="bool-val">true</span>,
-                delete: <span class="bool-val">true</span>,
-                copy: <span class="bool-val">true</span>,
-                rename: <span class="bool-val">true</span>,
-
-                list: <span class="bool-val">true</span>,
-                list_without_delimiter: <span class="bool-val">true</span>,
-                list_with_delimiter_slash: <span class="bool-val">true</span>,
-
-                presign: <span class="bool-val">true</span>,
-                presign_stat: <span class="bool-val">true</span>,
-                presign_read: <span class="bool-val">true</span>,
-                presign_write: <span class="bool-val">true</span>,
-
-                batch: <span class="bool-val">true</span>,
-
-                ..Default::default()
-            });
-
-        am
-    }
-
-    <span class="kw">async fn </span>create_dir(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, <span class="kw">_</span>: OpCreateDir) -&gt; <span class="prelude-ty">Result</span>&lt;RpCreateDir&gt; {
-        <span class="kw">let </span><span class="kw-2">mut </span>req =
-            <span class="self">self</span>.core
-                .put_object_request(path, <span class="prelude-val">Some</span>(<span class="number">0</span>), <span class="kw-2">&amp;</span>OpWrite::default(), AsyncBody::Empty)<span class="question-mark">?</span>;
-
-        <span class="self">self</span>.core.sign(<span class="kw-2">&amp;mut </span>req).<span class="kw">await</span><span class="question-mark">?</span>;
-
-        <span class="kw">let </span>resp = <span class="self">self</span>.core.send(req).<span class="kw">await</span><span class="question-mark">?</span>;
-
-        <span class="kw">let </span>status = resp.status();
-
-        <span class="kw">match </span>status {
-            StatusCode::CREATED | StatusCode::OK =&gt; {
-                resp.into_body().consume().<span class="kw">await</span><span class="question-mark">?</span>;
-                <span class="prelude-val">Ok</span>(RpCreateDir::default())
-            }
-            <span class="kw">_ </span>=&gt; <span class="prelude-val">Err</span>(parse_error(resp).<span class="kw">await</span><span class="question-mark">?</span>),
-        }
-    }
-
-    <span class="kw">async fn </span>read(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, args: OpRead) -&gt; <span class="prelude-ty">Result</span>&lt;(RpRead, <span class="self">Self</span>::Reader)&gt; {
-        <span class="kw">let </span>resp = <span class="self">self</span>.core.get_object(path, <span class="kw-2">&amp;</span>args).<span class="kw">await</span><span class="question-mark">?</span>;
-
-        <span class="kw">let </span>status = resp.status();
-
-        <span class="kw">match </span>status {
-            StatusCode::OK | StatusCode::PARTIAL_CONTENT =&gt; <span class="prelude-val">Ok</span>((RpRead::new(), resp.into_body())),
-            <span class="kw">_ </span>=&gt; <span class="prelude-val">Err</span>(parse_error(resp).<span class="kw">await</span><span class="question-mark">?</span>),
-        }
-    }
-
-    <span class="kw">async fn </span>write(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, args: OpWrite) -&gt; <span class="prelude-ty">Result</span>&lt;(RpWrite, <span class="self">Self</span>::Writer)&gt; {
-        <span class="prelude-val">Ok</span>((
-            RpWrite::default(),
-            oio::OneShotWriter::new(WasabiWriter::new(<span class="self">self</span>.core.clone(), args, path.to_string())),
-        ))
-    }
-
-    <span class="kw">async fn </span>copy(<span class="kw-2">&amp;</span><span class="self">self</span>, from: <span class="kw-2">&amp;</span>str, to: <span class="kw-2">&amp;</span>str, _args: OpCopy) -&gt; <span class="prelude-ty">Result</span>&lt;RpCopy&gt; {
-        <span class="kw">let </span>resp = <span class="self">self</span>.core.copy_object(from, to).<span class="kw">await</span><span class="question-mark">?</span>;
-
-        <span class="kw">let </span>status = resp.status();
-
-        <span class="kw">match </span>status {
-            StatusCode::OK =&gt; {
-                <span class="comment">// According to the documentation, when using copy_object, a 200 error may occur and we need to detect it.
-                // https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html#API_CopyObject_RequestSyntax
-                </span>resp.into_body().consume().<span class="kw">await</span><span class="question-mark">?</span>;
-
-                <span class="prelude-val">Ok</span>(RpCopy::default())
-            }
-            <span class="kw">_ </span>=&gt; <span class="prelude-val">Err</span>(parse_error(resp).<span class="kw">await</span><span class="question-mark">?</span>),
-        }
-    }
-
-    <span class="kw">async fn </span>stat(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, args: OpStat) -&gt; <span class="prelude-ty">Result</span>&lt;RpStat&gt; {
-        <span class="comment">// Stat root always returns a DIR.
-        </span><span class="kw">if </span>path == <span class="string">&quot;/&quot; </span>{
-            <span class="kw">return </span><span class="prelude-val">Ok</span>(RpStat::new(Metadata::new(EntryMode::DIR)));
-        }
-
-        <span class="kw">let </span>resp = <span class="self">self</span>.core.head_object(path, <span class="kw-2">&amp;</span>args).<span class="kw">await</span><span class="question-mark">?</span>;
-
-        <span class="kw">let </span>status = resp.status();
-
-        <span class="kw">match </span>status {
-            StatusCode::OK =&gt; parse_into_metadata(path, resp.headers()).map(RpStat::new),
-            StatusCode::NOT_FOUND <span class="kw">if </span>path.ends_with(<span class="string">&#39;/&#39;</span>) =&gt; {
-                <span class="prelude-val">Ok</span>(RpStat::new(Metadata::new(EntryMode::DIR)))
-            }
-            <span class="kw">_ </span>=&gt; <span class="prelude-val">Err</span>(parse_error(resp).<span class="kw">await</span><span class="question-mark">?</span>),
-        }
-    }
-
-    <span class="kw">async fn </span>delete(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, <span class="kw">_</span>: OpDelete) -&gt; <span class="prelude-ty">Result</span>&lt;RpDelete&gt; {
-        <span class="kw">let </span>resp = <span class="self">self</span>.core.delete_object(path).<span class="kw">await</span><span class="question-mark">?</span>;
-
-        <span class="kw">let </span>status = resp.status();
-
-        <span class="kw">match </span>status {
-            StatusCode::NO_CONTENT =&gt; <span class="prelude-val">Ok</span>(RpDelete::default()),
-            <span class="kw">_ </span>=&gt; <span class="prelude-val">Err</span>(parse_error(resp).<span class="kw">await</span><span class="question-mark">?</span>),
-        }
-    }
-
-    <span class="kw">async fn </span>list(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, args: OpList) -&gt; <span class="prelude-ty">Result</span>&lt;(RpList, <span class="self">Self</span>::Pager)&gt; {
-        <span class="prelude-val">Ok</span>((
-            RpList::default(),
-            WasabiPager::new(<span class="self">self</span>.core.clone(), path, args.delimiter(), args.limit()),
-        ))
-    }
-
-    <span class="kw">async fn </span>presign(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, args: OpPresign) -&gt; <span class="prelude-ty">Result</span>&lt;RpPresign&gt; {
-        <span class="comment">// We will not send this request out, just for signing.
-        </span><span class="kw">let </span><span class="kw-2">mut </span>req = <span class="kw">match </span>args.operation() {
-            PresignOperation::Stat(v) =&gt; <span class="self">self</span>.core.head_object_request(path, v)<span class="question-mark">?</span>,
-            PresignOperation::Read(v) =&gt; <span class="self">self</span>.core.get_object_request(path, v)<span class="question-mark">?</span>,
-            PresignOperation::Write(<span class="kw">_</span>) =&gt; {
-                <span class="self">self</span>.core
-                    .put_object_request(path, <span class="prelude-val">None</span>, <span class="kw-2">&amp;</span>OpWrite::default(), AsyncBody::Empty)<span class="question-mark">?
-            </span>}
-        };
-
-        <span class="self">self</span>.core.sign_query(<span class="kw-2">&amp;mut </span>req, args.expire()).<span class="kw">await</span><span class="question-mark">?</span>;
-
-        <span class="comment">// We don&#39;t need this request anymore, consume it directly.
-        </span><span class="kw">let </span>(parts, <span class="kw">_</span>) = req.into_parts();
-
-        <span class="prelude-val">Ok</span>(RpPresign::new(PresignedRequest::new(
-            parts.method,
-            parts.uri,
-            parts.headers,
-        )))
-    }
-
-    <span class="kw">async fn </span>batch(<span class="kw-2">&amp;</span><span class="self">self</span>, args: OpBatch) -&gt; <span class="prelude-ty">Result</span>&lt;RpBatch&gt; {
-        <span class="kw">let </span>ops = args.into_operation();
-        <span class="kw">if </span>ops.len() &gt; <span class="number">1000 </span>{
-            <span class="kw">return </span><span class="prelude-val">Err</span>(Error::new(
-                ErrorKind::Unsupported,
-                <span class="string">&quot;wasabi services only allow delete up to 1000 keys at once&quot;</span>,
-            )
-            .with_context(<span class="string">&quot;length&quot;</span>, ops.len().to_string()));
-        }
-
-        <span class="kw">let </span>paths = ops.into_iter().map(|(p, <span class="kw">_</span>)| p).collect();
-
-        <span class="kw">let </span>resp = <span class="self">self</span>.core.delete_objects(paths).<span class="kw">await</span><span class="question-mark">?</span>;
-
-        <span class="kw">let </span>status = resp.status();
-
-        <span class="kw">if let </span>StatusCode::OK = status {
-            <span class="kw">let </span>bs = resp.into_body().bytes().<span class="kw">await</span><span class="question-mark">?</span>;
-
-            <span class="kw">let </span>result: DeleteObjectsResult =
-                quick_xml::de::from_reader(bs.reader()).map_err(new_xml_deserialize_error)<span class="question-mark">?</span>;
-
-            <span class="kw">let </span><span class="kw-2">mut </span>batched_result = Vec::with_capacity(result.deleted.len() + result.error.len());
-            <span class="kw">for </span>i <span class="kw">in </span>result.deleted {
-                <span class="kw">let </span>path = build_rel_path(<span class="kw-2">&amp;</span><span class="self">self</span>.core.root, <span class="kw-2">&amp;</span>i.key);
-                batched_result.push((path, <span class="prelude-val">Ok</span>(RpDelete::default().into())));
-            }
-            <span class="comment">// TODO: we should handle those errors with code.
-            </span><span class="kw">for </span>i <span class="kw">in </span>result.error {
-                <span class="kw">let </span>path = build_rel_path(<span class="kw-2">&amp;</span><span class="self">self</span>.core.root, <span class="kw-2">&amp;</span>i.key);
-
-                <span class="comment">// set the error kind and mark temporary if retryable
-                </span><span class="kw">let </span>(kind, retryable) =
-                    parse_wasabi_error_code(<span class="kw-2">&amp;</span>i.code).unwrap_or((ErrorKind::Unexpected, <span class="bool-val">false</span>));
-                <span class="kw">let </span><span class="kw-2">mut </span>err: Error = Error::new(kind, <span class="kw-2">&amp;</span><span class="macro">format!</span>(<span class="string">&quot;{i:?}&quot;</span>));
-                <span class="kw">if </span>retryable {
-                    err = err.set_temporary();
-                }
-
-                batched_result.push((path, <span class="prelude-val">Err</span>(err)));
-            }
-
-            <span class="prelude-val">Ok</span>(RpBatch::new(batched_result))
-        } <span class="kw">else </span>{
-            <span class="prelude-val">Err</span>(parse_error(resp).<span class="kw">await</span><span class="question-mark">?</span>)
-        }
-    }
-
-    <span class="doccomment">/// Execute rename API call
-    /// Wasabi will auto-create missing path for destination `to` if any
-    </span><span class="kw">async fn </span>rename(<span class="kw-2">&amp;</span><span class="self">self</span>, from: <span class="kw-2">&amp;</span>str, to: <span class="kw-2">&amp;</span>str, _args: OpRename) -&gt; <span class="prelude-ty">Result</span>&lt;RpRename&gt; {
-        <span class="kw">let </span>resp = <span class="self">self</span>.core.rename_object(from, to).<span class="kw">await</span><span class="question-mark">?</span>;
-
-        <span class="kw">let </span>status = resp.status();
-
-        <span class="kw">match </span>status {
-            StatusCode::OK =&gt; <span class="prelude-val">Ok</span>(RpRename::default()),
-            <span class="kw">_ </span>=&gt; <span class="prelude-val">Err</span>(parse_error(resp).<span class="kw">await</span><span class="question-mark">?</span>),
-        }
-    }
-}
-
-<span class="attr">#[cfg(test)]
-</span><span class="kw">mod </span>tests {
-    <span class="kw">use super</span>::<span class="kw-2">*</span>;
-
-    <span class="attr">#[test]
-    </span><span class="kw">fn </span>test_is_valid_bucket() {
-        <span class="kw">let </span>bucket_cases = <span class="macro">vec!</span>[
-            (<span class="string">&quot;&quot;</span>, <span class="bool-val">false</span>, <span class="bool-val">false</span>),
-            (<span class="string">&quot;test&quot;</span>, <span class="bool-val">false</span>, <span class="bool-val">true</span>),
-            (<span class="string">&quot;test.xyz&quot;</span>, <span class="bool-val">false</span>, <span class="bool-val">true</span>),
-            (<span class="string">&quot;&quot;</span>, <span class="bool-val">true</span>, <span class="bool-val">false</span>),
-            (<span class="string">&quot;test&quot;</span>, <span class="bool-val">true</span>, <span class="bool-val">true</span>),
-            (<span class="string">&quot;test.xyz&quot;</span>, <span class="bool-val">true</span>, <span class="bool-val">false</span>),
-        ];
-
-        <span class="kw">for </span>(bucket, enable_virtual_host_style, expected) <span class="kw">in </span>bucket_cases {
-            <span class="kw">let </span><span class="kw-2">mut </span>b = WasabiBuilder::default();
-            b.bucket(bucket);
-            <span class="kw">if </span>enable_virtual_host_style {
-                b.enable_virtual_host_style();
-            }
-            <span class="macro">assert_eq!</span>(b.is_bucket_valid(), expected)
-        }
-    }
-
-    <span class="attr">#[test]
-    </span><span class="kw">fn </span>test_build_endpoint() {
-        <span class="kw">let _ </span>= tracing_subscriber::fmt().with_test_writer().try_init();
-
-        <span class="kw">let </span>endpoint_cases = <span class="macro">vec!</span>[
-            <span class="prelude-val">Some</span>(<span class="string">&quot;s3.wasabisys.com&quot;</span>),
-            <span class="prelude-val">Some</span>(<span class="string">&quot;https://s3.wasabisys.com&quot;</span>),
-            <span class="prelude-val">Some</span>(<span class="string">&quot;https://s3.us-east-2.wasabisys.com&quot;</span>),
-            <span class="prelude-val">None</span>,
-        ];
-
-        <span class="kw">for </span>endpoint <span class="kw">in </span><span class="kw-2">&amp;</span>endpoint_cases {
-            <span class="kw">let </span><span class="kw-2">mut </span>b = WasabiBuilder::default();
-            b.bucket(<span class="string">&quot;test&quot;</span>);
-            <span class="kw">if let </span><span class="prelude-val">Some</span>(endpoint) = endpoint {
-                b.endpoint(endpoint);
-            }
-
-            <span class="kw">let </span>endpoint = b.build_endpoint(<span class="string">&quot;us-east-2&quot;</span>);
-            <span class="macro">assert_eq!</span>(endpoint, <span class="string">&quot;https://s3.us-east-2.wasabisys.com/test&quot;</span>);
-        }
-
-        <span class="kw">for </span>endpoint <span class="kw">in </span><span class="kw-2">&amp;</span>endpoint_cases {
-            <span class="kw">let </span><span class="kw-2">mut </span>b = WasabiBuilder::default();
-            b.bucket(<span class="string">&quot;test&quot;</span>);
-            b.enable_virtual_host_style();
-            <span class="kw">if let </span><span class="prelude-val">Some</span>(endpoint) = endpoint {
-                b.endpoint(endpoint);
-            }
-
-            <span class="kw">let </span>endpoint = b.build_endpoint(<span class="string">&quot;us-east-2&quot;</span>);
-            <span class="macro">assert_eq!</span>(endpoint, <span class="string">&quot;https://test.s3.us-east-2.wasabisys.com&quot;</span>);
-        }
-    }
-}
-</code></pre></div></section></main></body></html>
\ No newline at end of file
diff --git a/docs/rust/src/opendal/services/wasabi/core.rs.html b/docs/rust/src/opendal/services/wasabi/core.rs.html
deleted file mode 100644
index c14502f9e..000000000
--- a/docs/rust/src/opendal/services/wasabi/core.rs.html
+++ /dev/null
@@ -1,1823 +0,0 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `core/src/services/wasabi/core.rs`."><title>core.rs - source</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossori [...]
-<a href="#2" id="2">2</a>
-<a href="#3" id="3">3</a>
-<a href="#4" id="4">4</a>
-<a href="#5" id="5">5</a>
-<a href="#6" id="6">6</a>
-<a href="#7" id="7">7</a>
-<a href="#8" id="8">8</a>
-<a href="#9" id="9">9</a>
-<a href="#10" id="10">10</a>
-<a href="#11" id="11">11</a>
-<a href="#12" id="12">12</a>
-<a href="#13" id="13">13</a>
-<a href="#14" id="14">14</a>
-<a href="#15" id="15">15</a>
-<a href="#16" id="16">16</a>
-<a href="#17" id="17">17</a>
-<a href="#18" id="18">18</a>
-<a href="#19" id="19">19</a>
-<a href="#20" id="20">20</a>
-<a href="#21" id="21">21</a>
-<a href="#22" id="22">22</a>
-<a href="#23" id="23">23</a>
-<a href="#24" id="24">24</a>
-<a href="#25" id="25">25</a>
-<a href="#26" id="26">26</a>
-<a href="#27" id="27">27</a>
-<a href="#28" id="28">28</a>
-<a href="#29" id="29">29</a>
-<a href="#30" id="30">30</a>
-<a href="#31" id="31">31</a>
-<a href="#32" id="32">32</a>
-<a href="#33" id="33">33</a>
-<a href="#34" id="34">34</a>
-<a href="#35" id="35">35</a>
-<a href="#36" id="36">36</a>
-<a href="#37" id="37">37</a>
-<a href="#38" id="38">38</a>
-<a href="#39" id="39">39</a>
-<a href="#40" id="40">40</a>
-<a href="#41" id="41">41</a>
-<a href="#42" id="42">42</a>
-<a href="#43" id="43">43</a>
-<a href="#44" id="44">44</a>
-<a href="#45" id="45">45</a>
-<a href="#46" id="46">46</a>
-<a href="#47" id="47">47</a>
-<a href="#48" id="48">48</a>
-<a href="#49" id="49">49</a>
-<a href="#50" id="50">50</a>
-<a href="#51" id="51">51</a>
-<a href="#52" id="52">52</a>
-<a href="#53" id="53">53</a>
-<a href="#54" id="54">54</a>
-<a href="#55" id="55">55</a>
-<a href="#56" id="56">56</a>
-<a href="#57" id="57">57</a>
-<a href="#58" id="58">58</a>
-<a href="#59" id="59">59</a>
-<a href="#60" id="60">60</a>
-<a href="#61" id="61">61</a>
-<a href="#62" id="62">62</a>
-<a href="#63" id="63">63</a>
-<a href="#64" id="64">64</a>
-<a href="#65" id="65">65</a>
-<a href="#66" id="66">66</a>
-<a href="#67" id="67">67</a>
-<a href="#68" id="68">68</a>
-<a href="#69" id="69">69</a>
-<a href="#70" id="70">70</a>
-<a href="#71" id="71">71</a>
-<a href="#72" id="72">72</a>
-<a href="#73" id="73">73</a>
-<a href="#74" id="74">74</a>
-<a href="#75" id="75">75</a>
-<a href="#76" id="76">76</a>
-<a href="#77" id="77">77</a>
-<a href="#78" id="78">78</a>
-<a href="#79" id="79">79</a>
-<a href="#80" id="80">80</a>
-<a href="#81" id="81">81</a>
-<a href="#82" id="82">82</a>
-<a href="#83" id="83">83</a>
-<a href="#84" id="84">84</a>
-<a href="#85" id="85">85</a>
-<a href="#86" id="86">86</a>
-<a href="#87" id="87">87</a>
-<a href="#88" id="88">88</a>
-<a href="#89" id="89">89</a>
-<a href="#90" id="90">90</a>
-<a href="#91" id="91">91</a>
-<a href="#92" id="92">92</a>
-<a href="#93" id="93">93</a>
-<a href="#94" id="94">94</a>
-<a href="#95" id="95">95</a>
-<a href="#96" id="96">96</a>
-<a href="#97" id="97">97</a>
-<a href="#98" id="98">98</a>
-<a href="#99" id="99">99</a>
-<a href="#100" id="100">100</a>
-<a href="#101" id="101">101</a>
-<a href="#102" id="102">102</a>
-<a href="#103" id="103">103</a>
-<a href="#104" id="104">104</a>
-<a href="#105" id="105">105</a>
-<a href="#106" id="106">106</a>
-<a href="#107" id="107">107</a>
-<a href="#108" id="108">108</a>
-<a href="#109" id="109">109</a>
-<a href="#110" id="110">110</a>
-<a href="#111" id="111">111</a>
-<a href="#112" id="112">112</a>
-<a href="#113" id="113">113</a>
-<a href="#114" id="114">114</a>
-<a href="#115" id="115">115</a>
-<a href="#116" id="116">116</a>
-<a href="#117" id="117">117</a>
-<a href="#118" id="118">118</a>
-<a href="#119" id="119">119</a>
-<a href="#120" id="120">120</a>
-<a href="#121" id="121">121</a>
-<a href="#122" id="122">122</a>
-<a href="#123" id="123">123</a>
-<a href="#124" id="124">124</a>
-<a href="#125" id="125">125</a>
-<a href="#126" id="126">126</a>
-<a href="#127" id="127">127</a>
-<a href="#128" id="128">128</a>
-<a href="#129" id="129">129</a>
-<a href="#130" id="130">130</a>
-<a href="#131" id="131">131</a>
-<a href="#132" id="132">132</a>
-<a href="#133" id="133">133</a>
-<a href="#134" id="134">134</a>
-<a href="#135" id="135">135</a>
-<a href="#136" id="136">136</a>
-<a href="#137" id="137">137</a>
-<a href="#138" id="138">138</a>
-<a href="#139" id="139">139</a>
-<a href="#140" id="140">140</a>
-<a href="#141" id="141">141</a>
-<a href="#142" id="142">142</a>
-<a href="#143" id="143">143</a>
-<a href="#144" id="144">144</a>
-<a href="#145" id="145">145</a>
-<a href="#146" id="146">146</a>
-<a href="#147" id="147">147</a>
-<a href="#148" id="148">148</a>
-<a href="#149" id="149">149</a>
-<a href="#150" id="150">150</a>
-<a href="#151" id="151">151</a>
-<a href="#152" id="152">152</a>
-<a href="#153" id="153">153</a>
-<a href="#154" id="154">154</a>
-<a href="#155" id="155">155</a>
-<a href="#156" id="156">156</a>
-<a href="#157" id="157">157</a>
-<a href="#158" id="158">158</a>
-<a href="#159" id="159">159</a>
-<a href="#160" id="160">160</a>
-<a href="#161" id="161">161</a>
-<a href="#162" id="162">162</a>
-<a href="#163" id="163">163</a>
-<a href="#164" id="164">164</a>
-<a href="#165" id="165">165</a>
-<a href="#166" id="166">166</a>
-<a href="#167" id="167">167</a>
-<a href="#168" id="168">168</a>
-<a href="#169" id="169">169</a>
-<a href="#170" id="170">170</a>
-<a href="#171" id="171">171</a>
-<a href="#172" id="172">172</a>
-<a href="#173" id="173">173</a>
-<a href="#174" id="174">174</a>
-<a href="#175" id="175">175</a>
-<a href="#176" id="176">176</a>
-<a href="#177" id="177">177</a>
-<a href="#178" id="178">178</a>
-<a href="#179" id="179">179</a>
-<a href="#180" id="180">180</a>
-<a href="#181" id="181">181</a>
-<a href="#182" id="182">182</a>
-<a href="#183" id="183">183</a>
-<a href="#184" id="184">184</a>
-<a href="#185" id="185">185</a>
-<a href="#186" id="186">186</a>
-<a href="#187" id="187">187</a>
-<a href="#188" id="188">188</a>
-<a href="#189" id="189">189</a>
-<a href="#190" id="190">190</a>
-<a href="#191" id="191">191</a>
-<a href="#192" id="192">192</a>
-<a href="#193" id="193">193</a>
-<a href="#194" id="194">194</a>
-<a href="#195" id="195">195</a>
-<a href="#196" id="196">196</a>
-<a href="#197" id="197">197</a>
-<a href="#198" id="198">198</a>
-<a href="#199" id="199">199</a>
-<a href="#200" id="200">200</a>
-<a href="#201" id="201">201</a>
-<a href="#202" id="202">202</a>
-<a href="#203" id="203">203</a>
-<a href="#204" id="204">204</a>
-<a href="#205" id="205">205</a>
-<a href="#206" id="206">206</a>
-<a href="#207" id="207">207</a>
-<a href="#208" id="208">208</a>
-<a href="#209" id="209">209</a>
-<a href="#210" id="210">210</a>
-<a href="#211" id="211">211</a>
-<a href="#212" id="212">212</a>
-<a href="#213" id="213">213</a>
-<a href="#214" id="214">214</a>
-<a href="#215" id="215">215</a>
-<a href="#216" id="216">216</a>
-<a href="#217" id="217">217</a>
-<a href="#218" id="218">218</a>
-<a href="#219" id="219">219</a>
-<a href="#220" id="220">220</a>
-<a href="#221" id="221">221</a>
-<a href="#222" id="222">222</a>
-<a href="#223" id="223">223</a>
-<a href="#224" id="224">224</a>
-<a href="#225" id="225">225</a>
-<a href="#226" id="226">226</a>
-<a href="#227" id="227">227</a>
-<a href="#228" id="228">228</a>
-<a href="#229" id="229">229</a>
-<a href="#230" id="230">230</a>
-<a href="#231" id="231">231</a>
-<a href="#232" id="232">232</a>
-<a href="#233" id="233">233</a>
-<a href="#234" id="234">234</a>
-<a href="#235" id="235">235</a>
-<a href="#236" id="236">236</a>
-<a href="#237" id="237">237</a>
-<a href="#238" id="238">238</a>
-<a href="#239" id="239">239</a>
-<a href="#240" id="240">240</a>
-<a href="#241" id="241">241</a>
-<a href="#242" id="242">242</a>
-<a href="#243" id="243">243</a>
-<a href="#244" id="244">244</a>
-<a href="#245" id="245">245</a>
-<a href="#246" id="246">246</a>
-<a href="#247" id="247">247</a>
-<a href="#248" id="248">248</a>
-<a href="#249" id="249">249</a>
-<a href="#250" id="250">250</a>
-<a href="#251" id="251">251</a>
-<a href="#252" id="252">252</a>
-<a href="#253" id="253">253</a>
-<a href="#254" id="254">254</a>
-<a href="#255" id="255">255</a>
-<a href="#256" id="256">256</a>
-<a href="#257" id="257">257</a>
-<a href="#258" id="258">258</a>
-<a href="#259" id="259">259</a>
-<a href="#260" id="260">260</a>
-<a href="#261" id="261">261</a>
-<a href="#262" id="262">262</a>
-<a href="#263" id="263">263</a>
-<a href="#264" id="264">264</a>
-<a href="#265" id="265">265</a>
-<a href="#266" id="266">266</a>
-<a href="#267" id="267">267</a>
-<a href="#268" id="268">268</a>
-<a href="#269" id="269">269</a>
-<a href="#270" id="270">270</a>
-<a href="#271" id="271">271</a>
-<a href="#272" id="272">272</a>
-<a href="#273" id="273">273</a>
-<a href="#274" id="274">274</a>
-<a href="#275" id="275">275</a>
-<a href="#276" id="276">276</a>
-<a href="#277" id="277">277</a>
-<a href="#278" id="278">278</a>
-<a href="#279" id="279">279</a>
-<a href="#280" id="280">280</a>
-<a href="#281" id="281">281</a>
-<a href="#282" id="282">282</a>
-<a href="#283" id="283">283</a>
-<a href="#284" id="284">284</a>
-<a href="#285" id="285">285</a>
-<a href="#286" id="286">286</a>
-<a href="#287" id="287">287</a>
-<a href="#288" id="288">288</a>
-<a href="#289" id="289">289</a>
-<a href="#290" id="290">290</a>
-<a href="#291" id="291">291</a>
-<a href="#292" id="292">292</a>
-<a href="#293" id="293">293</a>
-<a href="#294" id="294">294</a>
-<a href="#295" id="295">295</a>
-<a href="#296" id="296">296</a>
-<a href="#297" id="297">297</a>
-<a href="#298" id="298">298</a>
-<a href="#299" id="299">299</a>
-<a href="#300" id="300">300</a>
-<a href="#301" id="301">301</a>
-<a href="#302" id="302">302</a>
-<a href="#303" id="303">303</a>
-<a href="#304" id="304">304</a>
-<a href="#305" id="305">305</a>
-<a href="#306" id="306">306</a>
-<a href="#307" id="307">307</a>
-<a href="#308" id="308">308</a>
-<a href="#309" id="309">309</a>
-<a href="#310" id="310">310</a>
-<a href="#311" id="311">311</a>
-<a href="#312" id="312">312</a>
-<a href="#313" id="313">313</a>
-<a href="#314" id="314">314</a>
-<a href="#315" id="315">315</a>
-<a href="#316" id="316">316</a>
-<a href="#317" id="317">317</a>
-<a href="#318" id="318">318</a>
-<a href="#319" id="319">319</a>
-<a href="#320" id="320">320</a>
-<a href="#321" id="321">321</a>
-<a href="#322" id="322">322</a>
-<a href="#323" id="323">323</a>
-<a href="#324" id="324">324</a>
-<a href="#325" id="325">325</a>
-<a href="#326" id="326">326</a>
-<a href="#327" id="327">327</a>
-<a href="#328" id="328">328</a>
-<a href="#329" id="329">329</a>
-<a href="#330" id="330">330</a>
-<a href="#331" id="331">331</a>
-<a href="#332" id="332">332</a>
-<a href="#333" id="333">333</a>
-<a href="#334" id="334">334</a>
-<a href="#335" id="335">335</a>
-<a href="#336" id="336">336</a>
-<a href="#337" id="337">337</a>
-<a href="#338" id="338">338</a>
-<a href="#339" id="339">339</a>
-<a href="#340" id="340">340</a>
-<a href="#341" id="341">341</a>
-<a href="#342" id="342">342</a>
-<a href="#343" id="343">343</a>
-<a href="#344" id="344">344</a>
-<a href="#345" id="345">345</a>
-<a href="#346" id="346">346</a>
-<a href="#347" id="347">347</a>
-<a href="#348" id="348">348</a>
-<a href="#349" id="349">349</a>
-<a href="#350" id="350">350</a>
-<a href="#351" id="351">351</a>
-<a href="#352" id="352">352</a>
-<a href="#353" id="353">353</a>
-<a href="#354" id="354">354</a>
-<a href="#355" id="355">355</a>
-<a href="#356" id="356">356</a>
-<a href="#357" id="357">357</a>
-<a href="#358" id="358">358</a>
-<a href="#359" id="359">359</a>
-<a href="#360" id="360">360</a>
-<a href="#361" id="361">361</a>
-<a href="#362" id="362">362</a>
-<a href="#363" id="363">363</a>
-<a href="#364" id="364">364</a>
-<a href="#365" id="365">365</a>
-<a href="#366" id="366">366</a>
-<a href="#367" id="367">367</a>
-<a href="#368" id="368">368</a>
-<a href="#369" id="369">369</a>
-<a href="#370" id="370">370</a>
-<a href="#371" id="371">371</a>
-<a href="#372" id="372">372</a>
-<a href="#373" id="373">373</a>
-<a href="#374" id="374">374</a>
-<a href="#375" id="375">375</a>
-<a href="#376" id="376">376</a>
-<a href="#377" id="377">377</a>
-<a href="#378" id="378">378</a>
-<a href="#379" id="379">379</a>
-<a href="#380" id="380">380</a>
-<a href="#381" id="381">381</a>
-<a href="#382" id="382">382</a>
-<a href="#383" id="383">383</a>
-<a href="#384" id="384">384</a>
-<a href="#385" id="385">385</a>
-<a href="#386" id="386">386</a>
-<a href="#387" id="387">387</a>
-<a href="#388" id="388">388</a>
-<a href="#389" id="389">389</a>
-<a href="#390" id="390">390</a>
-<a href="#391" id="391">391</a>
-<a href="#392" id="392">392</a>
-<a href="#393" id="393">393</a>
-<a href="#394" id="394">394</a>
-<a href="#395" id="395">395</a>
-<a href="#396" id="396">396</a>
-<a href="#397" id="397">397</a>
-<a href="#398" id="398">398</a>
-<a href="#399" id="399">399</a>
-<a href="#400" id="400">400</a>
-<a href="#401" id="401">401</a>
-<a href="#402" id="402">402</a>
-<a href="#403" id="403">403</a>
-<a href="#404" id="404">404</a>
-<a href="#405" id="405">405</a>
-<a href="#406" id="406">406</a>
-<a href="#407" id="407">407</a>
-<a href="#408" id="408">408</a>
-<a href="#409" id="409">409</a>
-<a href="#410" id="410">410</a>
-<a href="#411" id="411">411</a>
-<a href="#412" id="412">412</a>
-<a href="#413" id="413">413</a>
-<a href="#414" id="414">414</a>
-<a href="#415" id="415">415</a>
-<a href="#416" id="416">416</a>
-<a href="#417" id="417">417</a>
-<a href="#418" id="418">418</a>
-<a href="#419" id="419">419</a>
-<a href="#420" id="420">420</a>
-<a href="#421" id="421">421</a>
-<a href="#422" id="422">422</a>
-<a href="#423" id="423">423</a>
-<a href="#424" id="424">424</a>
-<a href="#425" id="425">425</a>
-<a href="#426" id="426">426</a>
-<a href="#427" id="427">427</a>
-<a href="#428" id="428">428</a>
-<a href="#429" id="429">429</a>
-<a href="#430" id="430">430</a>
-<a href="#431" id="431">431</a>
-<a href="#432" id="432">432</a>
-<a href="#433" id="433">433</a>
-<a href="#434" id="434">434</a>
-<a href="#435" id="435">435</a>
-<a href="#436" id="436">436</a>
-<a href="#437" id="437">437</a>
-<a href="#438" id="438">438</a>
-<a href="#439" id="439">439</a>
-<a href="#440" id="440">440</a>
-<a href="#441" id="441">441</a>
-<a href="#442" id="442">442</a>
-<a href="#443" id="443">443</a>
-<a href="#444" id="444">444</a>
-<a href="#445" id="445">445</a>
-<a href="#446" id="446">446</a>
-<a href="#447" id="447">447</a>
-<a href="#448" id="448">448</a>
-<a href="#449" id="449">449</a>
-<a href="#450" id="450">450</a>
-<a href="#451" id="451">451</a>
-<a href="#452" id="452">452</a>
-<a href="#453" id="453">453</a>
-<a href="#454" id="454">454</a>
-<a href="#455" id="455">455</a>
-<a href="#456" id="456">456</a>
-<a href="#457" id="457">457</a>
-<a href="#458" id="458">458</a>
-<a href="#459" id="459">459</a>
-<a href="#460" id="460">460</a>
-<a href="#461" id="461">461</a>
-<a href="#462" id="462">462</a>
-<a href="#463" id="463">463</a>
-<a href="#464" id="464">464</a>
-<a href="#465" id="465">465</a>
-<a href="#466" id="466">466</a>
-<a href="#467" id="467">467</a>
-<a href="#468" id="468">468</a>
-<a href="#469" id="469">469</a>
-<a href="#470" id="470">470</a>
-<a href="#471" id="471">471</a>
-<a href="#472" id="472">472</a>
-<a href="#473" id="473">473</a>
-<a href="#474" id="474">474</a>
-<a href="#475" id="475">475</a>
-<a href="#476" id="476">476</a>
-<a href="#477" id="477">477</a>
-<a href="#478" id="478">478</a>
-<a href="#479" id="479">479</a>
-<a href="#480" id="480">480</a>
-<a href="#481" id="481">481</a>
-<a href="#482" id="482">482</a>
-<a href="#483" id="483">483</a>
-<a href="#484" id="484">484</a>
-<a href="#485" id="485">485</a>
-<a href="#486" id="486">486</a>
-<a href="#487" id="487">487</a>
-<a href="#488" id="488">488</a>
-<a href="#489" id="489">489</a>
-<a href="#490" id="490">490</a>
-<a href="#491" id="491">491</a>
-<a href="#492" id="492">492</a>
-<a href="#493" id="493">493</a>
-<a href="#494" id="494">494</a>
-<a href="#495" id="495">495</a>
-<a href="#496" id="496">496</a>
-<a href="#497" id="497">497</a>
-<a href="#498" id="498">498</a>
-<a href="#499" id="499">499</a>
-<a href="#500" id="500">500</a>
-<a href="#501" id="501">501</a>
-<a href="#502" id="502">502</a>
-<a href="#503" id="503">503</a>
-<a href="#504" id="504">504</a>
-<a href="#505" id="505">505</a>
-<a href="#506" id="506">506</a>
-<a href="#507" id="507">507</a>
-<a href="#508" id="508">508</a>
-<a href="#509" id="509">509</a>
-<a href="#510" id="510">510</a>
-<a href="#511" id="511">511</a>
-<a href="#512" id="512">512</a>
-<a href="#513" id="513">513</a>
-<a href="#514" id="514">514</a>
-<a href="#515" id="515">515</a>
-<a href="#516" id="516">516</a>
-<a href="#517" id="517">517</a>
-<a href="#518" id="518">518</a>
-<a href="#519" id="519">519</a>
-<a href="#520" id="520">520</a>
-<a href="#521" id="521">521</a>
-<a href="#522" id="522">522</a>
-<a href="#523" id="523">523</a>
-<a href="#524" id="524">524</a>
-<a href="#525" id="525">525</a>
-<a href="#526" id="526">526</a>
-<a href="#527" id="527">527</a>
-<a href="#528" id="528">528</a>
-<a href="#529" id="529">529</a>
-<a href="#530" id="530">530</a>
-<a href="#531" id="531">531</a>
-<a href="#532" id="532">532</a>
-<a href="#533" id="533">533</a>
-<a href="#534" id="534">534</a>
-<a href="#535" id="535">535</a>
-<a href="#536" id="536">536</a>
-<a href="#537" id="537">537</a>
-<a href="#538" id="538">538</a>
-<a href="#539" id="539">539</a>
-<a href="#540" id="540">540</a>
-<a href="#541" id="541">541</a>
-<a href="#542" id="542">542</a>
-<a href="#543" id="543">543</a>
-<a href="#544" id="544">544</a>
-<a href="#545" id="545">545</a>
-<a href="#546" id="546">546</a>
-<a href="#547" id="547">547</a>
-<a href="#548" id="548">548</a>
-<a href="#549" id="549">549</a>
-<a href="#550" id="550">550</a>
-<a href="#551" id="551">551</a>
-<a href="#552" id="552">552</a>
-<a href="#553" id="553">553</a>
-<a href="#554" id="554">554</a>
-<a href="#555" id="555">555</a>
-<a href="#556" id="556">556</a>
-<a href="#557" id="557">557</a>
-<a href="#558" id="558">558</a>
-<a href="#559" id="559">559</a>
-<a href="#560" id="560">560</a>
-<a href="#561" id="561">561</a>
-<a href="#562" id="562">562</a>
-<a href="#563" id="563">563</a>
-<a href="#564" id="564">564</a>
-<a href="#565" id="565">565</a>
-<a href="#566" id="566">566</a>
-<a href="#567" id="567">567</a>
-<a href="#568" id="568">568</a>
-<a href="#569" id="569">569</a>
-<a href="#570" id="570">570</a>
-<a href="#571" id="571">571</a>
-<a href="#572" id="572">572</a>
-<a href="#573" id="573">573</a>
-<a href="#574" id="574">574</a>
-<a href="#575" id="575">575</a>
-<a href="#576" id="576">576</a>
-<a href="#577" id="577">577</a>
-<a href="#578" id="578">578</a>
-<a href="#579" id="579">579</a>
-<a href="#580" id="580">580</a>
-<a href="#581" id="581">581</a>
-<a href="#582" id="582">582</a>
-<a href="#583" id="583">583</a>
-<a href="#584" id="584">584</a>
-<a href="#585" id="585">585</a>
-<a href="#586" id="586">586</a>
-<a href="#587" id="587">587</a>
-<a href="#588" id="588">588</a>
-<a href="#589" id="589">589</a>
-<a href="#590" id="590">590</a>
-<a href="#591" id="591">591</a>
-<a href="#592" id="592">592</a>
-<a href="#593" id="593">593</a>
-<a href="#594" id="594">594</a>
-<a href="#595" id="595">595</a>
-<a href="#596" id="596">596</a>
-<a href="#597" id="597">597</a>
-<a href="#598" id="598">598</a>
-<a href="#599" id="599">599</a>
-<a href="#600" id="600">600</a>
-<a href="#601" id="601">601</a>
-<a href="#602" id="602">602</a>
-<a href="#603" id="603">603</a>
-<a href="#604" id="604">604</a>
-<a href="#605" id="605">605</a>
-<a href="#606" id="606">606</a>
-<a href="#607" id="607">607</a>
-<a href="#608" id="608">608</a>
-<a href="#609" id="609">609</a>
-<a href="#610" id="610">610</a>
-<a href="#611" id="611">611</a>
-<a href="#612" id="612">612</a>
-<a href="#613" id="613">613</a>
-<a href="#614" id="614">614</a>
-<a href="#615" id="615">615</a>
-<a href="#616" id="616">616</a>
-<a href="#617" id="617">617</a>
-<a href="#618" id="618">618</a>
-<a href="#619" id="619">619</a>
-<a href="#620" id="620">620</a>
-<a href="#621" id="621">621</a>
-<a href="#622" id="622">622</a>
-<a href="#623" id="623">623</a>
-<a href="#624" id="624">624</a>
-<a href="#625" id="625">625</a>
-<a href="#626" id="626">626</a>
-<a href="#627" id="627">627</a>
-<a href="#628" id="628">628</a>
-<a href="#629" id="629">629</a>
-<a href="#630" id="630">630</a>
-<a href="#631" id="631">631</a>
-<a href="#632" id="632">632</a>
-<a href="#633" id="633">633</a>
-<a href="#634" id="634">634</a>
-<a href="#635" id="635">635</a>
-<a href="#636" id="636">636</a>
-<a href="#637" id="637">637</a>
-<a href="#638" id="638">638</a>
-<a href="#639" id="639">639</a>
-<a href="#640" id="640">640</a>
-<a href="#641" id="641">641</a>
-<a href="#642" id="642">642</a>
-<a href="#643" id="643">643</a>
-<a href="#644" id="644">644</a>
-<a href="#645" id="645">645</a>
-<a href="#646" id="646">646</a>
-<a href="#647" id="647">647</a>
-<a href="#648" id="648">648</a>
-<a href="#649" id="649">649</a>
-<a href="#650" id="650">650</a>
-<a href="#651" id="651">651</a>
-<a href="#652" id="652">652</a>
-<a href="#653" id="653">653</a>
-<a href="#654" id="654">654</a>
-<a href="#655" id="655">655</a>
-<a href="#656" id="656">656</a>
-<a href="#657" id="657">657</a>
-<a href="#658" id="658">658</a>
-<a href="#659" id="659">659</a>
-<a href="#660" id="660">660</a>
-<a href="#661" id="661">661</a>
-<a href="#662" id="662">662</a>
-<a href="#663" id="663">663</a>
-<a href="#664" id="664">664</a>
-<a href="#665" id="665">665</a>
-<a href="#666" id="666">666</a>
-<a href="#667" id="667">667</a>
-<a href="#668" id="668">668</a>
-<a href="#669" id="669">669</a>
-<a href="#670" id="670">670</a>
-<a href="#671" id="671">671</a>
-<a href="#672" id="672">672</a>
-<a href="#673" id="673">673</a>
-<a href="#674" id="674">674</a>
-<a href="#675" id="675">675</a>
-<a href="#676" id="676">676</a>
-<a href="#677" id="677">677</a>
-<a href="#678" id="678">678</a>
-<a href="#679" id="679">679</a>
-<a href="#680" id="680">680</a>
-<a href="#681" id="681">681</a>
-<a href="#682" id="682">682</a>
-<a href="#683" id="683">683</a>
-<a href="#684" id="684">684</a>
-<a href="#685" id="685">685</a>
-<a href="#686" id="686">686</a>
-<a href="#687" id="687">687</a>
-<a href="#688" id="688">688</a>
-<a href="#689" id="689">689</a>
-<a href="#690" id="690">690</a>
-<a href="#691" id="691">691</a>
-<a href="#692" id="692">692</a>
-<a href="#693" id="693">693</a>
-<a href="#694" id="694">694</a>
-<a href="#695" id="695">695</a>
-<a href="#696" id="696">696</a>
-<a href="#697" id="697">697</a>
-<a href="#698" id="698">698</a>
-<a href="#699" id="699">699</a>
-<a href="#700" id="700">700</a>
-<a href="#701" id="701">701</a>
-<a href="#702" id="702">702</a>
-<a href="#703" id="703">703</a>
-<a href="#704" id="704">704</a>
-<a href="#705" id="705">705</a>
-<a href="#706" id="706">706</a>
-<a href="#707" id="707">707</a>
-<a href="#708" id="708">708</a>
-<a href="#709" id="709">709</a>
-<a href="#710" id="710">710</a>
-<a href="#711" id="711">711</a>
-<a href="#712" id="712">712</a>
-<a href="#713" id="713">713</a>
-<a href="#714" id="714">714</a>
-<a href="#715" id="715">715</a>
-<a href="#716" id="716">716</a>
-<a href="#717" id="717">717</a>
-<a href="#718" id="718">718</a>
-<a href="#719" id="719">719</a>
-<a href="#720" id="720">720</a>
-<a href="#721" id="721">721</a>
-<a href="#722" id="722">722</a>
-<a href="#723" id="723">723</a>
-<a href="#724" id="724">724</a>
-<a href="#725" id="725">725</a>
-<a href="#726" id="726">726</a>
-<a href="#727" id="727">727</a>
-<a href="#728" id="728">728</a>
-<a href="#729" id="729">729</a>
-<a href="#730" id="730">730</a>
-<a href="#731" id="731">731</a>
-<a href="#732" id="732">732</a>
-<a href="#733" id="733">733</a>
-<a href="#734" id="734">734</a>
-<a href="#735" id="735">735</a>
-<a href="#736" id="736">736</a>
-<a href="#737" id="737">737</a>
-<a href="#738" id="738">738</a>
-<a href="#739" id="739">739</a>
-<a href="#740" id="740">740</a>
-<a href="#741" id="741">741</a>
-<a href="#742" id="742">742</a>
-<a href="#743" id="743">743</a>
-<a href="#744" id="744">744</a>
-<a href="#745" id="745">745</a>
-<a href="#746" id="746">746</a>
-<a href="#747" id="747">747</a>
-<a href="#748" id="748">748</a>
-<a href="#749" id="749">749</a>
-<a href="#750" id="750">750</a>
-<a href="#751" id="751">751</a>
-<a href="#752" id="752">752</a>
-<a href="#753" id="753">753</a>
-<a href="#754" id="754">754</a>
-<a href="#755" id="755">755</a>
-<a href="#756" id="756">756</a>
-<a href="#757" id="757">757</a>
-<a href="#758" id="758">758</a>
-<a href="#759" id="759">759</a>
-<a href="#760" id="760">760</a>
-<a href="#761" id="761">761</a>
-<a href="#762" id="762">762</a>
-<a href="#763" id="763">763</a>
-<a href="#764" id="764">764</a>
-<a href="#765" id="765">765</a>
-<a href="#766" id="766">766</a>
-<a href="#767" id="767">767</a>
-<a href="#768" id="768">768</a>
-<a href="#769" id="769">769</a>
-<a href="#770" id="770">770</a>
-<a href="#771" id="771">771</a>
-<a href="#772" id="772">772</a>
-<a href="#773" id="773">773</a>
-<a href="#774" id="774">774</a>
-<a href="#775" id="775">775</a>
-<a href="#776" id="776">776</a>
-<a href="#777" id="777">777</a>
-<a href="#778" id="778">778</a>
-<a href="#779" id="779">779</a>
-<a href="#780" id="780">780</a>
-<a href="#781" id="781">781</a>
-<a href="#782" id="782">782</a>
-<a href="#783" id="783">783</a>
-<a href="#784" id="784">784</a>
-<a href="#785" id="785">785</a>
-<a href="#786" id="786">786</a>
-<a href="#787" id="787">787</a>
-<a href="#788" id="788">788</a>
-<a href="#789" id="789">789</a>
-<a href="#790" id="790">790</a>
-<a href="#791" id="791">791</a>
-<a href="#792" id="792">792</a>
-<a href="#793" id="793">793</a>
-<a href="#794" id="794">794</a>
-<a href="#795" id="795">795</a>
-<a href="#796" id="796">796</a>
-<a href="#797" id="797">797</a>
-<a href="#798" id="798">798</a>
-<a href="#799" id="799">799</a>
-<a href="#800" id="800">800</a>
-<a href="#801" id="801">801</a>
-<a href="#802" id="802">802</a>
-<a href="#803" id="803">803</a>
-<a href="#804" id="804">804</a>
-<a href="#805" id="805">805</a>
-<a href="#806" id="806">806</a>
-<a href="#807" id="807">807</a>
-<a href="#808" id="808">808</a>
-<a href="#809" id="809">809</a>
-<a href="#810" id="810">810</a>
-<a href="#811" id="811">811</a>
-<a href="#812" id="812">812</a>
-<a href="#813" id="813">813</a>
-<a href="#814" id="814">814</a>
-<a href="#815" id="815">815</a>
-<a href="#816" id="816">816</a>
-<a href="#817" id="817">817</a>
-<a href="#818" id="818">818</a>
-<a href="#819" id="819">819</a>
-<a href="#820" id="820">820</a>
-<a href="#821" id="821">821</a>
-<a href="#822" id="822">822</a>
-<a href="#823" id="823">823</a>
-<a href="#824" id="824">824</a>
-<a href="#825" id="825">825</a>
-<a href="#826" id="826">826</a>
-<a href="#827" id="827">827</a>
-<a href="#828" id="828">828</a>
-<a href="#829" id="829">829</a>
-<a href="#830" id="830">830</a>
-<a href="#831" id="831">831</a>
-<a href="#832" id="832">832</a>
-<a href="#833" id="833">833</a>
-<a href="#834" id="834">834</a>
-<a href="#835" id="835">835</a>
-<a href="#836" id="836">836</a>
-<a href="#837" id="837">837</a>
-<a href="#838" id="838">838</a>
-<a href="#839" id="839">839</a>
-<a href="#840" id="840">840</a>
-<a href="#841" id="841">841</a>
-<a href="#842" id="842">842</a>
-<a href="#843" id="843">843</a>
-<a href="#844" id="844">844</a>
-<a href="#845" id="845">845</a>
-<a href="#846" id="846">846</a>
-<a href="#847" id="847">847</a>
-<a href="#848" id="848">848</a>
-<a href="#849" id="849">849</a>
-<a href="#850" id="850">850</a>
-<a href="#851" id="851">851</a>
-<a href="#852" id="852">852</a>
-<a href="#853" id="853">853</a>
-<a href="#854" id="854">854</a>
-<a href="#855" id="855">855</a>
-<a href="#856" id="856">856</a>
-<a href="#857" id="857">857</a>
-<a href="#858" id="858">858</a>
-<a href="#859" id="859">859</a>
-<a href="#860" id="860">860</a>
-<a href="#861" id="861">861</a>
-<a href="#862" id="862">862</a>
-<a href="#863" id="863">863</a>
-<a href="#864" id="864">864</a>
-<a href="#865" id="865">865</a>
-<a href="#866" id="866">866</a>
-<a href="#867" id="867">867</a>
-<a href="#868" id="868">868</a>
-<a href="#869" id="869">869</a>
-<a href="#870" id="870">870</a>
-<a href="#871" id="871">871</a>
-<a href="#872" id="872">872</a>
-<a href="#873" id="873">873</a>
-<a href="#874" id="874">874</a>
-<a href="#875" id="875">875</a>
-<a href="#876" id="876">876</a>
-<a href="#877" id="877">877</a>
-<a href="#878" id="878">878</a>
-<a href="#879" id="879">879</a>
-<a href="#880" id="880">880</a>
-<a href="#881" id="881">881</a>
-<a href="#882" id="882">882</a>
-<a href="#883" id="883">883</a>
-<a href="#884" id="884">884</a>
-<a href="#885" id="885">885</a>
-<a href="#886" id="886">886</a>
-<a href="#887" id="887">887</a>
-<a href="#888" id="888">888</a>
-<a href="#889" id="889">889</a>
-<a href="#890" id="890">890</a>
-<a href="#891" id="891">891</a>
-<a href="#892" id="892">892</a>
-<a href="#893" id="893">893</a>
-<a href="#894" id="894">894</a>
-<a href="#895" id="895">895</a>
-<a href="#896" id="896">896</a>
-<a href="#897" id="897">897</a>
-<a href="#898" id="898">898</a>
-<a href="#899" id="899">899</a>
-<a href="#900" id="900">900</a>
-<a href="#901" id="901">901</a>
-<a href="#902" id="902">902</a>
-<a href="#903" id="903">903</a>
-<a href="#904" id="904">904</a>
-<a href="#905" id="905">905</a>
-<a href="#906" id="906">906</a>
-<a href="#907" id="907">907</a>
-<a href="#908" id="908">908</a>
-<a href="#909" id="909">909</a>
-<a href="#910" id="910">910</a>
-<a href="#911" id="911">911</a>
-</pre></div><pre class="rust"><code><span class="comment">// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// &quot;License&quot;); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// &quot;AS IS&quot; BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-
-</span><span class="kw">use </span>std::fmt;
-<span class="kw">use </span>std::fmt::Debug;
-<span class="kw">use </span>std::fmt::Formatter;
-<span class="kw">use </span>std::fmt::Write;
-<span class="kw">use </span>std::time::Duration;
-
-<span class="kw">use </span>bytes::Bytes;
-<span class="kw">use </span>http::header::HeaderName;
-<span class="kw">use </span>http::header::CACHE_CONTROL;
-<span class="kw">use </span>http::header::CONTENT_DISPOSITION;
-<span class="kw">use </span>http::header::CONTENT_LENGTH;
-<span class="kw">use </span>http::header::CONTENT_TYPE;
-<span class="kw">use </span>http::HeaderValue;
-<span class="kw">use </span>http::Request;
-<span class="kw">use </span>http::Response;
-<span class="kw">use </span>reqsign::AwsCredential;
-<span class="kw">use </span>reqsign::AwsDefaultLoader;
-<span class="kw">use </span>reqsign::AwsV4Signer;
-<span class="kw">use </span>serde::Deserialize;
-<span class="kw">use </span>serde::Serialize;
-
-<span class="kw">use </span><span class="kw">crate</span>::raw::<span class="kw-2">*</span>;
-<span class="kw">use crate</span>::<span class="kw-2">*</span>;
-
-<span class="kw">mod </span>constants {
-    <span class="kw">pub const </span>X_AMZ_COPY_SOURCE: <span class="kw-2">&amp;</span>str = <span class="string">&quot;x-amz-copy-source&quot;</span>;
-
-    <span class="kw">pub const </span>X_AMZ_SERVER_SIDE_ENCRYPTION: <span class="kw-2">&amp;</span>str = <span class="string">&quot;x-amz-server-side-encryption&quot;</span>;
-    <span class="kw">pub const </span>X_AMZ_SERVER_SIDE_ENCRYPTION_CUSTOMER_ALGORITHM: <span class="kw-2">&amp;</span>str =
-        <span class="string">&quot;x-amz-server-side-encryption-customer-algorithm&quot;</span>;
-    <span class="kw">pub const </span>X_AMZ_SERVER_SIDE_ENCRYPTION_CUSTOMER_KEY: <span class="kw-2">&amp;</span>str =
-        <span class="string">&quot;x-amz-server-side-encryption-customer-key&quot;</span>;
-    <span class="kw">pub const </span>X_AMZ_SERVER_SIDE_ENCRYPTION_CUSTOMER_KEY_MD5: <span class="kw-2">&amp;</span>str =
-        <span class="string">&quot;x-amz-server-side-encryption-customer-key-md5&quot;</span>;
-    <span class="kw">pub const </span>X_AMZ_SERVER_SIDE_ENCRYPTION_AWS_KMS_KEY_ID: <span class="kw-2">&amp;</span>str =
-        <span class="string">&quot;x-amz-server-side-encryption-aws-kms-key-id&quot;</span>;
-    <span class="kw">pub const </span>X_AMZ_STORAGE_CLASS: <span class="kw-2">&amp;</span>str = <span class="string">&quot;x-amz-storage-class&quot;</span>;
-
-    <span class="attr">#[allow(dead_code)]
-    </span><span class="kw">pub const </span>X_AMZ_COPY_SOURCE_SERVER_SIDE_ENCRYPTION_CUSTOMER_ALGORITHM: <span class="kw-2">&amp;</span>str =
-        <span class="string">&quot;x-amz-copy-source-server-side-encryption-customer-algorithm&quot;</span>;
-    <span class="attr">#[allow(dead_code)]
-    </span><span class="kw">pub const </span>X_AMZ_COPY_SOURCE_SERVER_SIDE_ENCRYPTION_CUSTOMER_KEY: <span class="kw-2">&amp;</span>str =
-        <span class="string">&quot;x-amz-copy-source-server-side-encryption-customer-key&quot;</span>;
-    <span class="attr">#[allow(dead_code)]
-    </span><span class="kw">pub const </span>X_AMZ_COPY_SOURCE_SERVER_SIDE_ENCRYPTION_CUSTOMER_KEY_MD5: <span class="kw-2">&amp;</span>str =
-        <span class="string">&quot;x-amz-copy-source-server-side-encryption-customer-key-md5&quot;</span>;
-
-    <span class="kw">pub const </span>RESPONSE_CONTENT_DISPOSITION: <span class="kw-2">&amp;</span>str = <span class="string">&quot;response-content-disposition&quot;</span>;
-    <span class="kw">pub const </span>RESPONSE_CACHE_CONTROL: <span class="kw-2">&amp;</span>str = <span class="string">&quot;response-cache-control&quot;</span>;
-
-    <span class="kw">pub const </span>DESTINATION: <span class="kw-2">&amp;</span>str = <span class="string">&quot;Destination&quot;</span>;
-    <span class="kw">pub const </span>OVERWRITE: <span class="kw-2">&amp;</span>str = <span class="string">&quot;Overwrite&quot;</span>;
-}
-
-<span class="kw">pub struct </span>WasabiCore {
-    <span class="kw">pub </span>bucket: String,
-    <span class="kw">pub </span>endpoint: String,
-    <span class="kw">pub </span>root: String,
-    <span class="kw">pub </span>server_side_encryption: <span class="prelude-ty">Option</span>&lt;HeaderValue&gt;,
-    <span class="kw">pub </span>server_side_encryption_aws_kms_key_id: <span class="prelude-ty">Option</span>&lt;HeaderValue&gt;,
-    <span class="kw">pub </span>server_side_encryption_customer_algorithm: <span class="prelude-ty">Option</span>&lt;HeaderValue&gt;,
-    <span class="kw">pub </span>server_side_encryption_customer_key: <span class="prelude-ty">Option</span>&lt;HeaderValue&gt;,
-    <span class="kw">pub </span>server_side_encryption_customer_key_md5: <span class="prelude-ty">Option</span>&lt;HeaderValue&gt;,
-    <span class="kw">pub </span>default_storage_class: <span class="prelude-ty">Option</span>&lt;HeaderValue&gt;,
-
-    <span class="kw">pub </span>signer: AwsV4Signer,
-    <span class="kw">pub </span>loader: AwsDefaultLoader,
-    <span class="kw">pub </span>client: HttpClient,
-}
-
-<span class="kw">impl </span>Debug <span class="kw">for </span>WasabiCore {
-    <span class="kw">fn </span>fmt(<span class="kw-2">&amp;</span><span class="self">self</span>, f: <span class="kw-2">&amp;mut </span>Formatter&lt;<span class="lifetime">&#39;_</span>&gt;) -&gt; fmt::Result {
-        f.debug_struct(<span class="string">&quot;WasabiCore&quot;</span>)
-            .field(<span class="string">&quot;bucket&quot;</span>, <span class="kw-2">&amp;</span><span class="self">self</span>.bucket)
-            .field(<span class="string">&quot;endpoint&quot;</span>, <span class="kw-2">&amp;</span><span class="self">self</span>.endpoint)
-            .field(<span class="string">&quot;root&quot;</span>, <span class="kw-2">&amp;</span><span class="self">self</span>.root)
-            .finish_non_exhaustive()
-    }
-}
-
-<span class="kw">impl </span>WasabiCore {
-    <span class="doccomment">/// If credential is not found, we will not sign the request.
-    </span><span class="kw">async fn </span>load_credential(<span class="kw-2">&amp;</span><span class="self">self</span>) -&gt; <span class="prelude-ty">Result</span>&lt;<span class="prelude-ty">Option</span>&lt;AwsCredential&gt;&gt; {
-        <span class="kw">let </span>cred = <span class="self">self
-            </span>.loader
-            .load()
-            .<span class="kw">await
-            </span>.map_err(new_request_credential_error)<span class="question-mark">?</span>;
-
-        <span class="kw">if let </span><span class="prelude-val">Some</span>(cred) = cred {
-            <span class="prelude-val">Ok</span>(<span class="prelude-val">Some</span>(cred))
-        } <span class="kw">else </span>{
-            <span class="comment">// Mark this error as temporary since it could be caused by AWS STS.
-            </span><span class="prelude-val">Err</span>(Error::new(
-                ErrorKind::PermissionDenied,
-                <span class="string">&quot;no valid credential found, please check configuration or try again&quot;</span>,
-            )
-            .set_temporary())
-        }
-    }
-
-    <span class="kw">pub async fn </span>sign&lt;T&gt;(<span class="kw-2">&amp;</span><span class="self">self</span>, req: <span class="kw-2">&amp;mut </span>Request&lt;T&gt;) -&gt; <span class="prelude-ty">Result</span>&lt;()&gt; {
-        <span class="kw">let </span>cred = <span class="kw">if let </span><span class="prelude-val">Some</span>(cred) = <span class="self">self</span>.load_credential().<span class="kw">await</span><span class="question-mark">? </span>{
-            cred
-        } <span class="kw">else </span>{
-            <span class="kw">return </span><span class="prelude-val">Ok</span>(());
-        };
-
-        <span class="self">self</span>.signer.sign(req, <span class="kw-2">&amp;</span>cred).map_err(new_request_sign_error)
-    }
-
-    <span class="kw">pub async fn </span>sign_query&lt;T&gt;(<span class="kw-2">&amp;</span><span class="self">self</span>, req: <span class="kw-2">&amp;mut </span>Request&lt;T&gt;, duration: Duration) -&gt; <span class="prelude-ty">Result</span>&lt;()&gt; {
-        <span class="kw">let </span>cred = <span class="kw">if let </span><span class="prelude-val">Some</span>(cred) = <span class="self">self</span>.load_credential().<span class="kw">await</span><span class="question-mark">? </span>{
-            cred
-        } <span class="kw">else </span>{
-            <span class="kw">return </span><span class="prelude-val">Ok</span>(());
-        };
-
-        <span class="self">self</span>.signer
-            .sign_query(req, duration, <span class="kw-2">&amp;</span>cred)
-            .map_err(new_request_sign_error)
-    }
-
-    <span class="attr">#[inline]
-    </span><span class="kw">pub async fn </span>send(<span class="kw-2">&amp;</span><span class="self">self</span>, req: Request&lt;AsyncBody&gt;) -&gt; <span class="prelude-ty">Result</span>&lt;Response&lt;IncomingAsyncBody&gt;&gt; {
-        <span class="self">self</span>.client.send(req).<span class="kw">await
-    </span>}
-
-    <span class="doccomment">/// # Note
-    ///
-    /// header like X_AMZ_SERVER_SIDE_ENCRYPTION doesn&#39;t need to set while
-    /// get or stat.
-    </span><span class="kw">pub fn </span>insert_sse_headers(
-        <span class="kw-2">&amp;</span><span class="self">self</span>,
-        <span class="kw-2">mut </span>req: http::request::Builder,
-        is_write: bool,
-    ) -&gt; http::request::Builder {
-        <span class="kw">if </span>is_write {
-            <span class="kw">if let </span><span class="prelude-val">Some</span>(v) = <span class="kw-2">&amp;</span><span class="self">self</span>.server_side_encryption {
-                <span class="kw">let </span><span class="kw-2">mut </span>v = v.clone();
-                v.set_sensitive(<span class="bool-val">true</span>);
-
-                req = req.header(
-                    HeaderName::from_static(constants::X_AMZ_SERVER_SIDE_ENCRYPTION),
-                    v,
-                )
-            }
-            <span class="kw">if let </span><span class="prelude-val">Some</span>(v) = <span class="kw-2">&amp;</span><span class="self">self</span>.server_side_encryption_aws_kms_key_id {
-                <span class="kw">let </span><span class="kw-2">mut </span>v = v.clone();
-                v.set_sensitive(<span class="bool-val">true</span>);
-
-                req = req.header(
-                    HeaderName::from_static(constants::X_AMZ_SERVER_SIDE_ENCRYPTION_AWS_KMS_KEY_ID),
-                    v,
-                )
-            }
-        }
-
-        <span class="kw">if let </span><span class="prelude-val">Some</span>(v) = <span class="kw-2">&amp;</span><span class="self">self</span>.server_side_encryption_customer_algorithm {
-            <span class="kw">let </span><span class="kw-2">mut </span>v = v.clone();
-            v.set_sensitive(<span class="bool-val">true</span>);
-
-            req = req.header(
-                HeaderName::from_static(constants::X_AMZ_SERVER_SIDE_ENCRYPTION_CUSTOMER_ALGORITHM),
-                v,
-            )
-        }
-        <span class="kw">if let </span><span class="prelude-val">Some</span>(v) = <span class="kw-2">&amp;</span><span class="self">self</span>.server_side_encryption_customer_key {
-            <span class="kw">let </span><span class="kw-2">mut </span>v = v.clone();
-            v.set_sensitive(<span class="bool-val">true</span>);
-
-            req = req.header(
-                HeaderName::from_static(constants::X_AMZ_SERVER_SIDE_ENCRYPTION_CUSTOMER_KEY),
-                v,
-            )
-        }
-        <span class="kw">if let </span><span class="prelude-val">Some</span>(v) = <span class="kw-2">&amp;</span><span class="self">self</span>.server_side_encryption_customer_key_md5 {
-            <span class="kw">let </span><span class="kw-2">mut </span>v = v.clone();
-            v.set_sensitive(<span class="bool-val">true</span>);
-
-            req = req.header(
-                HeaderName::from_static(constants::X_AMZ_SERVER_SIDE_ENCRYPTION_CUSTOMER_KEY_MD5),
-                v,
-            )
-        }
-
-        req
-    }
-}
-
-<span class="kw">impl </span>WasabiCore {
-    <span class="kw">pub fn </span>head_object_request(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, args: <span class="kw-2">&amp;</span>OpStat) -&gt; <span class="prelude-ty">Result</span>&lt;Request&lt;AsyncBody&gt;&gt; {
-        <span class="kw">let </span>p = build_abs_path(<span class="kw-2">&amp;</span><span class="self">self</span>.root, path);
-
-        <span class="kw">let </span>url = <span class="macro">format!</span>(<span class="string">&quot;{}/{}&quot;</span>, <span class="self">self</span>.endpoint, percent_encode_path(<span class="kw-2">&amp;</span>p));
-
-        <span class="kw">let </span><span class="kw-2">mut </span>req = Request::head(<span class="kw-2">&amp;</span>url);
-
-        req = <span class="self">self</span>.insert_sse_headers(req, <span class="bool-val">false</span>);
-
-        <span class="kw">if let </span><span class="prelude-val">Some</span>(v) = args.if_match() {
-            req = req.header(http::header::IF_MATCH, v);
-        }
-
-        <span class="kw">if let </span><span class="prelude-val">Some</span>(v) = args.if_none_match() {
-            req = req.header(http::header::IF_NONE_MATCH, v);
-        }
-
-        <span class="kw">let </span>req = req
-            .body(AsyncBody::Empty)
-            .map_err(new_request_build_error)<span class="question-mark">?</span>;
-
-        <span class="prelude-val">Ok</span>(req)
-    }
-
-    <span class="kw">pub fn </span>get_object_request(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, args: <span class="kw-2">&amp;</span>OpRead) -&gt; <span class="prelude-ty">Result</span>&lt;Request&lt;AsyncBody&gt;&gt; {
-        <span class="kw">let </span>p = build_abs_path(<span class="kw-2">&amp;</span><span class="self">self</span>.root, path);
-
-        <span class="comment">// Construct headers to add to the request
-        </span><span class="kw">let </span><span class="kw-2">mut </span>url = <span class="macro">format!</span>(<span class="string">&quot;{}/{}&quot;</span>, <span class="self">self</span>.endpoint, percent_encode_path(<span class="kw-2">&amp;</span>p));
-
-        <span class="comment">// Add query arguments to the URL based on response overrides
-        </span><span class="kw">let </span><span class="kw-2">mut </span>query_args = Vec::new();
-        <span class="kw">if let </span><span class="prelude-val">Some</span>(override_content_disposition) = args.override_content_disposition() {
-            query_args.push(<span class="macro">format!</span>(
-                <span class="string">&quot;{}={}&quot;</span>,
-                constants::RESPONSE_CONTENT_DISPOSITION,
-                percent_encode_path(override_content_disposition)
-            ))
-        }
-        <span class="kw">if let </span><span class="prelude-val">Some</span>(override_cache_control) = args.override_cache_control() {
-            query_args.push(<span class="macro">format!</span>(
-                <span class="string">&quot;{}={}&quot;</span>,
-                constants::RESPONSE_CACHE_CONTROL,
-                percent_encode_path(override_cache_control)
-            ))
-        }
-        <span class="kw">if </span>!query_args.is_empty() {
-            url.push_str(<span class="kw-2">&amp;</span><span class="macro">format!</span>(<span class="string">&quot;?{}&quot;</span>, query_args.join(<span class="string">&quot;&amp;&quot;</span>)));
-        }
-
-        <span class="kw">let </span><span class="kw-2">mut </span>req = Request::get(<span class="kw-2">&amp;</span>url);
-
-        <span class="kw">let </span>range = args.range();
-        <span class="kw">if </span>!range.is_full() {
-            req = req.header(http::header::RANGE, range.to_header());
-        }
-
-        <span class="kw">if let </span><span class="prelude-val">Some</span>(if_none_match) = args.if_none_match() {
-            req = req.header(http::header::IF_NONE_MATCH, if_none_match);
-        }
-
-        <span class="comment">// Set SSE headers.
-        // TODO: how will this work with presign?
-        </span>req = <span class="self">self</span>.insert_sse_headers(req, <span class="bool-val">false</span>);
-
-        <span class="kw">let </span>req = req
-            .body(AsyncBody::Empty)
-            .map_err(new_request_build_error)<span class="question-mark">?</span>;
-
-        <span class="prelude-val">Ok</span>(req)
-    }
-
-    <span class="kw">pub async fn </span>get_object(
-        <span class="kw-2">&amp;</span><span class="self">self</span>,
-        path: <span class="kw-2">&amp;</span>str,
-        args: <span class="kw-2">&amp;</span>OpRead,
-    ) -&gt; <span class="prelude-ty">Result</span>&lt;Response&lt;IncomingAsyncBody&gt;&gt; {
-        <span class="kw">let </span><span class="kw-2">mut </span>req = <span class="self">self</span>.get_object_request(path, args)<span class="question-mark">?</span>;
-
-        <span class="self">self</span>.sign(<span class="kw-2">&amp;mut </span>req).<span class="kw">await</span><span class="question-mark">?</span>;
-
-        <span class="self">self</span>.send(req).<span class="kw">await
-    </span>}
-
-    <span class="kw">pub fn </span>put_object_request(
-        <span class="kw-2">&amp;</span><span class="self">self</span>,
-        path: <span class="kw-2">&amp;</span>str,
-        size: <span class="prelude-ty">Option</span>&lt;usize&gt;,
-        args: <span class="kw-2">&amp;</span>OpWrite,
-        body: AsyncBody,
-    ) -&gt; <span class="prelude-ty">Result</span>&lt;Request&lt;AsyncBody&gt;&gt; {
-        <span class="kw">let </span>p = build_abs_path(<span class="kw-2">&amp;</span><span class="self">self</span>.root, path);
-
-        <span class="kw">let </span>url = <span class="macro">format!</span>(<span class="string">&quot;{}/{}&quot;</span>, <span class="self">self</span>.endpoint, percent_encode_path(<span class="kw-2">&amp;</span>p));
-
-        <span class="kw">let </span><span class="kw-2">mut </span>req = Request::put(<span class="kw-2">&amp;</span>url);
-
-        <span class="kw">if let </span><span class="prelude-val">Some</span>(size) = size {
-            req = req.header(CONTENT_LENGTH, size)
-        }
-
-        <span class="kw">if let </span><span class="prelude-val">Some</span>(mime) = args.content_type() {
-            req = req.header(CONTENT_TYPE, mime)
-        }
-
-        <span class="kw">if let </span><span class="prelude-val">Some</span>(pos) = args.content_disposition() {
-            req = req.header(CONTENT_DISPOSITION, pos)
-        }
-
-        <span class="kw">if let </span><span class="prelude-val">Some</span>(cache_control) = args.cache_control() {
-            req = req.header(CACHE_CONTROL, cache_control)
-        }
-
-        <span class="comment">// Set storage class header
-        </span><span class="kw">if let </span><span class="prelude-val">Some</span>(v) = <span class="kw-2">&amp;</span><span class="self">self</span>.default_storage_class {
-            req = req.header(HeaderName::from_static(constants::X_AMZ_STORAGE_CLASS), v);
-        }
-
-        <span class="comment">// Set SSE headers.
-        </span>req = <span class="self">self</span>.insert_sse_headers(req, <span class="bool-val">true</span>);
-
-        <span class="comment">// Set body
-        </span><span class="kw">let </span>req = req.body(body).map_err(new_request_build_error)<span class="question-mark">?</span>;
-
-        <span class="prelude-val">Ok</span>(req)
-    }
-
-    <span class="kw">pub async fn </span>head_object(
-        <span class="kw-2">&amp;</span><span class="self">self</span>,
-        path: <span class="kw-2">&amp;</span>str,
-        args: <span class="kw-2">&amp;</span>OpStat,
-    ) -&gt; <span class="prelude-ty">Result</span>&lt;Response&lt;IncomingAsyncBody&gt;&gt; {
-        <span class="kw">let </span><span class="kw-2">mut </span>req = <span class="self">self</span>.head_object_request(path, args)<span class="question-mark">?</span>;
-
-        <span class="self">self</span>.sign(<span class="kw-2">&amp;mut </span>req).<span class="kw">await</span><span class="question-mark">?</span>;
-
-        <span class="self">self</span>.send(req).<span class="kw">await
-    </span>}
-
-    <span class="kw">pub async fn </span>delete_object(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str) -&gt; <span class="prelude-ty">Result</span>&lt;Response&lt;IncomingAsyncBody&gt;&gt; {
-        <span class="kw">let </span>p = build_abs_path(<span class="kw-2">&amp;</span><span class="self">self</span>.root, path);
-
-        <span class="kw">let </span>url = <span class="macro">format!</span>(<span class="string">&quot;{}/{}&quot;</span>, <span class="self">self</span>.endpoint, percent_encode_path(<span class="kw-2">&amp;</span>p));
-
-        <span class="kw">let </span><span class="kw-2">mut </span>req = Request::delete(<span class="kw-2">&amp;</span>url)
-            .body(AsyncBody::Empty)
-            .map_err(new_request_build_error)<span class="question-mark">?</span>;
-
-        <span class="self">self</span>.sign(<span class="kw-2">&amp;mut </span>req).<span class="kw">await</span><span class="question-mark">?</span>;
-
-        <span class="self">self</span>.send(req).<span class="kw">await
-    </span>}
-
-    <span class="kw">pub async fn </span>copy_object(<span class="kw-2">&amp;</span><span class="self">self</span>, from: <span class="kw-2">&amp;</span>str, to: <span class="kw-2">&amp;</span>str) -&gt; <span class="prelude-ty">Result</span>&lt;Response&lt;IncomingAsyncBody&gt;&gt; {
-        <span class="kw">let </span>from = build_abs_path(<span class="kw-2">&amp;</span><span class="self">self</span>.root, from);
-        <span class="kw">let </span>to = build_abs_path(<span class="kw-2">&amp;</span><span class="self">self</span>.root, to);
-
-        <span class="kw">let </span>source = <span class="macro">format!</span>(<span class="string">&quot;{}/{}&quot;</span>, <span class="self">self</span>.bucket, percent_encode_path(<span class="kw-2">&amp;</span>from));
-        <span class="kw">let </span>target = <span class="macro">format!</span>(<span class="string">&quot;{}/{}&quot;</span>, <span class="self">self</span>.endpoint, percent_encode_path(<span class="kw-2">&amp;</span>to));
-
-        <span class="kw">let </span><span class="kw-2">mut </span>req = Request::put(<span class="kw-2">&amp;</span>target);
-
-        <span class="comment">// Set SSE headers.
-        </span>req = <span class="self">self</span>.insert_sse_headers(req, <span class="bool-val">true</span>);
-
-        <span class="kw">if let </span><span class="prelude-val">Some</span>(v) = <span class="kw-2">&amp;</span><span class="self">self</span>.server_side_encryption_customer_algorithm {
-            <span class="kw">let </span><span class="kw-2">mut </span>v = v.clone();
-            v.set_sensitive(<span class="bool-val">true</span>);
-
-            req = req.header(
-                HeaderName::from_static(
-                    constants::X_AMZ_COPY_SOURCE_SERVER_SIDE_ENCRYPTION_CUSTOMER_ALGORITHM,
-                ),
-                v,
-            )
-        }
-
-        <span class="kw">if let </span><span class="prelude-val">Some</span>(v) = <span class="kw-2">&amp;</span><span class="self">self</span>.server_side_encryption_customer_key {
-            <span class="kw">let </span><span class="kw-2">mut </span>v = v.clone();
-            v.set_sensitive(<span class="bool-val">true</span>);
-
-            req = req.header(
-                HeaderName::from_static(
-                    constants::X_AMZ_COPY_SOURCE_SERVER_SIDE_ENCRYPTION_CUSTOMER_KEY,
-                ),
-                v,
-            )
-        }
-
-        <span class="kw">if let </span><span class="prelude-val">Some</span>(v) = <span class="kw-2">&amp;</span><span class="self">self</span>.server_side_encryption_customer_key_md5 {
-            <span class="kw">let </span><span class="kw-2">mut </span>v = v.clone();
-            v.set_sensitive(<span class="bool-val">true</span>);
-
-            req = req.header(
-                HeaderName::from_static(
-                    constants::X_AMZ_COPY_SOURCE_SERVER_SIDE_ENCRYPTION_CUSTOMER_KEY_MD5,
-                ),
-                v,
-            )
-        }
-
-        <span class="kw">let </span><span class="kw-2">mut </span>req = req
-            .header(constants::X_AMZ_COPY_SOURCE, <span class="kw-2">&amp;</span>source)
-            .body(AsyncBody::Empty)
-            .map_err(new_request_build_error)<span class="question-mark">?</span>;
-
-        <span class="self">self</span>.sign(<span class="kw-2">&amp;mut </span>req).<span class="kw">await</span><span class="question-mark">?</span>;
-
-        <span class="self">self</span>.send(req).<span class="kw">await
-    </span>}
-
-    <span class="doccomment">/// Make this functions as `pub(suber)` because `DirStream` depends
-    /// on this.
-    </span><span class="kw">pub async fn </span>list_objects(
-        <span class="kw-2">&amp;</span><span class="self">self</span>,
-        path: <span class="kw-2">&amp;</span>str,
-        continuation_token: <span class="kw-2">&amp;</span>str,
-        delimiter: <span class="kw-2">&amp;</span>str,
-        limit: <span class="prelude-ty">Option</span>&lt;usize&gt;,
-    ) -&gt; <span class="prelude-ty">Result</span>&lt;Response&lt;IncomingAsyncBody&gt;&gt; {
-        <span class="kw">let </span>p = build_abs_path(<span class="kw-2">&amp;</span><span class="self">self</span>.root, path);
-
-        <span class="kw">let </span><span class="kw-2">mut </span>url = <span class="macro">format!</span>(
-            <span class="string">&quot;{}?list-type=2&amp;delimiter={delimiter}&amp;prefix={}&quot;</span>,
-            <span class="self">self</span>.endpoint,
-            percent_encode_path(<span class="kw-2">&amp;</span>p)
-        );
-        <span class="kw">if let </span><span class="prelude-val">Some</span>(limit) = limit {
-            <span class="macro">write!</span>(url, <span class="string">&quot;&amp;max-keys={limit}&quot;</span>).expect(<span class="string">&quot;write into string must succeed&quot;</span>);
-        }
-        <span class="kw">if </span>!continuation_token.is_empty() {
-            <span class="comment">// AWS S3 could return continuation-token that contains `=`
-            // which could lead `reqsign` parse query wrongly.
-            // URL encode continuation-token before starting signing so that
-            // our signer will not be confused.
-            </span><span class="macro">write!</span>(
-                url,
-                <span class="string">&quot;&amp;continuation-token={}&quot;</span>,
-                percent_encode_path(continuation_token)
-            )
-            .expect(<span class="string">&quot;write into string must succeed&quot;</span>);
-        }
-
-        <span class="kw">let </span><span class="kw-2">mut </span>req = Request::get(<span class="kw-2">&amp;</span>url)
-            .body(AsyncBody::Empty)
-            .map_err(new_request_build_error)<span class="question-mark">?</span>;
-
-        <span class="self">self</span>.sign(<span class="kw-2">&amp;mut </span>req).<span class="kw">await</span><span class="question-mark">?</span>;
-
-        <span class="self">self</span>.send(req).<span class="kw">await
-    </span>}
-
-    <span class="kw">pub async fn </span>initiate_multipart_upload(
-        <span class="kw-2">&amp;</span><span class="self">self</span>,
-        path: <span class="kw-2">&amp;</span>str,
-        args: <span class="kw-2">&amp;</span>OpWrite,
-    ) -&gt; <span class="prelude-ty">Result</span>&lt;Response&lt;IncomingAsyncBody&gt;&gt; {
-        <span class="kw">let </span>p = build_abs_path(<span class="kw-2">&amp;</span><span class="self">self</span>.root, path);
-
-        <span class="kw">let </span>url = <span class="macro">format!</span>(<span class="string">&quot;{}/{}?uploads&quot;</span>, <span class="self">self</span>.endpoint, percent_encode_path(<span class="kw-2">&amp;</span>p));
-
-        <span class="kw">let </span><span class="kw-2">mut </span>req = Request::post(<span class="kw-2">&amp;</span>url);
-
-        <span class="kw">if let </span><span class="prelude-val">Some</span>(mime) = args.content_type() {
-            req = req.header(CONTENT_TYPE, mime)
-        }
-
-        <span class="kw">if let </span><span class="prelude-val">Some</span>(content_disposition) = args.content_disposition() {
-            req = req.header(CONTENT_DISPOSITION, content_disposition)
-        }
-
-        <span class="kw">if let </span><span class="prelude-val">Some</span>(cache_control) = args.cache_control() {
-            req = req.header(CACHE_CONTROL, cache_control)
-        }
-
-        <span class="comment">// Set storage class header
-        </span><span class="kw">if let </span><span class="prelude-val">Some</span>(v) = <span class="kw-2">&amp;</span><span class="self">self</span>.default_storage_class {
-            req = req.header(HeaderName::from_static(constants::X_AMZ_STORAGE_CLASS), v);
-        }
-
-        <span class="comment">// Set SSE headers.
-        </span><span class="kw">let </span>req = <span class="self">self</span>.insert_sse_headers(req, <span class="bool-val">true</span>);
-
-        <span class="kw">let </span><span class="kw-2">mut </span>req = req
-            .body(AsyncBody::Empty)
-            .map_err(new_request_build_error)<span class="question-mark">?</span>;
-
-        <span class="self">self</span>.sign(<span class="kw-2">&amp;mut </span>req).<span class="kw">await</span><span class="question-mark">?</span>;
-
-        <span class="self">self</span>.send(req).<span class="kw">await
-    </span>}
-
-    <span class="kw">pub fn </span>upload_part_request(
-        <span class="kw-2">&amp;</span><span class="self">self</span>,
-        path: <span class="kw-2">&amp;</span>str,
-        upload_id: <span class="kw-2">&amp;</span>str,
-        part_number: usize,
-        size: <span class="prelude-ty">Option</span>&lt;u64&gt;,
-        body: AsyncBody,
-    ) -&gt; <span class="prelude-ty">Result</span>&lt;Request&lt;AsyncBody&gt;&gt; {
-        <span class="kw">let </span>p = build_abs_path(<span class="kw-2">&amp;</span><span class="self">self</span>.root, path);
-
-        <span class="kw">let </span>url = <span class="macro">format!</span>(
-            <span class="string">&quot;{}/{}?partNumber={}&amp;uploadId={}&quot;</span>,
-            <span class="self">self</span>.endpoint,
-            percent_encode_path(<span class="kw-2">&amp;</span>p),
-            part_number,
-            percent_encode_path(upload_id)
-        );
-
-        <span class="kw">let </span><span class="kw-2">mut </span>req = Request::put(<span class="kw-2">&amp;</span>url);
-
-        <span class="kw">if let </span><span class="prelude-val">Some</span>(size) = size {
-            req = req.header(CONTENT_LENGTH, size);
-        }
-
-        <span class="comment">// Set SSE headers.
-        </span>req = <span class="self">self</span>.insert_sse_headers(req, <span class="bool-val">true</span>);
-
-        <span class="comment">// Set body
-        </span><span class="kw">let </span>req = req.body(body).map_err(new_request_build_error)<span class="question-mark">?</span>;
-
-        <span class="prelude-val">Ok</span>(req)
-    }
-
-    <span class="kw">pub async fn </span>complete_multipart_upload(
-        <span class="kw-2">&amp;</span><span class="self">self</span>,
-        path: <span class="kw-2">&amp;</span>str,
-        upload_id: <span class="kw-2">&amp;</span>str,
-        parts: <span class="kw-2">&amp;</span>[CompleteMultipartUploadRequestPart],
-    ) -&gt; <span class="prelude-ty">Result</span>&lt;Response&lt;IncomingAsyncBody&gt;&gt; {
-        <span class="kw">let </span>p = build_abs_path(<span class="kw-2">&amp;</span><span class="self">self</span>.root, path);
-
-        <span class="kw">let </span>url = <span class="macro">format!</span>(
-            <span class="string">&quot;{}/{}?uploadId={}&quot;</span>,
-            <span class="self">self</span>.endpoint,
-            percent_encode_path(<span class="kw-2">&amp;</span>p),
-            percent_encode_path(upload_id)
-        );
-
-        <span class="kw">let </span>req = Request::post(<span class="kw-2">&amp;</span>url);
-
-        <span class="comment">// Set SSE headers.
-        </span><span class="kw">let </span>req = <span class="self">self</span>.insert_sse_headers(req, <span class="bool-val">true</span>);
-
-        <span class="kw">let </span>content = quick_xml::se::to_string(<span class="kw-2">&amp;</span>CompleteMultipartUploadRequest {
-            part: parts.to_vec(),
-        })
-        .map_err(new_xml_deserialize_error)<span class="question-mark">?</span>;
-        <span class="comment">// Make sure content length has been set to avoid post with chunked encoding.
-        </span><span class="kw">let </span>req = req.header(CONTENT_LENGTH, content.len());
-        <span class="comment">// Set content-type to `application/xml` to avoid mixed with form post.
-        </span><span class="kw">let </span>req = req.header(CONTENT_TYPE, <span class="string">&quot;application/xml&quot;</span>);
-
-        <span class="kw">let </span><span class="kw-2">mut </span>req = req
-            .body(AsyncBody::Bytes(Bytes::from(content)))
-            .map_err(new_request_build_error)<span class="question-mark">?</span>;
-
-        <span class="self">self</span>.sign(<span class="kw-2">&amp;mut </span>req).<span class="kw">await</span><span class="question-mark">?</span>;
-
-        <span class="self">self</span>.send(req).<span class="kw">await
-    </span>}
-
-    <span class="doccomment">/// Abort an on-going multipart upload.
-    </span><span class="kw">pub async fn </span>abort_multipart_upload(
-        <span class="kw-2">&amp;</span><span class="self">self</span>,
-        path: <span class="kw-2">&amp;</span>str,
-        upload_id: <span class="kw-2">&amp;</span>str,
-    ) -&gt; <span class="prelude-ty">Result</span>&lt;Response&lt;IncomingAsyncBody&gt;&gt; {
-        <span class="kw">let </span>p = build_abs_path(<span class="kw-2">&amp;</span><span class="self">self</span>.root, path);
-
-        <span class="kw">let </span>url = <span class="macro">format!</span>(
-            <span class="string">&quot;{}/{}?uploadId={}&quot;</span>,
-            <span class="self">self</span>.endpoint,
-            percent_encode_path(<span class="kw-2">&amp;</span>p),
-            percent_encode_path(upload_id)
-        );
-
-        <span class="kw">let </span><span class="kw-2">mut </span>req = Request::delete(<span class="kw-2">&amp;</span>url)
-            .body(AsyncBody::Empty)
-            .map_err(new_request_build_error)<span class="question-mark">?</span>;
-        <span class="self">self</span>.sign(<span class="kw-2">&amp;mut </span>req).<span class="kw">await</span><span class="question-mark">?</span>;
-        <span class="self">self</span>.send(req).<span class="kw">await
-    </span>}
-
-    <span class="kw">pub async fn </span>delete_objects(<span class="kw-2">&amp;</span><span class="self">self</span>, paths: Vec&lt;String&gt;) -&gt; <span class="prelude-ty">Result</span>&lt;Response&lt;IncomingAsyncBody&gt;&gt; {
-        <span class="kw">let </span>url = <span class="macro">format!</span>(<span class="string">&quot;{}/?delete&quot;</span>, <span class="self">self</span>.endpoint);
-
-        <span class="kw">let </span>req = Request::post(<span class="kw-2">&amp;</span>url);
-
-        <span class="kw">let </span>content = quick_xml::se::to_string(<span class="kw-2">&amp;</span>DeleteObjectsRequest {
-            object: paths
-                .into_iter()
-                .map(|path| DeleteObjectsRequestObject {
-                    key: build_abs_path(<span class="kw-2">&amp;</span><span class="self">self</span>.root, <span class="kw-2">&amp;</span>path),
-                })
-                .collect(),
-        })
-        .map_err(new_xml_deserialize_error)<span class="question-mark">?</span>;
-
-        <span class="comment">// Make sure content length has been set to avoid post with chunked encoding.
-        </span><span class="kw">let </span>req = req.header(CONTENT_LENGTH, content.len());
-        <span class="comment">// Set content-type to `application/xml` to avoid mixed with form post.
-        </span><span class="kw">let </span>req = req.header(CONTENT_TYPE, <span class="string">&quot;application/xml&quot;</span>);
-        <span class="comment">// Set content-md5 as required by API.
-        </span><span class="kw">let </span>req = req.header(<span class="string">&quot;CONTENT-MD5&quot;</span>, format_content_md5(content.as_bytes()));
-
-        <span class="kw">let </span><span class="kw-2">mut </span>req = req
-            .body(AsyncBody::Bytes(Bytes::from(content)))
-            .map_err(new_request_build_error)<span class="question-mark">?</span>;
-
-        <span class="self">self</span>.sign(<span class="kw-2">&amp;mut </span>req).<span class="kw">await</span><span class="question-mark">?</span>;
-
-        <span class="self">self</span>.send(req).<span class="kw">await
-    </span>}
-
-    <span class="kw">pub async fn </span>put_object(
-        <span class="kw-2">&amp;</span><span class="self">self</span>,
-        path: <span class="kw-2">&amp;</span>str,
-        size: <span class="prelude-ty">Option</span>&lt;usize&gt;,
-        args: <span class="kw-2">&amp;</span>OpWrite,
-        body: AsyncBody,
-    ) -&gt; <span class="prelude-ty">Result</span>&lt;Response&lt;IncomingAsyncBody&gt;&gt; {
-        <span class="kw">let </span><span class="kw-2">mut </span>req = <span class="self">self</span>.put_object_request(path, size, args, body)<span class="question-mark">?</span>;
-
-        <span class="self">self</span>.sign(<span class="kw-2">&amp;mut </span>req).<span class="kw">await</span><span class="question-mark">?</span>;
-
-        <span class="self">self</span>.send(req).<span class="kw">await
-    </span>}
-
-    <span class="kw">pub async fn </span>rename_object(<span class="kw-2">&amp;</span><span class="self">self</span>, from: <span class="kw-2">&amp;</span>str, to: <span class="kw-2">&amp;</span>str) -&gt; <span class="prelude-ty">Result</span>&lt;Response&lt;IncomingAsyncBody&gt;&gt; {
-        <span class="kw">let </span>from = percent_encode_path(build_abs_path(<span class="kw-2">&amp;</span><span class="self">self</span>.root, from).as_str());
-        <span class="kw">let </span>to = percent_encode_path(build_abs_path(<span class="kw-2">&amp;</span><span class="self">self</span>.root, to).as_str());
-
-        <span class="kw">let </span>url = <span class="macro">format!</span>(<span class="string">&quot;{}/{}&quot;</span>, <span class="self">self</span>.endpoint, from);
-
-        <span class="kw">let </span><span class="kw-2">mut </span>req = Request::builder().method(<span class="string">&quot;MOVE&quot;</span>).uri(url);
-
-        <span class="comment">// Set SSE headers.
-        </span>req = <span class="self">self</span>.insert_sse_headers(req, <span class="bool-val">true</span>);
-
-        <span class="kw">let </span><span class="kw-2">mut </span>req = req
-            .header(constants::DESTINATION, to)
-            .header(constants::OVERWRITE, <span class="string">&quot;true&quot;</span>)
-            .body(AsyncBody::Empty)
-            .map_err(new_request_build_error)<span class="question-mark">?</span>;
-
-        <span class="self">self</span>.sign(<span class="kw-2">&amp;mut </span>req).<span class="kw">await</span><span class="question-mark">?</span>;
-
-        <span class="self">self</span>.send(req).<span class="kw">await
-    </span>}
-
-    <span class="kw">pub async fn </span>append_object(
-        <span class="kw-2">&amp;</span><span class="self">self</span>,
-        path: <span class="kw-2">&amp;</span>str,
-        size: <span class="prelude-ty">Option</span>&lt;usize&gt;,
-        body: AsyncBody,
-    ) -&gt; <span class="prelude-ty">Result</span>&lt;Response&lt;IncomingAsyncBody&gt;&gt; {
-        <span class="kw">let </span>p = build_abs_path(<span class="kw-2">&amp;</span><span class="self">self</span>.root, path);
-
-        <span class="kw">let </span>url = <span class="macro">format!</span>(<span class="string">&quot;{}/{}?append&quot;</span>, <span class="self">self</span>.endpoint, percent_encode_path(<span class="kw-2">&amp;</span>p));
-
-        <span class="kw">let </span><span class="kw-2">mut </span>req = Request::put(<span class="kw-2">&amp;</span>url);
-
-        <span class="kw">if let </span><span class="prelude-val">Some</span>(size) = size {
-            req = req.header(CONTENT_LENGTH, size)
-        }
-
-        <span class="comment">// Set storage class header
-        </span><span class="kw">if let </span><span class="prelude-val">Some</span>(v) = <span class="kw-2">&amp;</span><span class="self">self</span>.default_storage_class {
-            req = req.header(HeaderName::from_static(constants::X_AMZ_STORAGE_CLASS), v);
-        }
-
-        <span class="comment">// Set SSE headers.
-        </span>req = <span class="self">self</span>.insert_sse_headers(req, <span class="bool-val">true</span>);
-
-        <span class="kw">let </span><span class="kw-2">mut </span>req = req.body(body).map_err(new_request_build_error)<span class="question-mark">?</span>;
-
-        <span class="self">self</span>.sign(<span class="kw-2">&amp;mut </span>req).<span class="kw">await</span><span class="question-mark">?</span>;
-
-        <span class="self">self</span>.send(req).<span class="kw">await
-    </span>}
-}
-
-<span class="doccomment">/// Result of CreateMultipartUpload
-</span><span class="attr">#[derive(Default, Debug, Deserialize)]
-#[serde(default, rename_all = <span class="string">&quot;PascalCase&quot;</span>)]
-</span><span class="kw">pub struct </span>InitiateMultipartUploadResult {
-    <span class="kw">pub </span>upload_id: String,
-}
-
-<span class="doccomment">/// Request of CompleteMultipartUploadRequest
-</span><span class="attr">#[derive(Default, Debug, Serialize)]
-#[serde(default, rename = <span class="string">&quot;CompleteMultipartUpload&quot;</span>, rename_all = <span class="string">&quot;PascalCase&quot;</span>)]
-</span><span class="kw">pub struct </span>CompleteMultipartUploadRequest {
-    <span class="kw">pub </span>part: Vec&lt;CompleteMultipartUploadRequestPart&gt;,
-}
-
-<span class="attr">#[derive(Clone, Default, Debug, Serialize)]
-#[serde(default, rename_all = <span class="string">&quot;PascalCase&quot;</span>)]
-</span><span class="kw">pub struct </span>CompleteMultipartUploadRequestPart {
-    <span class="attr">#[serde(rename = <span class="string">&quot;PartNumber&quot;</span>)]
-    </span><span class="kw">pub </span>part_number: usize,
-    <span class="doccomment">/// # TODO
-    ///
-    /// quick-xml will do escape on `&quot;` which leads to our serialized output is
-    /// not the same as aws s3&#39;s example.
-    ///
-    /// Ideally, we could use `serialize_with` to address this (buf failed)
-    ///
-    /// ```ignore
-    /// #[derive(Default, Debug, Serialize)]
-    /// #[serde(default, rename_all = &quot;PascalCase&quot;)]
-    /// struct CompleteMultipartUploadRequestPart {
-    ///     #[serde(rename = &quot;PartNumber&quot;)]
-    ///     part_number: usize,
-    ///     #[serde(rename = &quot;ETag&quot;, serialize_with = &quot;partial_escape&quot;)]
-    ///     etag: String,
-    /// }
-    ///
-    /// fn partial_escape&lt;S&gt;(s: &amp;str, ser: S) -&gt; std::result::Result&lt;S::Ok, S::Error&gt;
-    /// where
-    ///     S: serde::Serializer,
-    /// {
-    ///     ser.serialize_str(&amp;String::from_utf8_lossy(
-    ///         &amp;quick_xml::escape::partial_escape(s.as_bytes()),
-    ///     ))
-    /// }
-    /// ```
-    ///
-    /// ref: &lt;https://github.com/tafia/quick-xml/issues/362&gt;
-    </span><span class="attr">#[serde(rename = <span class="string">&quot;ETag&quot;</span>)]
-    </span><span class="kw">pub </span>etag: String,
-}
-
-<span class="doccomment">/// Request of DeleteObjects.
-</span><span class="attr">#[derive(Default, Debug, Serialize)]
-#[serde(default, rename = <span class="string">&quot;Delete&quot;</span>, rename_all = <span class="string">&quot;PascalCase&quot;</span>)]
-</span><span class="kw">pub struct </span>DeleteObjectsRequest {
-    <span class="kw">pub </span>object: Vec&lt;DeleteObjectsRequestObject&gt;,
-}
-
-<span class="attr">#[derive(Default, Debug, Serialize)]
-#[serde(rename_all = <span class="string">&quot;PascalCase&quot;</span>)]
-</span><span class="kw">pub struct </span>DeleteObjectsRequestObject {
-    <span class="kw">pub </span>key: String,
-}
-
-<span class="doccomment">/// Result of DeleteObjects.
-</span><span class="attr">#[derive(Default, Debug, Deserialize)]
-#[serde(default, rename = <span class="string">&quot;DeleteResult&quot;</span>, rename_all = <span class="string">&quot;PascalCase&quot;</span>)]
-</span><span class="kw">pub struct </span>DeleteObjectsResult {
-    <span class="kw">pub </span>deleted: Vec&lt;DeleteObjectsResultDeleted&gt;,
-    <span class="kw">pub </span>error: Vec&lt;DeleteObjectsResultError&gt;,
-}
-
-<span class="attr">#[derive(Default, Debug, Deserialize)]
-#[serde(rename_all = <span class="string">&quot;PascalCase&quot;</span>)]
-</span><span class="kw">pub struct </span>DeleteObjectsResultDeleted {
-    <span class="kw">pub </span>key: String,
-}
-
-<span class="attr">#[derive(Default, Debug, Deserialize)]
-#[serde(default, rename_all = <span class="string">&quot;PascalCase&quot;</span>)]
-</span><span class="kw">pub struct </span>DeleteObjectsResultError {
-    <span class="kw">pub </span>code: String,
-    <span class="kw">pub </span>key: String,
-    <span class="kw">pub </span>message: String,
-}
-
-<span class="attr">#[cfg(test)]
-</span><span class="kw">mod </span>tests {
-    <span class="kw">use </span>bytes::Buf;
-    <span class="kw">use </span>bytes::Bytes;
-
-    <span class="kw">use super</span>::<span class="kw-2">*</span>;
-
-    <span class="doccomment">/// This example is from https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateMultipartUpload.html#API_CreateMultipartUpload_Examples
-    </span><span class="attr">#[test]
-    </span><span class="kw">fn </span>test_deserialize_initiate_multipart_upload_result() {
-        <span class="kw">let </span>bs = Bytes::from(
-            <span class="string">r#&quot;&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
-            &lt;InitiateMultipartUploadResult xmlns=&quot;http://s3.amazonaws.com/doc/2006-03-01/&quot;&gt;
-              &lt;Bucket&gt;example-bucket&lt;/Bucket&gt;
-              &lt;Key&gt;example-object&lt;/Key&gt;
-              &lt;UploadId&gt;VXBsb2FkIElEIGZvciA2aWWpbmcncyBteS1tb3ZpZS5tMnRzIHVwbG9hZA&lt;/UploadId&gt;
-            &lt;/InitiateMultipartUploadResult&gt;&quot;#</span>,
-        );
-
-        <span class="kw">let </span>out: InitiateMultipartUploadResult =
-            quick_xml::de::from_reader(bs.reader()).expect(<span class="string">&quot;must success&quot;</span>);
-
-        <span class="macro">assert_eq!</span>(
-            out.upload_id,
-            <span class="string">&quot;VXBsb2FkIElEIGZvciA2aWWpbmcncyBteS1tb3ZpZS5tMnRzIHVwbG9hZA&quot;
-        </span>)
-    }
-
-    <span class="doccomment">/// This example is from https://docs.aws.amazon.com/AmazonS3/latest/API/API_CompleteMultipartUpload.html#API_CompleteMultipartUpload_Examples
-    </span><span class="attr">#[test]
-    </span><span class="kw">fn </span>test_serialize_complete_multipart_upload_request() {
-        <span class="kw">let </span>req = CompleteMultipartUploadRequest {
-            part: <span class="macro">vec!</span>[
-                CompleteMultipartUploadRequestPart {
-                    part_number: <span class="number">1</span>,
-                    etag: <span class="string">&quot;\&quot;a54357aff0632cce46d942af68356b38\&quot;&quot;</span>.to_string(),
-                },
-                CompleteMultipartUploadRequestPart {
-                    part_number: <span class="number">2</span>,
-                    etag: <span class="string">&quot;\&quot;0c78aef83f66abc1fa1e8477f296d394\&quot;&quot;</span>.to_string(),
-                },
-                CompleteMultipartUploadRequestPart {
-                    part_number: <span class="number">3</span>,
-                    etag: <span class="string">&quot;\&quot;acbd18db4cc2f85cedef654fccc4a4d8\&quot;&quot;</span>.to_string(),
-                },
-            ],
-        };
-
-        <span class="kw">let </span>actual = quick_xml::se::to_string(<span class="kw-2">&amp;</span>req).expect(<span class="string">&quot;must succeed&quot;</span>);
-
-        <span class="macro">pretty_assertions::assert_eq!</span>(
-            actual,
-            <span class="string">r#&quot;&lt;CompleteMultipartUpload&gt;
-             &lt;Part&gt;
-                &lt;PartNumber&gt;1&lt;/PartNumber&gt;
-               &lt;ETag&gt;&quot;a54357aff0632cce46d942af68356b38&quot;&lt;/ETag&gt;
-             &lt;/Part&gt;
-             &lt;Part&gt;
-                &lt;PartNumber&gt;2&lt;/PartNumber&gt;
-               &lt;ETag&gt;&quot;0c78aef83f66abc1fa1e8477f296d394&quot;&lt;/ETag&gt;
-             &lt;/Part&gt;
-             &lt;Part&gt;
-               &lt;PartNumber&gt;3&lt;/PartNumber&gt;
-               &lt;ETag&gt;&quot;acbd18db4cc2f85cedef654fccc4a4d8&quot;&lt;/ETag&gt;
-             &lt;/Part&gt;
-            &lt;/CompleteMultipartUpload&gt;&quot;#
-                </span><span class="comment">// Cleanup space and new line
-                </span>.replace([<span class="string">&#39; &#39;</span>, <span class="string">&#39;\n&#39;</span>], <span class="string">&quot;&quot;</span>)
-                <span class="comment">// Escape `&quot;` by hand to address &lt;https://github.com/tafia/quick-xml/issues/362&gt;
-                </span>.replace(<span class="string">&#39;&quot;&#39;</span>, <span class="string">&quot;&amp;quot;&quot;</span>)
-        )
-    }
-
-    <span class="doccomment">/// This example is from https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteObjects.html#API_DeleteObjects_Examples
-    </span><span class="attr">#[test]
-    </span><span class="kw">fn </span>test_serialize_delete_objects_request() {
-        <span class="kw">let </span>req = DeleteObjectsRequest {
-            object: <span class="macro">vec!</span>[
-                DeleteObjectsRequestObject {
-                    key: <span class="string">&quot;sample1.txt&quot;</span>.to_string(),
-                },
-                DeleteObjectsRequestObject {
-                    key: <span class="string">&quot;sample2.txt&quot;</span>.to_string(),
-                },
-            ],
-        };
-
-        <span class="kw">let </span>actual = quick_xml::se::to_string(<span class="kw-2">&amp;</span>req).expect(<span class="string">&quot;must succeed&quot;</span>);
-
-        <span class="macro">pretty_assertions::assert_eq!</span>(
-            actual,
-            <span class="string">r#&quot;&lt;Delete&gt;
-             &lt;Object&gt;
-             &lt;Key&gt;sample1.txt&lt;/Key&gt;
-             &lt;/Object&gt;
-             &lt;Object&gt;
-               &lt;Key&gt;sample2.txt&lt;/Key&gt;
-             &lt;/Object&gt;
-             &lt;/Delete&gt;&quot;#
-                </span><span class="comment">// Cleanup space and new line
-                </span>.replace([<span class="string">&#39; &#39;</span>, <span class="string">&#39;\n&#39;</span>], <span class="string">&quot;&quot;</span>)
-        )
-    }
-
-    <span class="doccomment">/// This example is from https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteObjects.html#API_DeleteObjects_Examples
-    </span><span class="attr">#[test]
-    </span><span class="kw">fn </span>test_deserialize_delete_objects_result() {
-        <span class="kw">let </span>bs = Bytes::from(
-            <span class="string">r#&quot;&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
-            &lt;DeleteResult xmlns=&quot;http://s3.amazonaws.com/doc/2006-03-01/&quot;&gt;
-             &lt;Deleted&gt;
-               &lt;Key&gt;sample1.txt&lt;/Key&gt;
-             &lt;/Deleted&gt;
-             &lt;Error&gt;
-              &lt;Key&gt;sample2.txt&lt;/Key&gt;
-              &lt;Code&gt;AccessDenied&lt;/Code&gt;
-              &lt;Message&gt;Access Denied&lt;/Message&gt;
-             &lt;/Error&gt;
-            &lt;/DeleteResult&gt;&quot;#</span>,
-        );
-
-        <span class="kw">let </span>out: DeleteObjectsResult =
-            quick_xml::de::from_reader(bs.reader()).expect(<span class="string">&quot;must success&quot;</span>);
-
-        <span class="macro">assert_eq!</span>(out.deleted.len(), <span class="number">1</span>);
-        <span class="macro">assert_eq!</span>(out.deleted[<span class="number">0</span>].key, <span class="string">&quot;sample1.txt&quot;</span>);
-        <span class="macro">assert_eq!</span>(out.error.len(), <span class="number">1</span>);
-        <span class="macro">assert_eq!</span>(out.error[<span class="number">0</span>].key, <span class="string">&quot;sample2.txt&quot;</span>);
-        <span class="macro">assert_eq!</span>(out.error[<span class="number">0</span>].code, <span class="string">&quot;AccessDenied&quot;</span>);
-        <span class="macro">assert_eq!</span>(out.error[<span class="number">0</span>].message, <span class="string">&quot;Access Denied&quot;</span>);
-    }
-}
-</code></pre></div></section></main></body></html>
\ No newline at end of file
diff --git a/docs/rust/src/opendal/services/wasabi/error.rs.html b/docs/rust/src/opendal/services/wasabi/error.rs.html
deleted file mode 100644
index 1067f217e..000000000
--- a/docs/rust/src/opendal/services/wasabi/error.rs.html
+++ /dev/null
@@ -1,263 +0,0 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `core/src/services/wasabi/error.rs`."><title>error.rs - source</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crosso [...]
-<a href="#2" id="2">2</a>
-<a href="#3" id="3">3</a>
-<a href="#4" id="4">4</a>
-<a href="#5" id="5">5</a>
-<a href="#6" id="6">6</a>
-<a href="#7" id="7">7</a>
-<a href="#8" id="8">8</a>
-<a href="#9" id="9">9</a>
-<a href="#10" id="10">10</a>
-<a href="#11" id="11">11</a>
-<a href="#12" id="12">12</a>
-<a href="#13" id="13">13</a>
-<a href="#14" id="14">14</a>
-<a href="#15" id="15">15</a>
-<a href="#16" id="16">16</a>
-<a href="#17" id="17">17</a>
-<a href="#18" id="18">18</a>
-<a href="#19" id="19">19</a>
-<a href="#20" id="20">20</a>
-<a href="#21" id="21">21</a>
-<a href="#22" id="22">22</a>
-<a href="#23" id="23">23</a>
-<a href="#24" id="24">24</a>
-<a href="#25" id="25">25</a>
-<a href="#26" id="26">26</a>
-<a href="#27" id="27">27</a>
-<a href="#28" id="28">28</a>
-<a href="#29" id="29">29</a>
-<a href="#30" id="30">30</a>
-<a href="#31" id="31">31</a>
-<a href="#32" id="32">32</a>
-<a href="#33" id="33">33</a>
-<a href="#34" id="34">34</a>
-<a href="#35" id="35">35</a>
-<a href="#36" id="36">36</a>
-<a href="#37" id="37">37</a>
-<a href="#38" id="38">38</a>
-<a href="#39" id="39">39</a>
-<a href="#40" id="40">40</a>
-<a href="#41" id="41">41</a>
-<a href="#42" id="42">42</a>
-<a href="#43" id="43">43</a>
-<a href="#44" id="44">44</a>
-<a href="#45" id="45">45</a>
-<a href="#46" id="46">46</a>
-<a href="#47" id="47">47</a>
-<a href="#48" id="48">48</a>
-<a href="#49" id="49">49</a>
-<a href="#50" id="50">50</a>
-<a href="#51" id="51">51</a>
-<a href="#52" id="52">52</a>
-<a href="#53" id="53">53</a>
-<a href="#54" id="54">54</a>
-<a href="#55" id="55">55</a>
-<a href="#56" id="56">56</a>
-<a href="#57" id="57">57</a>
-<a href="#58" id="58">58</a>
-<a href="#59" id="59">59</a>
-<a href="#60" id="60">60</a>
-<a href="#61" id="61">61</a>
-<a href="#62" id="62">62</a>
-<a href="#63" id="63">63</a>
-<a href="#64" id="64">64</a>
-<a href="#65" id="65">65</a>
-<a href="#66" id="66">66</a>
-<a href="#67" id="67">67</a>
-<a href="#68" id="68">68</a>
-<a href="#69" id="69">69</a>
-<a href="#70" id="70">70</a>
-<a href="#71" id="71">71</a>
-<a href="#72" id="72">72</a>
-<a href="#73" id="73">73</a>
-<a href="#74" id="74">74</a>
-<a href="#75" id="75">75</a>
-<a href="#76" id="76">76</a>
-<a href="#77" id="77">77</a>
-<a href="#78" id="78">78</a>
-<a href="#79" id="79">79</a>
-<a href="#80" id="80">80</a>
-<a href="#81" id="81">81</a>
-<a href="#82" id="82">82</a>
-<a href="#83" id="83">83</a>
-<a href="#84" id="84">84</a>
-<a href="#85" id="85">85</a>
-<a href="#86" id="86">86</a>
-<a href="#87" id="87">87</a>
-<a href="#88" id="88">88</a>
-<a href="#89" id="89">89</a>
-<a href="#90" id="90">90</a>
-<a href="#91" id="91">91</a>
-<a href="#92" id="92">92</a>
-<a href="#93" id="93">93</a>
-<a href="#94" id="94">94</a>
-<a href="#95" id="95">95</a>
-<a href="#96" id="96">96</a>
-<a href="#97" id="97">97</a>
-<a href="#98" id="98">98</a>
-<a href="#99" id="99">99</a>
-<a href="#100" id="100">100</a>
-<a href="#101" id="101">101</a>
-<a href="#102" id="102">102</a>
-<a href="#103" id="103">103</a>
-<a href="#104" id="104">104</a>
-<a href="#105" id="105">105</a>
-<a href="#106" id="106">106</a>
-<a href="#107" id="107">107</a>
-<a href="#108" id="108">108</a>
-<a href="#109" id="109">109</a>
-<a href="#110" id="110">110</a>
-<a href="#111" id="111">111</a>
-<a href="#112" id="112">112</a>
-<a href="#113" id="113">113</a>
-<a href="#114" id="114">114</a>
-<a href="#115" id="115">115</a>
-<a href="#116" id="116">116</a>
-<a href="#117" id="117">117</a>
-<a href="#118" id="118">118</a>
-<a href="#119" id="119">119</a>
-<a href="#120" id="120">120</a>
-<a href="#121" id="121">121</a>
-<a href="#122" id="122">122</a>
-<a href="#123" id="123">123</a>
-<a href="#124" id="124">124</a>
-<a href="#125" id="125">125</a>
-<a href="#126" id="126">126</a>
-<a href="#127" id="127">127</a>
-<a href="#128" id="128">128</a>
-<a href="#129" id="129">129</a>
-<a href="#130" id="130">130</a>
-<a href="#131" id="131">131</a>
-</pre></div><pre class="rust"><code><span class="comment">// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// &quot;License&quot;); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// &quot;AS IS&quot; BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-
-</span><span class="kw">use </span>bytes::Buf;
-<span class="kw">use </span>http::Response;
-<span class="kw">use </span>http::StatusCode;
-<span class="kw">use </span>quick_xml::de;
-<span class="kw">use </span>serde::Deserialize;
-
-<span class="kw">use </span><span class="kw">crate</span>::raw::<span class="kw-2">*</span>;
-<span class="kw">use </span><span class="kw">crate</span>::Error;
-<span class="kw">use </span><span class="kw">crate</span>::ErrorKind;
-<span class="kw">use </span><span class="kw">crate</span>::Result;
-
-<span class="doccomment">/// WasabiError is the error returned by wasabi service.
-</span><span class="attr">#[derive(Default, Debug, Deserialize)]
-#[serde(default, rename_all = <span class="string">&quot;PascalCase&quot;</span>)]
-</span><span class="kw">struct </span>WasabiError {
-    code: String,
-    message: String,
-    resource: String,
-    request_id: String,
-}
-
-<span class="doccomment">/// Parse error response into Error.
-</span><span class="kw">pub async fn </span>parse_error(resp: Response&lt;IncomingAsyncBody&gt;) -&gt; <span class="prelude-ty">Result</span>&lt;Error&gt; {
-    <span class="kw">let </span>(parts, body) = resp.into_parts();
-    <span class="kw">let </span>bs = body.bytes().<span class="kw">await</span><span class="question-mark">?</span>;
-
-    <span class="kw">let </span>(<span class="kw-2">mut </span>kind, <span class="kw-2">mut </span>retryable) = <span class="kw">match </span>parts.status {
-        StatusCode::NOT_FOUND =&gt; (ErrorKind::NotFound, <span class="bool-val">false</span>),
-        StatusCode::FORBIDDEN =&gt; (ErrorKind::PermissionDenied, <span class="bool-val">false</span>),
-        StatusCode::PRECONDITION_FAILED | StatusCode::NOT_MODIFIED =&gt; {
-            (ErrorKind::ConditionNotMatch, <span class="bool-val">false</span>)
-        }
-        StatusCode::INTERNAL_SERVER_ERROR
-        | StatusCode::BAD_GATEWAY
-        | StatusCode::SERVICE_UNAVAILABLE
-        | StatusCode::GATEWAY_TIMEOUT =&gt; (ErrorKind::Unexpected, <span class="bool-val">true</span>),
-        <span class="kw">_ </span>=&gt; (ErrorKind::Unexpected, <span class="bool-val">false</span>),
-    };
-
-    <span class="kw">let </span>(message, wasabi_err) = de::from_reader::&lt;<span class="kw">_</span>, WasabiError&gt;(bs.clone().reader())
-        .map(|err| (<span class="macro">format!</span>(<span class="string">&quot;{err:?}&quot;</span>), <span class="prelude-val">Some</span>(err)))
-        .unwrap_or_else(|<span class="kw">_</span>| (String::from_utf8_lossy(<span class="kw-2">&amp;</span>bs).into_owned(), <span class="prelude-val">None</span>));
-
-    <span class="kw">if let </span><span class="prelude-val">Some</span>(wasabi_err) = wasabi_err {
-        (kind, retryable) = parse_wasabi_error_code(<span class="kw-2">&amp;</span>wasabi_err.code).unwrap_or((kind, retryable));
-    }
-
-    <span class="kw">let </span><span class="kw-2">mut </span>err = Error::new(kind, <span class="kw-2">&amp;</span>message);
-
-    err = with_error_response_context(err, parts);
-
-    <span class="kw">if </span>retryable {
-        err = err.set_temporary();
-    }
-
-    <span class="prelude-val">Ok</span>(err)
-}
-
-<span class="doccomment">/// Returns the `Error kind` of this code and whether the error is retryable.
-/// All possible error code: &lt;https://docs.aws.amazon.com/AmazonS3/latest/API/ErrorResponses.html#ErrorCodeList&gt;
-</span><span class="kw">pub fn </span>parse_wasabi_error_code(code: <span class="kw-2">&amp;</span>str) -&gt; <span class="prelude-ty">Option</span>&lt;(ErrorKind, bool)&gt; {
-    <span class="kw">match </span>code {
-        <span class="comment">// &gt; Your socket connection to the server was not read from
-        // &gt; or written to within the timeout period.&quot;
-        //
-        // It&#39;s Ok for us to retry it again.
-        </span><span class="string">&quot;RequestTimeout&quot; </span>=&gt; <span class="prelude-val">Some</span>((ErrorKind::Unexpected, <span class="bool-val">true</span>)),
-        <span class="comment">// &gt; An internal error occurred. Try again.
-        </span><span class="string">&quot;InternalError&quot; </span>=&gt; <span class="prelude-val">Some</span>((ErrorKind::Unexpected, <span class="bool-val">true</span>)),
-        <span class="comment">// &gt; A conflicting conditional operation is currently in progress
-        // &gt; against this resource. Try again.
-        </span><span class="string">&quot;OperationAborted&quot; </span>=&gt; <span class="prelude-val">Some</span>((ErrorKind::Unexpected, <span class="bool-val">true</span>)),
-        <span class="comment">// &gt; Please reduce your request rate.
-        //
-        // It&#39;s Ok to retry since later on the request rate may get reduced.
-        </span><span class="string">&quot;SlowDown&quot; </span>=&gt; <span class="prelude-val">Some</span>((ErrorKind::RateLimited, <span class="bool-val">true</span>)),
-        <span class="comment">// &gt; Service is unable to handle request.
-        //
-        // ServiceUnavailable is considered a retryable error because it typically
-        // indicates a temporary issue with the service or server, such as high load,
-        // maintenance, or an internal problem.
-        </span><span class="string">&quot;ServiceUnavailable&quot; </span>=&gt; <span class="prelude-val">Some</span>((ErrorKind::Unexpected, <span class="bool-val">true</span>)),
-        <span class="kw">_ </span>=&gt; <span class="prelude-val">None</span>,
-    }
-}
-
-<span class="attr">#[cfg(test)]
-</span><span class="kw">mod </span>tests {
-    <span class="kw">use super</span>::<span class="kw-2">*</span>;
-
-    <span class="doccomment">/// Error response example is from https://docs.aws.amazon.com/AmazonS3/latest/API/ErrorResponses.html
-    </span><span class="attr">#[test]
-    </span><span class="kw">fn </span>test_parse_error() {
-        <span class="kw">let </span>bs = bytes::Bytes::from(
-            <span class="string">r#&quot;
-&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
-&lt;Error&gt;
-  &lt;Code&gt;NoSuchKey&lt;/Code&gt;
-  &lt;Message&gt;The resource you requested does not exist&lt;/Message&gt;
-  &lt;Resource&gt;/mybucket/myfoto.jpg&lt;/Resource&gt;
-  &lt;RequestId&gt;4442587FB7D0A2F9&lt;/RequestId&gt;
-&lt;/Error&gt;
-&quot;#</span>,
-        );
-
-        <span class="kw">let </span>out: WasabiError = de::from_reader(bs.reader()).expect(<span class="string">&quot;must success&quot;</span>);
-        <span class="macro">println!</span>(<span class="string">&quot;{out:?}&quot;</span>);
-
-        <span class="macro">assert_eq!</span>(out.code, <span class="string">&quot;NoSuchKey&quot;</span>);
-        <span class="macro">assert_eq!</span>(out.message, <span class="string">&quot;The resource you requested does not exist&quot;</span>);
-        <span class="macro">assert_eq!</span>(out.resource, <span class="string">&quot;/mybucket/myfoto.jpg&quot;</span>);
-        <span class="macro">assert_eq!</span>(out.request_id, <span class="string">&quot;4442587FB7D0A2F9&quot;</span>);
-    }
-}
-</code></pre></div></section></main></body></html>
\ No newline at end of file
diff --git a/docs/rust/src/opendal/services/wasabi/mod.rs.html b/docs/rust/src/opendal/services/wasabi/mod.rs.html
deleted file mode 100644
index ffd6afde0..000000000
--- a/docs/rust/src/opendal/services/wasabi/mod.rs.html
+++ /dev/null
@@ -1,49 +0,0 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `core/src/services/wasabi/mod.rs`."><title>mod.rs - source</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigi [...]
-<a href="#2" id="2">2</a>
-<a href="#3" id="3">3</a>
-<a href="#4" id="4">4</a>
-<a href="#5" id="5">5</a>
-<a href="#6" id="6">6</a>
-<a href="#7" id="7">7</a>
-<a href="#8" id="8">8</a>
-<a href="#9" id="9">9</a>
-<a href="#10" id="10">10</a>
-<a href="#11" id="11">11</a>
-<a href="#12" id="12">12</a>
-<a href="#13" id="13">13</a>
-<a href="#14" id="14">14</a>
-<a href="#15" id="15">15</a>
-<a href="#16" id="16">16</a>
-<a href="#17" id="17">17</a>
-<a href="#18" id="18">18</a>
-<a href="#19" id="19">19</a>
-<a href="#20" id="20">20</a>
-<a href="#21" id="21">21</a>
-<a href="#22" id="22">22</a>
-<a href="#23" id="23">23</a>
-<a href="#24" id="24">24</a>
-</pre></div><pre class="rust"><code><span class="comment">// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// &quot;License&quot;); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// &quot;AS IS&quot; BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-
-</span><span class="kw">mod </span>backend;
-<span class="kw">pub use </span>backend::WasabiBuilder <span class="kw">as </span>Wasabi;
-
-<span class="kw">mod </span>core;
-<span class="kw">mod </span>error;
-<span class="kw">mod </span>pager;
-<span class="kw">mod </span>writer;
-</code></pre></div></section></main></body></html>
\ No newline at end of file
diff --git a/docs/rust/src/opendal/services/wasabi/pager.rs.html b/docs/rust/src/opendal/services/wasabi/pager.rs.html
deleted file mode 100644
index 51cd5aeb2..000000000
--- a/docs/rust/src/opendal/services/wasabi/pager.rs.html
+++ /dev/null
@@ -1,463 +0,0 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `core/src/services/wasabi/pager.rs`."><title>pager.rs - source</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crosso [...]
-<a href="#2" id="2">2</a>
-<a href="#3" id="3">3</a>
-<a href="#4" id="4">4</a>
-<a href="#5" id="5">5</a>
-<a href="#6" id="6">6</a>
-<a href="#7" id="7">7</a>
-<a href="#8" id="8">8</a>
-<a href="#9" id="9">9</a>
-<a href="#10" id="10">10</a>
-<a href="#11" id="11">11</a>
-<a href="#12" id="12">12</a>
-<a href="#13" id="13">13</a>
-<a href="#14" id="14">14</a>
-<a href="#15" id="15">15</a>
-<a href="#16" id="16">16</a>
-<a href="#17" id="17">17</a>
-<a href="#18" id="18">18</a>
-<a href="#19" id="19">19</a>
-<a href="#20" id="20">20</a>
-<a href="#21" id="21">21</a>
-<a href="#22" id="22">22</a>
-<a href="#23" id="23">23</a>
-<a href="#24" id="24">24</a>
-<a href="#25" id="25">25</a>
-<a href="#26" id="26">26</a>
-<a href="#27" id="27">27</a>
-<a href="#28" id="28">28</a>
-<a href="#29" id="29">29</a>
-<a href="#30" id="30">30</a>
-<a href="#31" id="31">31</a>
-<a href="#32" id="32">32</a>
-<a href="#33" id="33">33</a>
-<a href="#34" id="34">34</a>
-<a href="#35" id="35">35</a>
-<a href="#36" id="36">36</a>
-<a href="#37" id="37">37</a>
-<a href="#38" id="38">38</a>
-<a href="#39" id="39">39</a>
-<a href="#40" id="40">40</a>
-<a href="#41" id="41">41</a>
-<a href="#42" id="42">42</a>
-<a href="#43" id="43">43</a>
-<a href="#44" id="44">44</a>
-<a href="#45" id="45">45</a>
-<a href="#46" id="46">46</a>
-<a href="#47" id="47">47</a>
-<a href="#48" id="48">48</a>
-<a href="#49" id="49">49</a>
-<a href="#50" id="50">50</a>
-<a href="#51" id="51">51</a>
-<a href="#52" id="52">52</a>
-<a href="#53" id="53">53</a>
-<a href="#54" id="54">54</a>
-<a href="#55" id="55">55</a>
-<a href="#56" id="56">56</a>
-<a href="#57" id="57">57</a>
-<a href="#58" id="58">58</a>
-<a href="#59" id="59">59</a>
-<a href="#60" id="60">60</a>
-<a href="#61" id="61">61</a>
-<a href="#62" id="62">62</a>
-<a href="#63" id="63">63</a>
-<a href="#64" id="64">64</a>
-<a href="#65" id="65">65</a>
-<a href="#66" id="66">66</a>
-<a href="#67" id="67">67</a>
-<a href="#68" id="68">68</a>
-<a href="#69" id="69">69</a>
-<a href="#70" id="70">70</a>
-<a href="#71" id="71">71</a>
-<a href="#72" id="72">72</a>
-<a href="#73" id="73">73</a>
-<a href="#74" id="74">74</a>
-<a href="#75" id="75">75</a>
-<a href="#76" id="76">76</a>
-<a href="#77" id="77">77</a>
-<a href="#78" id="78">78</a>
-<a href="#79" id="79">79</a>
-<a href="#80" id="80">80</a>
-<a href="#81" id="81">81</a>
-<a href="#82" id="82">82</a>
-<a href="#83" id="83">83</a>
-<a href="#84" id="84">84</a>
-<a href="#85" id="85">85</a>
-<a href="#86" id="86">86</a>
-<a href="#87" id="87">87</a>
-<a href="#88" id="88">88</a>
-<a href="#89" id="89">89</a>
-<a href="#90" id="90">90</a>
-<a href="#91" id="91">91</a>
-<a href="#92" id="92">92</a>
-<a href="#93" id="93">93</a>
-<a href="#94" id="94">94</a>
-<a href="#95" id="95">95</a>
-<a href="#96" id="96">96</a>
-<a href="#97" id="97">97</a>
-<a href="#98" id="98">98</a>
-<a href="#99" id="99">99</a>
-<a href="#100" id="100">100</a>
-<a href="#101" id="101">101</a>
-<a href="#102" id="102">102</a>
-<a href="#103" id="103">103</a>
-<a href="#104" id="104">104</a>
-<a href="#105" id="105">105</a>
-<a href="#106" id="106">106</a>
-<a href="#107" id="107">107</a>
-<a href="#108" id="108">108</a>
-<a href="#109" id="109">109</a>
-<a href="#110" id="110">110</a>
-<a href="#111" id="111">111</a>
-<a href="#112" id="112">112</a>
-<a href="#113" id="113">113</a>
-<a href="#114" id="114">114</a>
-<a href="#115" id="115">115</a>
-<a href="#116" id="116">116</a>
-<a href="#117" id="117">117</a>
-<a href="#118" id="118">118</a>
-<a href="#119" id="119">119</a>
-<a href="#120" id="120">120</a>
-<a href="#121" id="121">121</a>
-<a href="#122" id="122">122</a>
-<a href="#123" id="123">123</a>
-<a href="#124" id="124">124</a>
-<a href="#125" id="125">125</a>
-<a href="#126" id="126">126</a>
-<a href="#127" id="127">127</a>
-<a href="#128" id="128">128</a>
-<a href="#129" id="129">129</a>
-<a href="#130" id="130">130</a>
-<a href="#131" id="131">131</a>
-<a href="#132" id="132">132</a>
-<a href="#133" id="133">133</a>
-<a href="#134" id="134">134</a>
-<a href="#135" id="135">135</a>
-<a href="#136" id="136">136</a>
-<a href="#137" id="137">137</a>
-<a href="#138" id="138">138</a>
-<a href="#139" id="139">139</a>
-<a href="#140" id="140">140</a>
-<a href="#141" id="141">141</a>
-<a href="#142" id="142">142</a>
-<a href="#143" id="143">143</a>
-<a href="#144" id="144">144</a>
-<a href="#145" id="145">145</a>
-<a href="#146" id="146">146</a>
-<a href="#147" id="147">147</a>
-<a href="#148" id="148">148</a>
-<a href="#149" id="149">149</a>
-<a href="#150" id="150">150</a>
-<a href="#151" id="151">151</a>
-<a href="#152" id="152">152</a>
-<a href="#153" id="153">153</a>
-<a href="#154" id="154">154</a>
-<a href="#155" id="155">155</a>
-<a href="#156" id="156">156</a>
-<a href="#157" id="157">157</a>
-<a href="#158" id="158">158</a>
-<a href="#159" id="159">159</a>
-<a href="#160" id="160">160</a>
-<a href="#161" id="161">161</a>
-<a href="#162" id="162">162</a>
-<a href="#163" id="163">163</a>
-<a href="#164" id="164">164</a>
-<a href="#165" id="165">165</a>
-<a href="#166" id="166">166</a>
-<a href="#167" id="167">167</a>
-<a href="#168" id="168">168</a>
-<a href="#169" id="169">169</a>
-<a href="#170" id="170">170</a>
-<a href="#171" id="171">171</a>
-<a href="#172" id="172">172</a>
-<a href="#173" id="173">173</a>
-<a href="#174" id="174">174</a>
-<a href="#175" id="175">175</a>
-<a href="#176" id="176">176</a>
-<a href="#177" id="177">177</a>
-<a href="#178" id="178">178</a>
-<a href="#179" id="179">179</a>
-<a href="#180" id="180">180</a>
-<a href="#181" id="181">181</a>
-<a href="#182" id="182">182</a>
-<a href="#183" id="183">183</a>
-<a href="#184" id="184">184</a>
-<a href="#185" id="185">185</a>
-<a href="#186" id="186">186</a>
-<a href="#187" id="187">187</a>
-<a href="#188" id="188">188</a>
-<a href="#189" id="189">189</a>
-<a href="#190" id="190">190</a>
-<a href="#191" id="191">191</a>
-<a href="#192" id="192">192</a>
-<a href="#193" id="193">193</a>
-<a href="#194" id="194">194</a>
-<a href="#195" id="195">195</a>
-<a href="#196" id="196">196</a>
-<a href="#197" id="197">197</a>
-<a href="#198" id="198">198</a>
-<a href="#199" id="199">199</a>
-<a href="#200" id="200">200</a>
-<a href="#201" id="201">201</a>
-<a href="#202" id="202">202</a>
-<a href="#203" id="203">203</a>
-<a href="#204" id="204">204</a>
-<a href="#205" id="205">205</a>
-<a href="#206" id="206">206</a>
-<a href="#207" id="207">207</a>
-<a href="#208" id="208">208</a>
-<a href="#209" id="209">209</a>
-<a href="#210" id="210">210</a>
-<a href="#211" id="211">211</a>
-<a href="#212" id="212">212</a>
-<a href="#213" id="213">213</a>
-<a href="#214" id="214">214</a>
-<a href="#215" id="215">215</a>
-<a href="#216" id="216">216</a>
-<a href="#217" id="217">217</a>
-<a href="#218" id="218">218</a>
-<a href="#219" id="219">219</a>
-<a href="#220" id="220">220</a>
-<a href="#221" id="221">221</a>
-<a href="#222" id="222">222</a>
-<a href="#223" id="223">223</a>
-<a href="#224" id="224">224</a>
-<a href="#225" id="225">225</a>
-<a href="#226" id="226">226</a>
-<a href="#227" id="227">227</a>
-<a href="#228" id="228">228</a>
-<a href="#229" id="229">229</a>
-<a href="#230" id="230">230</a>
-<a href="#231" id="231">231</a>
-</pre></div><pre class="rust"><code><span class="comment">// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// &quot;License&quot;); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// &quot;AS IS&quot; BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-
-</span><span class="kw">use </span>std::sync::Arc;
-
-<span class="kw">use </span>async_trait::async_trait;
-<span class="kw">use </span>bytes::Buf;
-<span class="kw">use </span>quick_xml::de;
-<span class="kw">use </span>serde::Deserialize;
-
-<span class="kw">use </span><span class="kw">super</span>::core::WasabiCore;
-<span class="kw">use </span><span class="kw">super</span>::error::parse_error;
-<span class="kw">use </span><span class="kw">crate</span>::raw::<span class="kw-2">*</span>;
-<span class="kw">use </span><span class="kw">crate</span>::EntryMode;
-<span class="kw">use </span><span class="kw">crate</span>::Metadata;
-<span class="kw">use </span><span class="kw">crate</span>::Result;
-
-<span class="kw">pub struct </span>WasabiPager {
-    core: Arc&lt;WasabiCore&gt;,
-
-    path: String,
-    delimiter: String,
-    limit: <span class="prelude-ty">Option</span>&lt;usize&gt;,
-
-    token: String,
-    done: bool,
-}
-
-<span class="kw">impl </span>WasabiPager {
-    <span class="kw">pub fn </span>new(core: Arc&lt;WasabiCore&gt;, path: <span class="kw-2">&amp;</span>str, delimiter: <span class="kw-2">&amp;</span>str, limit: <span class="prelude-ty">Option</span>&lt;usize&gt;) -&gt; <span class="self">Self </span>{
-        <span class="self">Self </span>{
-            core,
-
-            path: path.to_string(),
-            delimiter: delimiter.to_string(),
-            limit,
-
-            token: <span class="string">&quot;&quot;</span>.to_string(),
-            done: <span class="bool-val">false</span>,
-        }
-    }
-}
-
-<span class="attr">#[async_trait]
-</span><span class="kw">impl </span>oio::Page <span class="kw">for </span>WasabiPager {
-    <span class="kw">async fn </span>next(<span class="kw-2">&amp;mut </span><span class="self">self</span>) -&gt; <span class="prelude-ty">Result</span>&lt;<span class="prelude-ty">Option</span>&lt;Vec&lt;oio::Entry&gt;&gt;&gt; {
-        <span class="kw">if </span><span class="self">self</span>.done {
-            <span class="kw">return </span><span class="prelude-val">Ok</span>(<span class="prelude-val">None</span>);
-        }
-
-        <span class="kw">let </span>resp = <span class="self">self
-            </span>.core
-            .list_objects(<span class="kw-2">&amp;</span><span class="self">self</span>.path, <span class="kw-2">&amp;</span><span class="self">self</span>.token, <span class="kw-2">&amp;</span><span class="self">self</span>.delimiter, <span class="self">self</span>.limit)
-            .<span class="kw">await</span><span class="question-mark">?</span>;
-
-        <span class="kw">if </span>resp.status() != http::StatusCode::OK {
-            <span class="kw">return </span><span class="prelude-val">Err</span>(parse_error(resp).<span class="kw">await</span><span class="question-mark">?</span>);
-        }
-
-        <span class="kw">let </span>bs = resp.into_body().bytes().<span class="kw">await</span><span class="question-mark">?</span>;
-
-        <span class="kw">let </span>output: Output = de::from_reader(bs.reader()).map_err(new_xml_deserialize_error)<span class="question-mark">?</span>;
-
-        <span class="comment">// Try our best to check whether this list is done.
-        //
-        // - Check `is_truncated`
-        // - Check `next_continuation_token`
-        // - Check the length of `common_prefixes` and `contents` (very rarely case)
-        </span><span class="self">self</span>.done = <span class="kw">if let </span><span class="prelude-val">Some</span>(is_truncated) = output.is_truncated {
-            !is_truncated
-        } <span class="kw">else if let </span><span class="prelude-val">Some</span>(next_continuation_token) = output.next_continuation_token.as_ref() {
-            next_continuation_token.is_empty()
-        } <span class="kw">else </span>{
-            output.common_prefixes.is_empty() &amp;&amp; output.contents.is_empty()
-        };
-        <span class="self">self</span>.token = output.next_continuation_token.clone().unwrap_or_default();
-
-        <span class="kw">let </span><span class="kw-2">mut </span>entries = Vec::with_capacity(output.common_prefixes.len() + output.contents.len());
-
-        <span class="kw">for </span>prefix <span class="kw">in </span>output.common_prefixes {
-            <span class="kw">let </span>de = oio::Entry::new(
-                <span class="kw-2">&amp;</span>build_rel_path(<span class="kw-2">&amp;</span><span class="self">self</span>.core.root, <span class="kw-2">&amp;</span>prefix.prefix),
-                Metadata::new(EntryMode::DIR),
-            );
-
-            entries.push(de);
-        }
-
-        <span class="kw">for </span>object <span class="kw">in </span>output.contents {
-            <span class="comment">// s3 could return the dir itself in contents
-            // which endswith `/`.
-            // We should ignore them.
-            </span><span class="kw">if </span>object.key.ends_with(<span class="string">&#39;/&#39;</span>) {
-                <span class="kw">continue</span>;
-            }
-
-            <span class="kw">let </span><span class="kw-2">mut </span>meta = Metadata::new(EntryMode::FILE);
-
-            meta.set_etag(<span class="kw-2">&amp;</span>object.etag);
-            meta.set_content_md5(object.etag.trim_matches(<span class="string">&#39;&quot;&#39;</span>));
-            meta.set_content_length(object.size);
-
-            <span class="comment">// object.last_modified provides more precious time that contains
-            // nanosecond, let&#39;s trim them.
-            </span>meta.set_last_modified(parse_datetime_from_rfc3339(object.last_modified.as_str())<span class="question-mark">?</span>);
-
-            <span class="kw">let </span>de = oio::Entry::new(<span class="kw-2">&amp;</span>build_rel_path(<span class="kw-2">&amp;</span><span class="self">self</span>.core.root, <span class="kw-2">&amp;</span>object.key), meta);
-
-            entries.push(de);
-        }
-
-        <span class="prelude-val">Ok</span>(<span class="prelude-val">Some</span>(entries))
-    }
-}
-
-<span class="doccomment">/// Output of ListBucket/ListObjects.
-///
-/// ## Note
-///
-/// Use `Option` in `is_truncated` and `next_continuation_token` to make
-/// the behavior more clear so that we can be compatible to more s3 services.
-///
-/// And enable `serde(default)` so that we can keep going even when some field
-/// is not exist.
-</span><span class="attr">#[derive(Default, Debug, Deserialize)]
-#[serde(default, rename_all = <span class="string">&quot;PascalCase&quot;</span>)]
-</span><span class="kw">struct </span>Output {
-    is_truncated: <span class="prelude-ty">Option</span>&lt;bool&gt;,
-    next_continuation_token: <span class="prelude-ty">Option</span>&lt;String&gt;,
-    common_prefixes: Vec&lt;OutputCommonPrefix&gt;,
-    contents: Vec&lt;OutputContent&gt;,
-}
-
-<span class="attr">#[derive(Default, Debug, Eq, PartialEq, Deserialize)]
-#[serde(rename_all = <span class="string">&quot;PascalCase&quot;</span>)]
-</span><span class="kw">struct </span>OutputContent {
-    key: String,
-    size: u64,
-    last_modified: String,
-    <span class="attr">#[serde(rename = <span class="string">&quot;ETag&quot;</span>)]
-    </span>etag: String,
-}
-
-<span class="attr">#[derive(Default, Debug, Eq, PartialEq, Deserialize)]
-#[serde(rename_all = <span class="string">&quot;PascalCase&quot;</span>)]
-</span><span class="kw">struct </span>OutputCommonPrefix {
-    prefix: String,
-}
-
-<span class="attr">#[cfg(test)]
-</span><span class="kw">mod </span>tests {
-    <span class="kw">use super</span>::<span class="kw-2">*</span>;
-
-    <span class="attr">#[test]
-    </span><span class="kw">fn </span>test_parse_list_output() {
-        <span class="kw">let </span>bs = bytes::Bytes::from(
-            <span class="string">r#&quot;&lt;ListBucketResult xmlns=&quot;http://s3.amazonaws.com/doc/2006-03-01/&quot;&gt;
-  &lt;Name&gt;example-bucket&lt;/Name&gt;
-  &lt;Prefix&gt;photos/2006/&lt;/Prefix&gt;
-  &lt;KeyCount&gt;3&lt;/KeyCount&gt;
-  &lt;MaxKeys&gt;1000&lt;/MaxKeys&gt;
-  &lt;Delimiter&gt;/&lt;/Delimiter&gt;
-  &lt;IsTruncated&gt;false&lt;/IsTruncated&gt;
-  &lt;Contents&gt;
-    &lt;Key&gt;photos/2006&lt;/Key&gt;
-    &lt;LastModified&gt;2016-04-30T23:51:29.000Z&lt;/LastModified&gt;
-    &lt;ETag&gt;&quot;d41d8cd98f00b204e9800998ecf8427e&quot;&lt;/ETag&gt;
-    &lt;Size&gt;56&lt;/Size&gt;
-    &lt;StorageClass&gt;STANDARD&lt;/StorageClass&gt;
-  &lt;/Contents&gt;
-  &lt;Contents&gt;
-    &lt;Key&gt;photos/2007&lt;/Key&gt;
-    &lt;LastModified&gt;2016-04-30T23:51:29.000Z&lt;/LastModified&gt;
-    &lt;ETag&gt;&quot;d41d8cd98f00b204e9800998ecf8427e&quot;&lt;/ETag&gt;
-    &lt;Size&gt;100&lt;/Size&gt;
-    &lt;StorageClass&gt;STANDARD&lt;/StorageClass&gt;
-  &lt;/Contents&gt;
-
-  &lt;CommonPrefixes&gt;
-    &lt;Prefix&gt;photos/2006/February/&lt;/Prefix&gt;
-  &lt;/CommonPrefixes&gt;
-  &lt;CommonPrefixes&gt;
-    &lt;Prefix&gt;photos/2006/January/&lt;/Prefix&gt;
-  &lt;/CommonPrefixes&gt;
-&lt;/ListBucketResult&gt;&quot;#</span>,
-        );
-
-        <span class="kw">let </span>out: Output = de::from_reader(bs.reader()).expect(<span class="string">&quot;must success&quot;</span>);
-
-        <span class="macro">assert!</span>(!out.is_truncated.unwrap());
-        <span class="macro">assert!</span>(out.next_continuation_token.is_none());
-        <span class="macro">assert_eq!</span>(
-            out.common_prefixes
-                .iter()
-                .map(|v| v.prefix.clone())
-                .collect::&lt;Vec&lt;String&gt;&gt;(),
-            <span class="macro">vec!</span>[<span class="string">&quot;photos/2006/February/&quot;</span>, <span class="string">&quot;photos/2006/January/&quot;</span>]
-        );
-        <span class="macro">assert_eq!</span>(
-            out.contents,
-            <span class="macro">vec!</span>[
-                OutputContent {
-                    key: <span class="string">&quot;photos/2006&quot;</span>.to_string(),
-                    size: <span class="number">56</span>,
-                    etag: <span class="string">&quot;\&quot;d41d8cd98f00b204e9800998ecf8427e\&quot;&quot;</span>.to_string(),
-                    last_modified: <span class="string">&quot;2016-04-30T23:51:29.000Z&quot;</span>.to_string(),
-                },
-                OutputContent {
-                    key: <span class="string">&quot;photos/2007&quot;</span>.to_string(),
-                    size: <span class="number">100</span>,
-                    last_modified: <span class="string">&quot;2016-04-30T23:51:29.000Z&quot;</span>.to_string(),
-                    etag: <span class="string">&quot;\&quot;d41d8cd98f00b204e9800998ecf8427e\&quot;&quot;</span>.to_string(),
-                }
-            ]
-        )
-    }
-}
-</code></pre></div></section></main></body></html>
\ No newline at end of file
diff --git a/docs/rust/src/opendal/services/wasabi/writer.rs.html b/docs/rust/src/opendal/services/wasabi/writer.rs.html
deleted file mode 100644
index f81ff475b..000000000
--- a/docs/rust/src/opendal/services/wasabi/writer.rs.html
+++ /dev/null
@@ -1,131 +0,0 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `core/src/services/wasabi/writer.rs`."><title>writer.rs - source</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" cros [...]
-<a href="#2" id="2">2</a>
-<a href="#3" id="3">3</a>
-<a href="#4" id="4">4</a>
-<a href="#5" id="5">5</a>
-<a href="#6" id="6">6</a>
-<a href="#7" id="7">7</a>
-<a href="#8" id="8">8</a>
-<a href="#9" id="9">9</a>
-<a href="#10" id="10">10</a>
-<a href="#11" id="11">11</a>
-<a href="#12" id="12">12</a>
-<a href="#13" id="13">13</a>
-<a href="#14" id="14">14</a>
-<a href="#15" id="15">15</a>
-<a href="#16" id="16">16</a>
-<a href="#17" id="17">17</a>
-<a href="#18" id="18">18</a>
-<a href="#19" id="19">19</a>
-<a href="#20" id="20">20</a>
-<a href="#21" id="21">21</a>
-<a href="#22" id="22">22</a>
-<a href="#23" id="23">23</a>
-<a href="#24" id="24">24</a>
-<a href="#25" id="25">25</a>
-<a href="#26" id="26">26</a>
-<a href="#27" id="27">27</a>
-<a href="#28" id="28">28</a>
-<a href="#29" id="29">29</a>
-<a href="#30" id="30">30</a>
-<a href="#31" id="31">31</a>
-<a href="#32" id="32">32</a>
-<a href="#33" id="33">33</a>
-<a href="#34" id="34">34</a>
-<a href="#35" id="35">35</a>
-<a href="#36" id="36">36</a>
-<a href="#37" id="37">37</a>
-<a href="#38" id="38">38</a>
-<a href="#39" id="39">39</a>
-<a href="#40" id="40">40</a>
-<a href="#41" id="41">41</a>
-<a href="#42" id="42">42</a>
-<a href="#43" id="43">43</a>
-<a href="#44" id="44">44</a>
-<a href="#45" id="45">45</a>
-<a href="#46" id="46">46</a>
-<a href="#47" id="47">47</a>
-<a href="#48" id="48">48</a>
-<a href="#49" id="49">49</a>
-<a href="#50" id="50">50</a>
-<a href="#51" id="51">51</a>
-<a href="#52" id="52">52</a>
-<a href="#53" id="53">53</a>
-<a href="#54" id="54">54</a>
-<a href="#55" id="55">55</a>
-<a href="#56" id="56">56</a>
-<a href="#57" id="57">57</a>
-<a href="#58" id="58">58</a>
-<a href="#59" id="59">59</a>
-<a href="#60" id="60">60</a>
-<a href="#61" id="61">61</a>
-<a href="#62" id="62">62</a>
-<a href="#63" id="63">63</a>
-<a href="#64" id="64">64</a>
-<a href="#65" id="65">65</a>
-</pre></div><pre class="rust"><code><span class="comment">// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// &quot;License&quot;); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// &quot;AS IS&quot; BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-
-</span><span class="kw">use </span>std::sync::Arc;
-
-<span class="kw">use </span>async_trait::async_trait;
-<span class="kw">use </span>http::StatusCode;
-
-<span class="kw">use </span><span class="kw">super</span>::core::<span class="kw-2">*</span>;
-<span class="kw">use </span><span class="kw">super</span>::error::parse_error;
-<span class="kw">use </span><span class="kw">crate</span>::raw::oio::WriteBuf;
-<span class="kw">use </span><span class="kw">crate</span>::raw::<span class="kw-2">*</span>;
-<span class="kw">use crate</span>::<span class="kw-2">*</span>;
-
-<span class="kw">pub struct </span>WasabiWriter {
-    core: Arc&lt;WasabiCore&gt;,
-
-    op: OpWrite,
-    path: String,
-}
-
-<span class="kw">impl </span>WasabiWriter {
-    <span class="kw">pub fn </span>new(core: Arc&lt;WasabiCore&gt;, op: OpWrite, path: String) -&gt; <span class="self">Self </span>{
-        WasabiWriter { core, op, path }
-    }
-}
-
-<span class="attr">#[async_trait]
-</span><span class="kw">impl </span>oio::OneShotWrite <span class="kw">for </span>WasabiWriter {
-    <span class="kw">async fn </span>write_once(<span class="kw-2">&amp;</span><span class="self">self</span>, bs: <span class="kw-2">&amp;</span><span class="kw">dyn </span>WriteBuf) -&gt; <span class="prelude-ty">Result</span>&lt;()&gt; {
-        <span class="kw">let </span>bs = oio::ChunkedBytes::from_vec(bs.vectored_bytes(bs.remaining()));
-
-        <span class="kw">let </span>resp = <span class="self">self
-            </span>.core
-            .put_object(
-                <span class="kw-2">&amp;</span><span class="self">self</span>.path,
-                <span class="prelude-val">Some</span>(bs.len()),
-                <span class="kw-2">&amp;</span><span class="self">self</span>.op,
-                AsyncBody::ChunkedBytes(bs),
-            )
-            .<span class="kw">await</span><span class="question-mark">?</span>;
-
-        <span class="kw">match </span>resp.status() {
-            StatusCode::CREATED | StatusCode::OK =&gt; {
-                resp.into_body().consume().<span class="kw">await</span><span class="question-mark">?</span>;
-                <span class="prelude-val">Ok</span>(())
-            }
-            <span class="kw">_ </span>=&gt; <span class="prelude-val">Err</span>(parse_error(resp).<span class="kw">await</span><span class="question-mark">?</span>),
-        }
-    }
-}
-</code></pre></div></section></main></body></html>
\ No newline at end of file
diff --git a/docs/rust/src/opendal/types/operator/builder.rs.html b/docs/rust/src/opendal/types/operator/builder.rs.html
index 4bc5b33b9..9a87ec5d6 100644
--- a/docs/rust/src/opendal/types/operator/builder.rs.html
+++ b/docs/rust/src/opendal/types/operator/builder.rs.html
@@ -391,8 +391,6 @@
 <a href="#391" id="391">391</a>
 <a href="#392" id="392">392</a>
 <a href="#393" id="393">393</a>
-<a href="#394" id="394">394</a>
-<a href="#395" id="395">395</a>
 </pre></div><pre class="rust"><code><span class="comment">// Licensed to the Apache Software Foundation (ASF) under one
 // or more contributor license agreements.  See the NOTICE file
 // distributed with this work for additional information
@@ -628,8 +626,6 @@
             </span>Scheme::Tikv =&gt; <span class="self">Self</span>::from_map::&lt;services::Tikv&gt;(map)<span class="question-mark">?</span>.finish(),
             <span class="attr">#[cfg(feature = <span class="string">&quot;services-vercel-artifacts&quot;</span>)]
             </span>Scheme::VercelArtifacts =&gt; <span class="self">Self</span>::from_map::&lt;services::VercelArtifacts&gt;(map)<span class="question-mark">?</span>.finish(),
-            <span class="attr">#[cfg(feature = <span class="string">&quot;services-wasabi&quot;</span>)]
-            </span>Scheme::Wasabi =&gt; <span class="self">Self</span>::from_map::&lt;services::Wasabi&gt;(map)<span class="question-mark">?</span>.finish(),
             <span class="attr">#[cfg(feature = <span class="string">&quot;services-webdav&quot;</span>)]
             </span>Scheme::Webdav =&gt; <span class="self">Self</span>::from_map::&lt;services::Webdav&gt;(map)<span class="question-mark">?</span>.finish(),
             <span class="attr">#[cfg(feature = <span class="string">&quot;services-webhdfs&quot;</span>)]
diff --git a/docs/rust/src/opendal/types/scheme.rs.html b/docs/rust/src/opendal/types/scheme.rs.html
index 26db5e5ce..839d48444 100644
--- a/docs/rust/src/opendal/types/scheme.rs.html
+++ b/docs/rust/src/opendal/types/scheme.rs.html
@@ -378,12 +378,6 @@
 <a href="#378" id="378">378</a>
 <a href="#379" id="379">379</a>
 <a href="#380" id="380">380</a>
-<a href="#381" id="381">381</a>
-<a href="#382" id="382">382</a>
-<a href="#383" id="383">383</a>
-<a href="#384" id="384">384</a>
-<a href="#385" id="385">385</a>
-<a href="#386" id="386">386</a>
 </pre></div><pre class="rust"><code><span class="comment">// Licensed to the Apache Software Foundation (ASF) under one
 // or more contributor license agreements.  See the NOTICE file
 // distributed with this work for additional information
@@ -499,8 +493,6 @@
     </span>Supabase,
     <span class="doccomment">/// [Vercel Artifacts][crate::services::VercelArtifacts]: Vercel Artifacts service, as known as Vercel Remote Caching.
     </span>VercelArtifacts,
-    <span class="doccomment">/// [wasabi][crate::services::Wasabi]: Wasabi service
-    </span>Wasabi,
     <span class="doccomment">/// [webdav][crate::services::Webdav]: WebDAV support.
     </span>Webdav,
     <span class="doccomment">/// [webhdfs][crate::services::Webhdfs]: WebHDFS RESTful API Services
@@ -623,8 +615,6 @@
             </span>Scheme::Tikv,
             <span class="attr">#[cfg(feature = <span class="string">&quot;services-vercel-artifacts&quot;</span>)]
             </span>Scheme::VercelArtifacts,
-            <span class="attr">#[cfg(feature = <span class="string">&quot;services-wasabi&quot;</span>)]
-            </span>Scheme::Wasabi,
             <span class="attr">#[cfg(feature = <span class="string">&quot;services-webdav&quot;</span>)]
             </span>Scheme::Webdav,
             <span class="attr">#[cfg(feature = <span class="string">&quot;services-webhdfs&quot;</span>)]
@@ -699,7 +689,6 @@
             <span class="string">&quot;supabase&quot; </span>=&gt; <span class="prelude-val">Ok</span>(Scheme::Supabase),
             <span class="string">&quot;oss&quot; </span>=&gt; <span class="prelude-val">Ok</span>(Scheme::Oss),
             <span class="string">&quot;vercel_artifacts&quot; </span>=&gt; <span class="prelude-val">Ok</span>(Scheme::VercelArtifacts),
-            <span class="string">&quot;wasabi&quot; </span>=&gt; <span class="prelude-val">Ok</span>(Scheme::Wasabi),
             <span class="string">&quot;webdav&quot; </span>=&gt; <span class="prelude-val">Ok</span>(Scheme::Webdav),
             <span class="string">&quot;webhdfs&quot; </span>=&gt; <span class="prelude-val">Ok</span>(Scheme::Webhdfs),
             <span class="string">&quot;tikv&quot; </span>=&gt; <span class="prelude-val">Ok</span>(Scheme::Tikv),
@@ -752,7 +741,6 @@
             Scheme::Supabase =&gt; <span class="string">&quot;supabase&quot;</span>,
             Scheme::VercelArtifacts =&gt; <span class="string">&quot;vercel_artifacts&quot;</span>,
             Scheme::Oss =&gt; <span class="string">&quot;oss&quot;</span>,
-            Scheme::Wasabi =&gt; <span class="string">&quot;wasabi&quot;</span>,
             Scheme::Webdav =&gt; <span class="string">&quot;webdav&quot;</span>,
             Scheme::Webhdfs =&gt; <span class="string">&quot;webhdfs&quot;</span>,
             Scheme::Redb =&gt; <span class="string">&quot;redb&quot;</span>,
diff --git a/docs/services/atomicserver/index.html b/docs/services/atomicserver/index.html
index 8b8bdb1d8..1e1529062 100644
--- a/docs/services/atomicserver/index.html
+++ b/docs/services/atomicserver/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">AtomicServer | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/services/atomicserver"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="cu [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.e8c8dc66.js" as="script">
-<link rel="preload" href="/assets/js/main.b5b973fb.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.23901fca.js" as="script">
+<link rel="preload" href="/assets/js/main.b461bd80.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.e8c8dc66.js"></script>
-<script src="/assets/js/main.b5b973fb.js"></script>
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
+<script src="/assets/js/runtime~main.23901fca.js"></script>
+<script src="/assets/js/main.b461bd80.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/services/azblob/index.html b/docs/services/azblob/index.html
index b4afdc820..1f8760444 100644
--- a/docs/services/azblob/index.html
+++ b/docs/services/azblob/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">Azblob | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/services/azblob"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.e8c8dc66.js" as="script">
-<link rel="preload" href="/assets/js/main.b5b973fb.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.23901fca.js" as="script">
+<link rel="preload" href="/assets/js/main.b461bd80.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.e8c8dc66.js"></script>
-<script src="/assets/js/main.b5b973fb.js"></script>
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
+<script src="/assets/js/runtime~main.23901fca.js"></script>
+<script src="/assets/js/main.b461bd80.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/services/azdls/index.html b/docs/services/azdls/index.html
index a2f448e48..83df0ae62 100644
--- a/docs/services/azdls/index.html
+++ b/docs/services/azdls/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">Azdls | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/services/azdls"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta d [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.e8c8dc66.js" as="script">
-<link rel="preload" href="/assets/js/main.b5b973fb.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.23901fca.js" as="script">
+<link rel="preload" href="/assets/js/main.b461bd80.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.e8c8dc66.js"></script>
-<script src="/assets/js/main.b5b973fb.js"></script>
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
+<script src="/assets/js/runtime~main.23901fca.js"></script>
+<script src="/assets/js/main.b461bd80.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/services/cacache/index.html b/docs/services/cacache/index.html
index 9056b9d41..ff5b5d409 100644
--- a/docs/services/cacache/index.html
+++ b/docs/services/cacache/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">Cacache | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/services/cacache"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><me [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.e8c8dc66.js" as="script">
-<link rel="preload" href="/assets/js/main.b5b973fb.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.23901fca.js" as="script">
+<link rel="preload" href="/assets/js/main.b461bd80.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.e8c8dc66.js"></script>
-<script src="/assets/js/main.b5b973fb.js"></script>
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
+<script src="/assets/js/runtime~main.23901fca.js"></script>
+<script src="/assets/js/main.b461bd80.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/services/cos/index.html b/docs/services/cos/index.html
index e18d9cacd..e6e97db90 100644
--- a/docs/services/cos/index.html
+++ b/docs/services/cos/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">COS | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/services/cos"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data- [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.e8c8dc66.js" as="script">
-<link rel="preload" href="/assets/js/main.b5b973fb.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.23901fca.js" as="script">
+<link rel="preload" href="/assets/js/main.b461bd80.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.e8c8dc66.js"></script>
-<script src="/assets/js/main.b5b973fb.js"></script>
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
+<script src="/assets/js/runtime~main.23901fca.js"></script>
+<script src="/assets/js/main.b461bd80.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/services/d1/index.html b/docs/services/d1/index.html
index 7d3bfbd01..aa5f5007c 100644
--- a/docs/services/d1/index.html
+++ b/docs/services/d1/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">D1 | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/services/d1"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data-rh [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.e8c8dc66.js" as="script">
-<link rel="preload" href="/assets/js/main.b5b973fb.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.23901fca.js" as="script">
+<link rel="preload" href="/assets/js/main.b461bd80.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.e8c8dc66.js"></script>
-<script src="/assets/js/main.b5b973fb.js"></script>
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
+<script src="/assets/js/runtime~main.23901fca.js"></script>
+<script src="/assets/js/main.b461bd80.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/services/dashmap/index.html b/docs/services/dashmap/index.html
index 0df3bd4ed..8aa43792d 100644
--- a/docs/services/dashmap/index.html
+++ b/docs/services/dashmap/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">DashMap | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/services/dashmap"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><me [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.e8c8dc66.js" as="script">
-<link rel="preload" href="/assets/js/main.b5b973fb.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.23901fca.js" as="script">
+<link rel="preload" href="/assets/js/main.b461bd80.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.e8c8dc66.js"></script>
-<script src="/assets/js/main.b5b973fb.js"></script>
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
+<script src="/assets/js/runtime~main.23901fca.js"></script>
+<script src="/assets/js/main.b461bd80.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/services/dropbox/index.html b/docs/services/dropbox/index.html
index dac84021d..124d900be 100644
--- a/docs/services/dropbox/index.html
+++ b/docs/services/dropbox/index.html
@@ -5,18 +5,18 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">Dropbox | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/services/dropbox"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><me [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.e8c8dc66.js" as="script">
-<link rel="preload" href="/assets/js/main.b5b973fb.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.23901fca.js" as="script">
+<link rel="preload" href="/assets/js/main.b461bd80.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
 Please notice its expiration.</li></ul><h4 class="anchor anchorWithStickyNavbar_LWe7" id="or-provide-client-id-and-client-secret-and-refresh-token-long-term">Or provide Client ID and Client Secret and refresh token (Long Term)<a href="#or-provide-client-id-and-client-secret-and-refresh-token-long-term" class="hash-link" aria-label="Direct link to Or provide Client ID and Client Secret and refresh token (Long Term)" title="Direct link to Or provide Client ID and Client Secret and refresh  [...]
 please provide the following fields:</p><ul><li><code>refresh_token</code>: set the refresh_token for dropbox api</li><li><code>client_id</code>: set the client_id for dropbox api</li><li><code>client_secret</code>: set the client_secret for dropbox api</li></ul><p>OpenDAL is a library, it cannot do the first step of OAuth2 for you.
 You need to get authorization code from user by calling Dropbox&#x27;s authorize url
 and exchange it for refresh token.</p><p>Please refer to <a href="https://www.dropbox.com/developers/reference/oauth-guide" target="_blank" rel="noopener noreferrer">Dropbox OAuth2 Guide</a>
-for more information.</p><p>You can refer to <!-- -->[<code>DropboxBuilder</code>]<!-- -->&#x27;s docs for more information</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="example">Example<a href="#example" class="hash-link" aria-label="Direct link to Example" title="Direct link to Example">​</a></h2><h3 class="anchor anchorWithStickyNavbar_LWe7" id="via-builder">Via Builder<a href="#via-builder" class="hash-link" aria-label="Direct link to Via Builder" title="Direct link to Via Bu [...]
-<script src="/assets/js/runtime~main.e8c8dc66.js"></script>
-<script src="/assets/js/main.b5b973fb.js"></script>
+for more information.</p><p>You can refer to <!-- -->[<code>DropboxBuilder</code>]<!-- -->&#x27;s docs for more information</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="example">Example<a href="#example" class="hash-link" aria-label="Direct link to Example" title="Direct link to Example">​</a></h2><h3 class="anchor anchorWithStickyNavbar_LWe7" id="via-builder">Via Builder<a href="#via-builder" class="hash-link" aria-label="Direct link to Via Builder" title="Direct link to Via Bu [...]
+<script src="/assets/js/runtime~main.23901fca.js"></script>
+<script src="/assets/js/main.b461bd80.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/services/etcd/index.html b/docs/services/etcd/index.html
index 9f65f6034..4388c8c1f 100644
--- a/docs/services/etcd/index.html
+++ b/docs/services/etcd/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">Etcd | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/services/etcd"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta dat [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.e8c8dc66.js" as="script">
-<link rel="preload" href="/assets/js/main.b5b973fb.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.23901fca.js" as="script">
+<link rel="preload" href="/assets/js/main.b461bd80.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.e8c8dc66.js"></script>
-<script src="/assets/js/main.b5b973fb.js"></script>
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
+<script src="/assets/js/runtime~main.23901fca.js"></script>
+<script src="/assets/js/main.b461bd80.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/services/foundationdb/index.html b/docs/services/foundationdb/index.html
index 586f8263d..747765112 100644
--- a/docs/services/foundationdb/index.html
+++ b/docs/services/foundationdb/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">FoundationDB | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/services/foundationdb"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="cu [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.e8c8dc66.js" as="script">
-<link rel="preload" href="/assets/js/main.b5b973fb.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.23901fca.js" as="script">
+<link rel="preload" href="/assets/js/main.b461bd80.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.e8c8dc66.js"></script>
-<script src="/assets/js/main.b5b973fb.js"></script>
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
+<script src="/assets/js/runtime~main.23901fca.js"></script>
+<script src="/assets/js/main.b461bd80.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/services/fs/index.html b/docs/services/fs/index.html
index 6a6adc76d..ed1b8f94d 100644
--- a/docs/services/fs/index.html
+++ b/docs/services/fs/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">Fs | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/services/fs"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data-rh [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.e8c8dc66.js" as="script">
-<link rel="preload" href="/assets/js/main.b5b973fb.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.23901fca.js" as="script">
+<link rel="preload" href="/assets/js/main.b461bd80.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.e8c8dc66.js"></script>
-<script src="/assets/js/main.b5b973fb.js"></script>
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
+<script src="/assets/js/runtime~main.23901fca.js"></script>
+<script src="/assets/js/main.b461bd80.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/services/ftp/index.html b/docs/services/ftp/index.html
index 483c69d3f..ec5f4bb33 100644
--- a/docs/services/ftp/index.html
+++ b/docs/services/ftp/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">FTP | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/services/ftp"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data- [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.e8c8dc66.js" as="script">
-<link rel="preload" href="/assets/js/main.b5b973fb.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.23901fca.js" as="script">
+<link rel="preload" href="/assets/js/main.b461bd80.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.e8c8dc66.js"></script>
-<script src="/assets/js/main.b5b973fb.js"></script>
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
+<script src="/assets/js/runtime~main.23901fca.js"></script>
+<script src="/assets/js/main.b461bd80.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/services/gcs/index.html b/docs/services/gcs/index.html
index 5399cb147..73b642124 100644
--- a/docs/services/gcs/index.html
+++ b/docs/services/gcs/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">Gcs | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/services/gcs"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data- [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.e8c8dc66.js" as="script">
-<link rel="preload" href="/assets/js/main.b5b973fb.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.23901fca.js" as="script">
+<link rel="preload" href="/assets/js/main.b461bd80.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.e8c8dc66.js"></script>
-<script src="/assets/js/main.b5b973fb.js"></script>
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
+<script src="/assets/js/runtime~main.23901fca.js"></script>
+<script src="/assets/js/main.b461bd80.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/services/gdrive/index.html b/docs/services/gdrive/index.html
index 0fcc362ac..a9a5a0a48 100644
--- a/docs/services/gdrive/index.html
+++ b/docs/services/gdrive/index.html
@@ -5,19 +5,19 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">Gdrive | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/services/gdrive"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.e8c8dc66.js" as="script">
-<link rel="preload" href="/assets/js/main.b5b973fb.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.23901fca.js" as="script">
+<link rel="preload" href="/assets/js/main.b461bd80.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
 Please notice its expiration.</li></ul><h4 class="anchor anchorWithStickyNavbar_LWe7" id="or-provide-client-id-and-client-secret-and-refresh-token-long-term">Or provide Client ID and Client Secret and refresh token (Long Term)<a href="#or-provide-client-id-and-client-secret-and-refresh-token-long-term" class="hash-link" aria-label="Direct link to Or provide Client ID and Client Secret and refresh token (Long Term)" title="Direct link to Or provide Client ID and Client Secret and refresh  [...]
 please provide the following fields:</p><ul><li><code>refresh_token</code>: set the refresh_token for google drive api</li><li><code>client_id</code>: set the client_id for google drive api</li><li><code>client_secret</code>: set the client_secret for google drive api</li></ul><p>OpenDAL is a library, it cannot do the first step of OAuth2 for you.
 You need to get authorization code from user by calling GoogleDrive&#x27;s authorize url
 and exchange it for refresh token.</p><p>Make sure you have enabled Google Drive API in your Google Cloud Console.
 And your OAuth scope contains <code>https://www.googleapis.com/auth/drive</code>.</p><p>Please refer to <a href="https://developers.google.com/identity/protocols/oauth2/" target="_blank" rel="noopener noreferrer">GoogleDrive OAuth2 Flow</a>
-for more information.</p><p>You can refer to <!-- -->[<code>GdriveBuilder</code>]<!-- -->&#x27;s docs for more information</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="example">Example<a href="#example" class="hash-link" aria-label="Direct link to Example" title="Direct link to Example">​</a></h2><h3 class="anchor anchorWithStickyNavbar_LWe7" id="via-builder">Via Builder<a href="#via-builder" class="hash-link" aria-label="Direct link to Via Builder" title="Direct link to Via Bui [...]
-<script src="/assets/js/runtime~main.e8c8dc66.js"></script>
-<script src="/assets/js/main.b5b973fb.js"></script>
+for more information.</p><p>You can refer to <!-- -->[<code>GdriveBuilder</code>]<!-- -->&#x27;s docs for more information</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="example">Example<a href="#example" class="hash-link" aria-label="Direct link to Example" title="Direct link to Example">​</a></h2><h3 class="anchor anchorWithStickyNavbar_LWe7" id="via-builder">Via Builder<a href="#via-builder" class="hash-link" aria-label="Direct link to Via Builder" title="Direct link to Via Bui [...]
+<script src="/assets/js/runtime~main.23901fca.js"></script>
+<script src="/assets/js/main.b461bd80.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/services/ghac/index.html b/docs/services/ghac/index.html
index 02481eab3..2785a46e1 100644
--- a/docs/services/ghac/index.html
+++ b/docs/services/ghac/index.html
@@ -5,16 +5,16 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">GHAC | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/services/ghac"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta dat [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.e8c8dc66.js" as="script">
-<link rel="preload" href="/assets/js/main.b5b973fb.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.23901fca.js" as="script">
+<link rel="preload" href="/assets/js/main.b461bd80.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
 configure the URL and credentials, or that the following environment has been setup correctly:</p><ul><li><code>ACTIONS_CACHE_URL</code></li><li><code>ACTIONS_RUNTIME_TOKEN</code></li></ul><p>They can be exposed by following action:</p><div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar"><code cla [...]
 We provide a <code>enable_create_simulation()</code> to support this operation but may result unexpected side effects.</p><p>Also, <code>ghac</code> is a cache service which means the data store inside could
-be automatically evicted at any time.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="configuration">Configuration<a href="#configuration" class="hash-link" aria-label="Direct link to Configuration" title="Direct link to Configuration">​</a></h2><ul><li><code>root</code>: Set the work dir for backend.</li></ul><p>Refer to <!-- -->[<code>GhacBuilder</code>]<!-- -->&#x27;s public API docs for more information.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="example">Example<a h [...]
-<script src="/assets/js/runtime~main.e8c8dc66.js"></script>
-<script src="/assets/js/main.b5b973fb.js"></script>
+be automatically evicted at any time.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="configuration">Configuration<a href="#configuration" class="hash-link" aria-label="Direct link to Configuration" title="Direct link to Configuration">​</a></h2><ul><li><code>root</code>: Set the work dir for backend.</li></ul><p>Refer to <!-- -->[<code>GhacBuilder</code>]<!-- -->&#x27;s public API docs for more information.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="example">Example<a h [...]
+<script src="/assets/js/runtime~main.23901fca.js"></script>
+<script src="/assets/js/main.b461bd80.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/services/hdfs/index.html b/docs/services/hdfs/index.html
index 4dd378d07..b926e2c54 100644
--- a/docs/services/hdfs/index.html
+++ b/docs/services/hdfs/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">HDFS | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/services/hdfs"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta dat [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.e8c8dc66.js" as="script">
-<link rel="preload" href="/assets/js/main.b5b973fb.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.23901fca.js" as="script">
+<link rel="preload" href="/assets/js/main.b461bd80.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.e8c8dc66.js"></script>
-<script src="/assets/js/main.b5b973fb.js"></script>
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
+<script src="/assets/js/runtime~main.23901fca.js"></script>
+<script src="/assets/js/main.b461bd80.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/services/http/index.html b/docs/services/http/index.html
index 655f66c08..6786c1901 100644
--- a/docs/services/http/index.html
+++ b/docs/services/http/index.html
@@ -5,14 +5,14 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">HTTP | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/services/http"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta dat [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.e8c8dc66.js" as="script">
-<link rel="preload" href="/assets/js/main.b5b973fb.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.23901fca.js" as="script">
+<link rel="preload" href="/assets/js/main.b461bd80.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-HTTP Server like nginx, caddy.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="configuration">Configuration<a href="#configuration" class="hash-link" aria-label="Direct link to Configuration" title="Direct link to Configuration">​</a></h2><ul><li><code>endpoint</code>: set the endpoint for http</li><li><code>root</code>: Set the work directory for backend</li></ul><p>You can refer to <!-- -->[<code>HttpBuilder</code>]<!-- -->&#x27;s docs for more information</p><h2 class="anchor an [...]
-<script src="/assets/js/runtime~main.e8c8dc66.js"></script>
-<script src="/assets/js/main.b5b973fb.js"></script>
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
+HTTP Server like nginx, caddy.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="configuration">Configuration<a href="#configuration" class="hash-link" aria-label="Direct link to Configuration" title="Direct link to Configuration">​</a></h2><ul><li><code>endpoint</code>: set the endpoint for http</li><li><code>root</code>: Set the work directory for backend</li></ul><p>You can refer to <!-- -->[<code>HttpBuilder</code>]<!-- -->&#x27;s docs for more information</p><h2 class="anchor an [...]
+<script src="/assets/js/runtime~main.23901fca.js"></script>
+<script src="/assets/js/main.b461bd80.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/services/ipfs/index.html b/docs/services/ipfs/index.html
index e72901069..8e2b2755b 100644
--- a/docs/services/ipfs/index.html
+++ b/docs/services/ipfs/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">IPFS | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/services/ipfs"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta dat [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.e8c8dc66.js" as="script">
-<link rel="preload" href="/assets/js/main.b5b973fb.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.23901fca.js" as="script">
+<link rel="preload" href="/assets/js/main.b461bd80.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.e8c8dc66.js"></script>
-<script src="/assets/js/main.b5b973fb.js"></script>
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
+<script src="/assets/js/runtime~main.23901fca.js"></script>
+<script src="/assets/js/main.b461bd80.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/services/ipmfs/index.html b/docs/services/ipmfs/index.html
index 76ff56f61..be5ec3134 100644
--- a/docs/services/ipmfs/index.html
+++ b/docs/services/ipmfs/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">IPMFS | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/services/ipmfs"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta d [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.e8c8dc66.js" as="script">
-<link rel="preload" href="/assets/js/main.b5b973fb.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.23901fca.js" as="script">
+<link rel="preload" href="/assets/js/main.b461bd80.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.e8c8dc66.js"></script>
-<script src="/assets/js/main.b5b973fb.js"></script>
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
+<script src="/assets/js/runtime~main.23901fca.js"></script>
+<script src="/assets/js/main.b461bd80.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/services/libsql/index.html b/docs/services/libsql/index.html
index 7b1c170d6..f3251fdea 100644
--- a/docs/services/libsql/index.html
+++ b/docs/services/libsql/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">LibSQL | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/services/libsql"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.e8c8dc66.js" as="script">
-<link rel="preload" href="/assets/js/main.b5b973fb.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.23901fca.js" as="script">
+<link rel="preload" href="/assets/js/main.b461bd80.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.e8c8dc66.js"></script>
-<script src="/assets/js/main.b5b973fb.js"></script>
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
+<script src="/assets/js/runtime~main.23901fca.js"></script>
+<script src="/assets/js/main.b461bd80.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/services/memcached/index.html b/docs/services/memcached/index.html
index ae4b7dd69..e2ed33223 100644
--- a/docs/services/memcached/index.html
+++ b/docs/services/memcached/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">Memcached | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/services/memcached"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current" [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.e8c8dc66.js" as="script">
-<link rel="preload" href="/assets/js/main.b5b973fb.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.23901fca.js" as="script">
+<link rel="preload" href="/assets/js/main.b461bd80.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.e8c8dc66.js"></script>
-<script src="/assets/js/main.b5b973fb.js"></script>
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
+<script src="/assets/js/runtime~main.23901fca.js"></script>
+<script src="/assets/js/main.b461bd80.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/services/memory/index.html b/docs/services/memory/index.html
index 70b0ead1a..a2d786ceb 100644
--- a/docs/services/memory/index.html
+++ b/docs/services/memory/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">Memory | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/services/memory"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.e8c8dc66.js" as="script">
-<link rel="preload" href="/assets/js/main.b5b973fb.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.23901fca.js" as="script">
+<link rel="preload" href="/assets/js/main.b461bd80.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.e8c8dc66.js"></script>
-<script src="/assets/js/main.b5b973fb.js"></script>
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
+<script src="/assets/js/runtime~main.23901fca.js"></script>
+<script src="/assets/js/main.b461bd80.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/services/moka/index.html b/docs/services/moka/index.html
index 8949cb6c7..7d4f6b836 100644
--- a/docs/services/moka/index.html
+++ b/docs/services/moka/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">Moka | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/services/moka"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta dat [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.e8c8dc66.js" as="script">
-<link rel="preload" href="/assets/js/main.b5b973fb.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.23901fca.js" as="script">
+<link rel="preload" href="/assets/js/main.b461bd80.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.e8c8dc66.js"></script>
-<script src="/assets/js/main.b5b973fb.js"></script>
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
+<script src="/assets/js/runtime~main.23901fca.js"></script>
+<script src="/assets/js/main.b461bd80.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/services/mongodb/index.html b/docs/services/mongodb/index.html
index 1d05d156c..2dea2cd79 100644
--- a/docs/services/mongodb/index.html
+++ b/docs/services/mongodb/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">MongoDB | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/services/mongodb"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><me [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.e8c8dc66.js" as="script">
-<link rel="preload" href="/assets/js/main.b5b973fb.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.23901fca.js" as="script">
+<link rel="preload" href="/assets/js/main.b461bd80.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.e8c8dc66.js"></script>
-<script src="/assets/js/main.b5b973fb.js"></script>
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
+<script src="/assets/js/runtime~main.23901fca.js"></script>
+<script src="/assets/js/main.b461bd80.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/services/mysql/index.html b/docs/services/mysql/index.html
index 40b80cc8e..27ffc2127 100644
--- a/docs/services/mysql/index.html
+++ b/docs/services/mysql/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">MySQL | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/services/mysql"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta d [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.e8c8dc66.js" as="script">
-<link rel="preload" href="/assets/js/main.b5b973fb.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.23901fca.js" as="script">
+<link rel="preload" href="/assets/js/main.b461bd80.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.e8c8dc66.js"></script>
-<script src="/assets/js/main.b5b973fb.js"></script>
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
+<script src="/assets/js/runtime~main.23901fca.js"></script>
+<script src="/assets/js/main.b461bd80.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/services/obs/index.html b/docs/services/obs/index.html
index fac027a22..848e8a243 100644
--- a/docs/services/obs/index.html
+++ b/docs/services/obs/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">Obs | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/services/obs"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data- [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.e8c8dc66.js" as="script">
-<link rel="preload" href="/assets/js/main.b5b973fb.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.23901fca.js" as="script">
+<link rel="preload" href="/assets/js/main.b461bd80.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.e8c8dc66.js"></script>
-<script src="/assets/js/main.b5b973fb.js"></script>
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
+<script src="/assets/js/runtime~main.23901fca.js"></script>
+<script src="/assets/js/main.b461bd80.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/services/onedrive/index.html b/docs/services/onedrive/index.html
index f67d08aec..42e0ac68b 100644
--- a/docs/services/onedrive/index.html
+++ b/docs/services/onedrive/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">OneDrive | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/services/onedrive"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current">< [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.e8c8dc66.js" as="script">
-<link rel="preload" href="/assets/js/main.b5b973fb.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.23901fca.js" as="script">
+<link rel="preload" href="/assets/js/main.b461bd80.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.e8c8dc66.js"></script>
-<script src="/assets/js/main.b5b973fb.js"></script>
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
+<script src="/assets/js/runtime~main.23901fca.js"></script>
+<script src="/assets/js/main.b461bd80.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/services/oss/index.html b/docs/services/oss/index.html
index 75d350ce1..4f544c523 100644
--- a/docs/services/oss/index.html
+++ b/docs/services/oss/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">OSS | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/services/oss"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data- [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.e8c8dc66.js" as="script">
-<link rel="preload" href="/assets/js/main.b5b973fb.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.23901fca.js" as="script">
+<link rel="preload" href="/assets/js/main.b461bd80.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.e8c8dc66.js"></script>
-<script src="/assets/js/main.b5b973fb.js"></script>
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
+<script src="/assets/js/runtime~main.23901fca.js"></script>
+<script src="/assets/js/main.b461bd80.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/services/persy/index.html b/docs/services/persy/index.html
index 033c004a7..7138fc85b 100644
--- a/docs/services/persy/index.html
+++ b/docs/services/persy/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">Persy | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/services/persy"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta d [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.e8c8dc66.js" as="script">
-<link rel="preload" href="/assets/js/main.b5b973fb.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.23901fca.js" as="script">
+<link rel="preload" href="/assets/js/main.b461bd80.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.e8c8dc66.js"></script>
-<script src="/assets/js/main.b5b973fb.js"></script>
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
+<script src="/assets/js/runtime~main.23901fca.js"></script>
+<script src="/assets/js/main.b461bd80.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/services/postgresql/index.html b/docs/services/postgresql/index.html
index 3cf69f3d3..2dbc2d22e 100644
--- a/docs/services/postgresql/index.html
+++ b/docs/services/postgresql/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">PostgreSQL | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/services/postgresql"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="curren [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.e8c8dc66.js" as="script">
-<link rel="preload" href="/assets/js/main.b5b973fb.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.23901fca.js" as="script">
+<link rel="preload" href="/assets/js/main.b461bd80.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.e8c8dc66.js"></script>
-<script src="/assets/js/main.b5b973fb.js"></script>
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
+<script src="/assets/js/runtime~main.23901fca.js"></script>
+<script src="/assets/js/main.b461bd80.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/services/redb/index.html b/docs/services/redb/index.html
index fc4370682..a9498cd34 100644
--- a/docs/services/redb/index.html
+++ b/docs/services/redb/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">Redb | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/services/redb"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta dat [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.e8c8dc66.js" as="script">
-<link rel="preload" href="/assets/js/main.b5b973fb.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.23901fca.js" as="script">
+<link rel="preload" href="/assets/js/main.b461bd80.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.e8c8dc66.js"></script>
-<script src="/assets/js/main.b5b973fb.js"></script>
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
+<script src="/assets/js/runtime~main.23901fca.js"></script>
+<script src="/assets/js/main.b461bd80.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/services/redis/index.html b/docs/services/redis/index.html
index 0430ba01b..10a90f210 100644
--- a/docs/services/redis/index.html
+++ b/docs/services/redis/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">Redis | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/services/redis"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta d [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.e8c8dc66.js" as="script">
-<link rel="preload" href="/assets/js/main.b5b973fb.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.23901fca.js" as="script">
+<link rel="preload" href="/assets/js/main.b461bd80.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.e8c8dc66.js"></script>
-<script src="/assets/js/main.b5b973fb.js"></script>
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
+<script src="/assets/js/runtime~main.23901fca.js"></script>
+<script src="/assets/js/main.b461bd80.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/services/rocksdb/index.html b/docs/services/rocksdb/index.html
index 0852e35f6..4fbbbd210 100644
--- a/docs/services/rocksdb/index.html
+++ b/docs/services/rocksdb/index.html
@@ -5,16 +5,16 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">RocksDB | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/services/rocksdb"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><me [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.e8c8dc66.js" as="script">
-<link rel="preload" href="/assets/js/main.b5b973fb.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.23901fca.js" as="script">
+<link rel="preload" href="/assets/js/main.b461bd80.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
 issues. It is advisable to follow the steps provided in the <a href="https://github.com/facebook/rocksdb/blob/main/INSTALL.md" target="_blank" rel="noopener noreferrer"><code>INSTALL</code></a>
 file to build rocksdb, rather than relying on system libraries that
-may be outdated and incompatible.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="configuration">Configuration<a href="#configuration" class="hash-link" aria-label="Direct link to Configuration" title="Direct link to Configuration">​</a></h2><ul><li><code>root</code>: Set the working directory of <code>OpenDAL</code></li><li><code>datadir</code>: Set the path to the rocksdb data directory</li></ul><p>You can refer to <!-- -->[<code>RocksdbBuilder</code>]<!-- -->&#x27;s docs for mor [...]
-<script src="/assets/js/runtime~main.e8c8dc66.js"></script>
-<script src="/assets/js/main.b5b973fb.js"></script>
+may be outdated and incompatible.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="configuration">Configuration<a href="#configuration" class="hash-link" aria-label="Direct link to Configuration" title="Direct link to Configuration">​</a></h2><ul><li><code>root</code>: Set the working directory of <code>OpenDAL</code></li><li><code>datadir</code>: Set the path to the rocksdb data directory</li></ul><p>You can refer to <!-- -->[<code>RocksdbBuilder</code>]<!-- -->&#x27;s docs for mor [...]
+<script src="/assets/js/runtime~main.23901fca.js"></script>
+<script src="/assets/js/main.b461bd80.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/services/s3/index.html b/docs/services/s3/index.html
index 5a86bfc9c..1112c1337 100644
--- a/docs/services/s3/index.html
+++ b/docs/services/s3/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">S3 | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/services/s3"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data-rh [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.e8c8dc66.js" as="script">
-<link rel="preload" href="/assets/js/main.b5b973fb.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.23901fca.js" as="script">
+<link rel="preload" href="/assets/js/main.b461bd80.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.e8c8dc66.js"></script>
-<script src="/assets/js/main.b5b973fb.js"></script>
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
+<script src="/assets/js/runtime~main.23901fca.js"></script>
+<script src="/assets/js/main.b461bd80.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/services/sftp/index.html b/docs/services/sftp/index.html
index 5fdbc0cec..de9a70163 100644
--- a/docs/services/sftp/index.html
+++ b/docs/services/sftp/index.html
@@ -5,14 +5,14 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">SFTP | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/services/sftp"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta dat [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.e8c8dc66.js" as="script">
-<link rel="preload" href="/assets/js/main.b5b973fb.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.23901fca.js" as="script">
+<link rel="preload" href="/assets/js/main.b461bd80.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-lots of files, you should pay attention to close the file after using it.</p></div></div><h2 class="anchor anchorWithStickyNavbar_LWe7" id="capabilities">Capabilities<a href="#capabilities" class="hash-link" aria-label="Direct link to Capabilities" title="Direct link to Capabilities">​</a></h2><p>This service can be used to:</p><ul class="contains-task-list containsTaskList_mC6p"><li class="task-list-item"><input type="checkbox" checked="" disabled=""> <!-- -->stat</li><li class="task-li [...]
-<script src="/assets/js/runtime~main.e8c8dc66.js"></script>
-<script src="/assets/js/main.b5b973fb.js"></script>
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
+lots of files, you should pay attention to close the file after using it.</p></div></div><h2 class="anchor anchorWithStickyNavbar_LWe7" id="capabilities">Capabilities<a href="#capabilities" class="hash-link" aria-label="Direct link to Capabilities" title="Direct link to Capabilities">​</a></h2><p>This service can be used to:</p><ul class="contains-task-list containsTaskList_mC6p"><li class="task-list-item"><input type="checkbox" checked="" disabled=""> <!-- -->stat</li><li class="task-li [...]
+<script src="/assets/js/runtime~main.23901fca.js"></script>
+<script src="/assets/js/main.b461bd80.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/services/sled/index.html b/docs/services/sled/index.html
index 1e8362c34..69a0be76c 100644
--- a/docs/services/sled/index.html
+++ b/docs/services/sled/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">Sled | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/services/sled"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta dat [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.e8c8dc66.js" as="script">
-<link rel="preload" href="/assets/js/main.b5b973fb.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.23901fca.js" as="script">
+<link rel="preload" href="/assets/js/main.b461bd80.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.e8c8dc66.js"></script>
-<script src="/assets/js/main.b5b973fb.js"></script>
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
+<script src="/assets/js/runtime~main.23901fca.js"></script>
+<script src="/assets/js/main.b461bd80.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/services/sqlite/index.html b/docs/services/sqlite/index.html
index 98556ad40..480cfe6eb 100644
--- a/docs/services/sqlite/index.html
+++ b/docs/services/sqlite/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">Sqlite | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/services/sqlite"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.e8c8dc66.js" as="script">
-<link rel="preload" href="/assets/js/main.b5b973fb.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.23901fca.js" as="script">
+<link rel="preload" href="/assets/js/main.b461bd80.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.e8c8dc66.js"></script>
-<script src="/assets/js/main.b5b973fb.js"></script>
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
+<script src="/assets/js/runtime~main.23901fca.js"></script>
+<script src="/assets/js/main.b461bd80.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/services/supabase/index.html b/docs/services/supabase/index.html
index 4df8c38b0..3210587d0 100644
--- a/docs/services/supabase/index.html
+++ b/docs/services/supabase/index.html
@@ -5,15 +5,15 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">Supabase | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/services/supabase"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current">< [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.e8c8dc66.js" as="script">
-<link rel="preload" href="/assets/js/main.b5b973fb.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.23901fca.js" as="script">
+<link rel="preload" href="/assets/js/main.b461bd80.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
 service_role_key(Secret key). The former one can only write public resources while the latter one
-can access all resources. Note that if you want to read public resources, do not set the key.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="example">Example<a href="#example" class="hash-link" aria-label="Direct link to Example" title="Direct link to Example">​</a></h2><h3 class="anchor anchorWithStickyNavbar_LWe7" id="via-builder">Via Builder<a href="#via-builder" class="hash-link" aria-label="Direct link to Via Builder" title="Direct link to Via Builder">​</a></h3><div class="l [...]
-<script src="/assets/js/runtime~main.e8c8dc66.js"></script>
-<script src="/assets/js/main.b5b973fb.js"></script>
+can access all resources. Note that if you want to read public resources, do not set the key.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="example">Example<a href="#example" class="hash-link" aria-label="Direct link to Example" title="Direct link to Example">​</a></h2><h3 class="anchor anchorWithStickyNavbar_LWe7" id="via-builder">Via Builder<a href="#via-builder" class="hash-link" aria-label="Direct link to Via Builder" title="Direct link to Via Builder">​</a></h3><div class="l [...]
+<script src="/assets/js/runtime~main.23901fca.js"></script>
+<script src="/assets/js/main.b461bd80.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/services/tikv/index.html b/docs/services/tikv/index.html
index 0cfc2a65f..aba10aaf7 100644
--- a/docs/services/tikv/index.html
+++ b/docs/services/tikv/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">TiKV | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/services/tikv"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta dat [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.e8c8dc66.js" as="script">
-<link rel="preload" href="/assets/js/main.b5b973fb.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.23901fca.js" as="script">
+<link rel="preload" href="/assets/js/main.b461bd80.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.e8c8dc66.js"></script>
-<script src="/assets/js/main.b5b973fb.js"></script>
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
+<script src="/assets/js/runtime~main.23901fca.js"></script>
+<script src="/assets/js/main.b461bd80.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/services/vercel_artifacts/index.html b/docs/services/vercel_artifacts/index.html
index 6315c08e8..b67e395cc 100644
--- a/docs/services/vercel_artifacts/index.html
+++ b/docs/services/vercel_artifacts/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">Vercel Artifacts | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/services/vercel_artifacts"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" con [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.e8c8dc66.js" as="script">
-<link rel="preload" href="/assets/js/main.b5b973fb.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.23901fca.js" as="script">
+<link rel="preload" href="/assets/js/main.b461bd80.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.e8c8dc66.js"></script>
-<script src="/assets/js/main.b5b973fb.js"></script>
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
+<script src="/assets/js/runtime~main.23901fca.js"></script>
+<script src="/assets/js/main.b461bd80.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/services/wasabi/index.html b/docs/services/wasabi/index.html
deleted file mode 100644
index a22ee93a0..000000000
--- a/docs/services/wasabi/index.html
+++ /dev/null
@@ -1,17 +0,0 @@
-<!doctype html>
-<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-services/wasabi">
-<head>
-<meta charset="UTF-8">
-<meta name="generator" content="Docusaurus v2.4.1">
-<title data-rh="true">Wasabi | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/services/wasabi"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta [...]
-<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.e8c8dc66.js" as="script">
-<link rel="preload" href="/assets/js/main.b5b973fb.js" as="script">
-</head>
-<body class="navigation-with-keyboard">
-<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.e8c8dc66.js"></script>
-<script src="/assets/js/main.b5b973fb.js"></script>
-</body>
-</html>
\ No newline at end of file
diff --git a/docs/services/webdav/index.html b/docs/services/webdav/index.html
index 328a75ded..01f25b90e 100644
--- a/docs/services/webdav/index.html
+++ b/docs/services/webdav/index.html
@@ -5,14 +5,14 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">WebDAV | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/services/webdav"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.e8c8dc66.js" as="script">
-<link rel="preload" href="/assets/js/main.b5b973fb.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.23901fca.js" as="script">
+<link rel="preload" href="/assets/js/main.b461bd80.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-Users can use <code>webdav</code> to connect those services.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="configuration">Configuration<a href="#configuration" class="hash-link" aria-label="Direct link to Configuration" title="Direct link to Configuration">​</a></h2><ul><li><code>endpoint</code>: set the endpoint for webdav</li><li><code>root</code>: Set the work directory for backend</li></ul><p>You can refer to <!-- -->[<code>WebdavBuilder</code>]<!-- -->&#x27;s docs for more i [...]
-<script src="/assets/js/runtime~main.e8c8dc66.js"></script>
-<script src="/assets/js/main.b5b973fb.js"></script>
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
+Users can use <code>webdav</code> to connect those services.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="configuration">Configuration<a href="#configuration" class="hash-link" aria-label="Direct link to Configuration" title="Direct link to Configuration">​</a></h2><ul><li><code>endpoint</code>: set the endpoint for webdav</li><li><code>root</code>: Set the work directory for backend</li></ul><p>You can refer to <!-- -->[<code>WebdavBuilder</code>]<!-- -->&#x27;s docs for more i [...]
+<script src="/assets/js/runtime~main.23901fca.js"></script>
+<script src="/assets/js/main.b461bd80.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/services/webhdfs/index.html b/docs/services/webhdfs/index.html
index 02d00b6ed..14816ee75 100644
--- a/docs/services/webhdfs/index.html
+++ b/docs/services/webhdfs/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">WebHDFS | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/docs/services/webhdfs"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><me [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.e8c8dc66.js" as="script">
-<link rel="preload" href="/assets/js/main.b5b973fb.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.23901fca.js" as="script">
+<link rel="preload" href="/assets/js/main.b461bd80.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
-<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.e8c8dc66.js"></script>
-<script src="/assets/js/main.b5b973fb.js"></script>
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
+<script src="/assets/js/runtime~main.23901fca.js"></script>
+<script src="/assets/js/main.b461bd80.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/download/index.html b/download/index.html
index d313de9a4..0dd88ee71 100644
--- a/download/index.html
+++ b/download/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">Download | Apache OpenDAL</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/download"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docusaurus_tag" content="default"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.e8c8dc66.js" as="script">
-<link rel="preload" href="/assets/js/main.b5b973fb.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.23901fca.js" as="script">
+<link rel="preload" href="/assets/js/main.b461bd80.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
 <div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="ro [...]
-<script src="/assets/js/runtime~main.e8c8dc66.js"></script>
-<script src="/assets/js/main.b5b973fb.js"></script>
+<script src="/assets/js/runtime~main.23901fca.js"></script>
+<script src="/assets/js/main.b461bd80.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/index.html b/index.html
index c98772716..189d2a6fb 100644
--- a/index.html
+++ b/index.html
@@ -5,13 +5,13 @@
 <meta name="generator" content="Docusaurus v2.4.1">
 <title data-rh="true">Apache OpenDAL</title><meta data-rh="true" property="og:title" content="Apache OpenDAL"><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://opendal.apache.org/"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docusaurus_tag" content="default"><meta data-rh="true" name="docse [...]
 <link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache OpenDAL Atom Feed"><link rel="stylesheet" href="/assets/css/styles.51c7cd0e.css">
-<link rel="preload" href="/assets/js/runtime~main.e8c8dc66.js" as="script">
-<link rel="preload" href="/assets/js/main.b5b973fb.js" as="script">
+<link rel="preload" href="/assets/js/runtime~main.23901fca.js" as="script">
+<link rel="preload" href="/assets/js/main.b461bd80.js" as="script">
 </head>
 <body class="navigation-with-keyboard">
 <script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
 <div id="__docusaurus-base-url-issue-banner-container"></div><div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria [...]
-<script src="/assets/js/runtime~main.e8c8dc66.js"></script>
-<script src="/assets/js/main.b5b973fb.js"></script>
+<script src="/assets/js/runtime~main.23901fca.js"></script>
+<script src="/assets/js/main.b461bd80.js"></script>
 </body>
 </html>
\ No newline at end of file
diff --git a/sitemap.xml b/sitemap.xml
index 6c82d6764..939374ad4 100644
--- a/sitemap.xml
+++ b/sitemap.xml
@@ -1 +1 @@
-<?xml version="1.0" encoding="UTF-8"?><urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:news="http://www.google.com/schemas/sitemap-news/0.9" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:image="http://www.google.com/schemas/sitemap-image/1.1" xmlns:video="http://www.google.com/schemas/sitemap-video/1.1"><url><loc>https://opendal.apache.org/blog</loc><changefreq>daily</changefreq><priority>0.5</priority></url><url><loc>https://opendal.apache.org/blog/archive</loc><chan [...]
\ No newline at end of file
+<?xml version="1.0" encoding="UTF-8"?><urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:news="http://www.google.com/schemas/sitemap-news/0.9" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:image="http://www.google.com/schemas/sitemap-image/1.1" xmlns:video="http://www.google.com/schemas/sitemap-video/1.1"><url><loc>https://opendal.apache.org/blog</loc><changefreq>daily</changefreq><priority>0.5</priority></url><url><loc>https://opendal.apache.org/blog/archive</loc><chan [...]
\ No newline at end of file