Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
47 commits
Select commit Hold shift + click to select a range
ffdf8ee
jetty 10 upgrade
capistrant May 16, 2025
f4eef97
checkpoint
capistrant May 27, 2025
63f23c9
compiling but broken cuz of at least one dep calcite depending on jetty9
capistrant Jun 2, 2025
87e216d
Fix breakage in router
capistrant Aug 4, 2025
c675117
Merge branch 'master' into jetty-update-august
capistrant Aug 7, 2025
acaf869
Compilation fixes after merging master in. plus getting checkstyle fi…
capistrant Aug 7, 2025
a741929
Remove some of the avatica deps blocking jetty12
capistrant Aug 21, 2025
2536394
bump jetty to latest and fixup licenses.yaml
capistrant Aug 21, 2025
067b84b
Merge branch 'master' into jetty12-ee8-upgrade
capistrant Aug 21, 2025
a7a0134
fixup after merging master
capistrant Aug 21, 2025
aba3dd0
Fixup some licenses reporting issues
capistrant Aug 21, 2025
8042ece
remove jetty dependency from indexing hadoop in attempt to keep it alive
capistrant Aug 21, 2025
11d2964
stop doing static checks and build with jdk11
capistrant Aug 22, 2025
5f9ee32
Modifications to index_hadoop to try and keep it alive
capistrant Aug 22, 2025
1f13540
Modify duplicate header removal strategy
capistrant Aug 22, 2025
74f5c09
Remove dependency on non public jetty nested packages
capistrant Aug 22, 2025
97e7649
Revert back to verbose and dirty Injector setup to get hadoop index f…
capistrant Aug 23, 2025
0e08e10
Fix http trailers for QueryResultPusher
capistrant Aug 23, 2025
d2a5903
Fix trailer related tests in QueryResourceTest
capistrant Aug 23, 2025
8ddb910
add some UTs
capistrant Aug 23, 2025
a2a224d
prevent banned dep from getting pulled in
capistrant Aug 23, 2025
8d9eb66
Run rewrite rules mvn goal to fixup test files
capistrant Aug 23, 2025
3660520
stop accounting for buggy mock impl in sql test
capistrant Aug 24, 2025
13e4f5c
Add new http server config for Jetty UriCompliance mode. Default to a…
capistrant Aug 25, 2025
6e8e5f5
fix import order
capistrant Aug 25, 2025
a66e475
fix spell checker flag
capistrant Aug 25, 2025
9fb989d
Fixup java docs links to use java17
capistrant Aug 26, 2025
bdf6790
Unify approach to jetty handler for avatica json and protobuf
capistrant Sep 2, 2025
99b0ebc
use 405 response code for avatica jdbc non post requests
capistrant Sep 2, 2025
7aa43aa
fix checkstyle
capistrant Sep 2, 2025
3f248f9
Merge branch 'master' into jetty12-ee8-upgrade
capistrant Sep 9, 2025
de76acc
Add link for new jetty related config
capistrant Sep 9, 2025
dec75f0
fix grammar in java support doc
capistrant Sep 9, 2025
bafb2fc
Make the legacy ITs easier to run in a wider variety of docker steps
capistrant Sep 9, 2025
4ba80aa
Cleanup some of the Injector initialization code for hadoop tasks, ba…
capistrant Sep 9, 2025
36949b1
Starting point for creating a DruidAvaticaHandler base class
capistrant Sep 9, 2025
f154b04
Share a little bit of the code between the avatica handlers
capistrant Sep 9, 2025
4506aac
Work to fix AvaticaHandler constructor issues
capistrant Sep 10, 2025
d2ac8b7
Fix codeql flag
capistrant Sep 11, 2025
2ada34f
Revert "Make the legacy ITs easier to run in a wider variety of docke…
capistrant Sep 11, 2025
24f4c13
Add RequestLogger configuration back using proper jetty12 mechanism
capistrant Sep 11, 2025
a3bf74a
Fix checkstyle
capistrant Sep 11, 2025
7b352db
Merge branch 'master' into jetty12-ee8-upgrade
capistrant Sep 17, 2025
0b88098
fix import order
capistrant Sep 17, 2025
a907ba7
Address review comments
capistrant Sep 18, 2025
73eab18
fix serialization
capistrant Sep 18, 2025
0f67db8
Merge branch 'master' into jetty12-ee8-upgrade
capistrant Sep 19, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/static-checks.yml
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ jobs:
fail-fast: false
matrix:
# Use JDK 21.0.4 to work around https://github.com/apache/druid/issues/17429
java: [ '11', '17', '21.0.4' ]
java: [ '17', '21.0.4' ]
runs-on: ubuntu-latest
steps:
- name: checkout branch
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/unit-and-integration-tests-unified.yml
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ jobs:
fail-fast: false
matrix:
# Use JDK 21.0.4 to work around https://github.com/apache/druid/issues/17429
jdk: [ '11', '17', '21.0.4' ]
jdk: [ '17', '21.0.4' ]
runs-on: ubuntu-latest
steps:
- name: Checkout branch
Expand Down
7 changes: 4 additions & 3 deletions docs/configuration/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -196,9 +196,9 @@ and `druid.tlsPort` properties on each service. Please see `Configuration` secti

Druid uses Jetty as an embedded web server. To learn more about TLS/SSL, certificates, and related concepts in Jetty, including explanations of the configuration settings below, see "Configuring SSL/TLS KeyStores" in the [Jetty Operations Guide](https://www.eclipse.org/jetty/documentation.php).

For information about TLS/SSL support in Java in general, see the [Java Secure Socket Extension (JSSE) Reference Guide](https://docs.oracle.com/en/java/javase/11/security/java-secure-socket-extension-jsse-reference-guide.html).
For information about TLS/SSL support in Java in general, see the [Java Secure Socket Extension (JSSE) Reference Guide](https://docs.oracle.com/en/java/javase/17/security/java-secure-socket-extension-jsse-reference-guide.html).
The [Java Cryptography Architecture
Standard Algorithm Name Documentation for JDK 11](https://docs.oracle.com/en/java/javase/11/docs/specs/security/standard-names.html) lists all possible
Standard Algorithm Name Documentation for JDK 17](https://docs.oracle.com/en/java/javase/17/docs/specs/security/standard-names.html) lists all possible
values for the following properties, among others provided by the Java implementation.

|Property|Description|Default|Required|
Expand Down Expand Up @@ -231,7 +231,7 @@ These properties apply to the SSLContext that will be provided to the internal H
|`druid.client.https.trustStoreAlgorithm`|Algorithm to be used by TrustManager to validate certificate chains|`javax.net.ssl.TrustManagerFactory.getDefaultAlgorithm()`|no|
|`druid.client.https.trustStorePassword`|The [Password Provider](../operations/password-provider.md) or String password for the Trust Store.|none|yes|

This [document](https://docs.oracle.com/en/java/javase/11/docs/specs/security/standard-names.html) lists all the possible
This [document](https://docs.oracle.com/en/java/javase/17/docs/specs/security/standard-names.html) lists all the possible
values for the above mentioned configs among others provided by Java implementation.

### Authentication and authorization
Expand Down Expand Up @@ -1502,6 +1502,7 @@ Druid uses Jetty to serve HTTP requests.
|`druid.server.http.enableForwardedRequestCustomizer`|If enabled, adds Jetty ForwardedRequestCustomizer which reads X-Forwarded-* request headers to manipulate servlet request object when Druid is used behind a proxy.|false|
|`druid.server.http.allowedHttpMethods`|List of HTTP methods that should be allowed in addition to the ones required by Druid APIs. Druid APIs require GET, PUT, POST, and DELETE, which are always allowed. This option is not useful unless you have installed an extension that needs these additional HTTP methods or that adds functionality related to CORS. None of Druid's bundled extensions require these methods.|`[]`|
|`druid.server.http.contentSecurityPolicy`|Content-Security-Policy header value to set on each non-POST response. Setting this property to an empty string, or omitting it, both result in the default `frame-ancestors: none` being set.|`frame-ancestors 'none'`|
|`druid.server.http.uriCompliance`|Jetty `UriCompliance` mode for Druid's embedded Jetty servers. To modify, override this config with the string representation of any `UriCompliance` mode that [Jetty supports](https://javadoc.jetty.org/jetty-12/org/eclipse/jetty/http/UriCompliance.html).|LEGACY|

#### Indexer processing resources

Expand Down
6 changes: 3 additions & 3 deletions docs/development/extensions-core/simple-client-sslcontext.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,9 +23,9 @@ title: "Simple SSLContext Provider Module"
-->


This Apache Druid module contains a simple implementation of [SSLContext](https://docs.oracle.com/en/java/javase/11/docs/api/java.base/javax/net/ssl/SSLContext.html)
This Apache Druid module contains a simple implementation of [SSLContext](https://docs.oracle.com/en/java/javase/17/docs/api/java.base/javax/net/ssl/SSLContext.html)
that will be injected to be used with HttpClient that Druid processes use internally to communicate with each other. To learn more about
Java's SSL support, please refer to [this](https://docs.oracle.com/en/java/javase/11/security/java-secure-socket-extension-jsse-reference-guide.html) guide.
Java's SSL support, please refer to [this](https://docs.oracle.com/en/java/javase/17/security/java-secure-socket-extension-jsse-reference-guide.html) guide.


|Property|Description|Default|Required|
Expand All @@ -48,5 +48,5 @@ The following table contains optional parameters for supporting client certifica
|`druid.client.https.keyManagerPassword`|The [Password Provider](../../operations/password-provider.md) or String password for the Key Manager.|none|no|
|`druid.client.https.validateHostnames`|Validate the hostname of the server. This should not be disabled unless you are using [custom TLS certificate checks](../../operations/tls-support.md) and know that standard hostname validation is not needed.|true|no|

This [document](https://docs.oracle.com/en/java/javase/11/docs/specs/security/standard-names.html) lists all the possible
This [document](https://docs.oracle.com/en/java/javase/17/docs/specs/security/standard-names.html) lists all the possible
values for the above mentioned configs among others provided by Java implementation.
8 changes: 4 additions & 4 deletions docs/ingestion/input-sources.md
Original file line number Diff line number Diff line change
Expand Up @@ -184,7 +184,7 @@ Sample specs:
|uris|JSON array of URIs where S3 objects to be ingested are located.|None|`uris` or `prefixes` or `objects` must be set|
|prefixes|JSON array of URI prefixes for the locations of S3 objects to be ingested. Empty objects starting with one of the given prefixes will be skipped.|None|`uris` or `prefixes` or `objects` must be set|
|objects|JSON array of S3 Objects to be ingested.|None|`uris` or `prefixes` or `objects` must be set|
|objectGlob|A glob for the object part of the S3 URI. In the URI `s3://foo/bar/file.json`, the glob is applied to `bar/file.json`.<br /><br />The glob must match the entire object part, not just the filename. For example, the glob `*.json` does not match `s3://foo/bar/file.json`, because the object part is `bar/file.json`, and the`*` does not match the slash. To match all objects ending in `.json`, use `**.json` instead.<br /><br />For more information, refer to the documentation for [`FileSystem#getPathMatcher`](https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/nio/file/FileSystem.html#getPathMatcher(java.lang.String)).|None|no|
|objectGlob|A glob for the object part of the S3 URI. In the URI `s3://foo/bar/file.json`, the glob is applied to `bar/file.json`.<br /><br />The glob must match the entire object part, not just the filename. For example, the glob `*.json` does not match `s3://foo/bar/file.json`, because the object part is `bar/file.json`, and the`*` does not match the slash. To match all objects ending in `.json`, use `**.json` instead.<br /><br />For more information, refer to the documentation for [`FileSystem#getPathMatcher`](https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/nio/file/FileSystem.html#getPathMatcher(java.lang.String)).|None|no|
|systemFields|JSON array of system fields to return as part of input rows. Possible values: `__file_uri` (S3 URI starting with `s3://`), `__file_bucket` (S3 bucket), and `__file_path` (S3 object key).|None|no|
| endpointConfig |Config for overriding the default S3 endpoint and signing region. This would allow ingesting data from a different S3 store. Please see [s3 config](../development/extensions-core/s3.md#connecting-to-s3-configuration) for more information.|None|No (defaults will be used if not given)
| clientConfig |S3 client properties for the overridden s3 endpoint. This is used in conjunction with `endPointConfig`. Please see [s3 config](../development/extensions-core/s3.md#connecting-to-s3-configuration) for more information.|None|No (defaults will be used if not given)
Expand Down Expand Up @@ -289,7 +289,7 @@ Sample specs:
|uris|JSON array of URIs where Google Cloud Storage objects to be ingested are located.|None|`uris` or `prefixes` or `objects` must be set|
|prefixes|JSON array of URI prefixes for the locations of Google Cloud Storage objects to be ingested. Empty objects starting with one of the given prefixes will be skipped.|None|`uris` or `prefixes` or `objects` must be set|
|objects|JSON array of Google Cloud Storage objects to be ingested.|None|`uris` or `prefixes` or `objects` must be set|
|objectGlob|A glob for the object part of the S3 URI. In the URI `s3://foo/bar/file.json`, the glob is applied to `bar/file.json`.<br /><br />The glob must match the entire object part, not just the filename. For example, the glob `*.json` does not match `s3://foo/bar/file.json`, because the object part is `bar/file.json`, and the`*` does not match the slash. To match all objects ending in `.json`, use `**.json` instead.<br /><br />For more information, refer to the documentation for [`FileSystem#getPathMatcher`](https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/nio/file/FileSystem.html#getPathMatcher(java.lang.String)).|None|no|
|objectGlob|A glob for the object part of the S3 URI. In the URI `s3://foo/bar/file.json`, the glob is applied to `bar/file.json`.<br /><br />The glob must match the entire object part, not just the filename. For example, the glob `*.json` does not match `s3://foo/bar/file.json`, because the object part is `bar/file.json`, and the`*` does not match the slash. To match all objects ending in `.json`, use `**.json` instead.<br /><br />For more information, refer to the documentation for [`FileSystem#getPathMatcher`](https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/nio/file/FileSystem.html#getPathMatcher(java.lang.String)).|None|no|

Note that the Google Cloud Storage input source will skip all empty objects only when `prefixes` is specified.

Expand Down Expand Up @@ -377,7 +377,7 @@ Sample specs:
|uris|JSON array of URIs where the Azure objects to be ingested are located. Use this format: `azureStorage://STORAGE_ACCOUNT/CONTAINER/PATH_TO_FILE`|None|One of the following must be set:`uris`, `prefixes`, or `objects`.|
|prefixes|JSON array of URI prefixes for the locations of Azure objects to ingest. Use this format`azureStorage://STORAGE_ACCOUNT/CONTAINER/PREFIX`. Empty objects starting with any of the given prefixes are skipped.|None|One of the following must be set:`uris`, `prefixes`, or `objects`.|
|objects|JSON array of Azure objects to ingest.|None|One of the following must be set:`uris`, `prefixes`, or `objects`.|
|objectGlob|A glob for the object part of the Azure URI. In the URI `azureStorage://foo/bar/file.json`, the glob is applied to `bar/file.json`.<br /><br />The glob must match the entire object part, not just the filename. For example, the glob `*.json` does not match `azureStorage://foo/bar/file.json` because the object part is `bar/file.json`, and the`*` does not match the slash. To match all objects ending in `.json`, use `**.json` instead.<br /><br />For more information, refer to the documentation for [`FileSystem#getPathMatcher`](https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/nio/file/FileSystem.html#getPathMatcher(java.lang.String)).|None|no|
|objectGlob|A glob for the object part of the Azure URI. In the URI `azureStorage://foo/bar/file.json`, the glob is applied to `bar/file.json`.<br /><br />The glob must match the entire object part, not just the filename. For example, the glob `*.json` does not match `azureStorage://foo/bar/file.json` because the object part is `bar/file.json`, and the`*` does not match the slash. To match all objects ending in `.json`, use `**.json` instead.<br /><br />For more information, refer to the documentation for [`FileSystem#getPathMatcher`](https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/nio/file/FileSystem.html#getPathMatcher(java.lang.String)).|None|no|
|systemFields|JSON array of system fields to return as part of input rows. Possible values: `__file_uri` (Azure blob URI starting with `azureStorage://`), `__file_bucket` (Azure bucket), and `__file_path` (Azure object path).|None|no|
|properties|Properties object for overriding the default Azure configuration. See below for more information.|None|No (defaults will be used if not given)|

Expand Down Expand Up @@ -471,7 +471,7 @@ Sample specs:
|uris|JSON array of URIs where the Azure objects to be ingested are located, in the form `azure://<container>/<path-to-file>`|None|`uris` or `prefixes` or `objects` must be set|
|prefixes|JSON array of URI prefixes for the locations of Azure objects to ingest, in the form `azure://<container>/<prefix>`. Empty objects starting with one of the given prefixes are skipped.|None|`uris` or `prefixes` or `objects` must be set|
|objects|JSON array of Azure objects to ingest.|None|`uris` or `prefixes` or `objects` must be set|
|objectGlob|A glob for the object part of the Azure URI. In the URI `azure://foo/bar/file.json`, the glob is applied to `bar/file.json`.<br /><br />The glob must match the entire object part, not just the filename. For example, the glob `*.json` does not match `azure://foo/bar/file.json`, because the object part is `bar/file.json`, and the`*` does not match the slash. To match all objects ending in `.json`, use `**.json` instead.<br /><br />For more information, refer to the documentation for [`FileSystem#getPathMatcher`](https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/nio/file/FileSystem.html#getPathMatcher(java.lang.String)).|None|no|
|objectGlob|A glob for the object part of the Azure URI. In the URI `azure://foo/bar/file.json`, the glob is applied to `bar/file.json`.<br /><br />The glob must match the entire object part, not just the filename. For example, the glob `*.json` does not match `azure://foo/bar/file.json`, because the object part is `bar/file.json`, and the`*` does not match the slash. To match all objects ending in `.json`, use `**.json` instead.<br /><br />For more information, refer to the documentation for [`FileSystem#getPathMatcher`](https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/nio/file/FileSystem.html#getPathMatcher(java.lang.String)).|None|no|
|systemFields|JSON array of system fields to return as part of input rows. Possible values: `__file_uri` (Azure blob URI starting with `azure://`), `__file_bucket` (Azure bucket), and `__file_path` (Azure object path).|None|no|

Note that the Azure input source skips all empty objects only when `prefixes` is specified.
Expand Down
2 changes: 1 addition & 1 deletion docs/operations/dump-segment.md
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ java -classpath "/my/druid/lib/*" -Ddruid.extensions.loadList="[]" org.apache.dr
--out /home/druid/output.txt
```

If you use JDK 11 and above, you need to add the following additional parameters
If you use JDK 17 and above, you need to add the following additional parameters
```
--add-opens java.base/java.lang=ALL-UNNAMED
--add-opens java.base/sun.nio.ch=ALL-UNNAMED
Expand Down
14 changes: 3 additions & 11 deletions docs/operations/java.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ a Java runtime for Druid.

## Selecting a Java runtime

The project team recommends Java 17. Although you can use Java 11, support for it is deprecated.
Druid officially supports Java 17.

The project team recommends using an OpenJDK-based Java distribution. There are many free and actively-supported
distributions available, including
Expand All @@ -43,26 +43,18 @@ Druid relies on the environment variables `JAVA_HOME` or `DRUID_JAVA_HOME` to fi
## Garbage collection

In general, the project team recommends using the G1 collector with default settings. This is the default collector in
Java 11 and 17.
Java 17.

Garbage collector selection and tuning is a form of sport in the Java community. There may be situations where adjusting
garbage collection configuration improves or worsens performance. The project team's guidance is that most people do
not need to stray away from G1 with default settings.

## Strong encapsulation

Java 9 and beyond (including Java 11 and 17) include the capability for
Java 9 and beyond (including Java 17) include the capability for
[strong encapsulation](https://dev.java/learn/strong-encapsulation-\(of-jdk-internals\)/) of internal JDK APIs. Druid
uses certain internal JDK APIs, which must be added to `--add-exports` and `--add-opens` on the Java command line.

On Java 11, if these parameters are not included, you will see warnings like the following:

```
WARNING: An illegal reflective access operation has occurred
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release
```

Comment on lines -58 to -65
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think you still see these if you don't add the stuff, are we just assuming that people are used to it by now?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ehh that was probably me just seeing Java 11 and not Java 11+ and hitting delete. I'll confirm it is still there and add back without the explicit java 11 part

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

actually maybe removing them is right if java 17 is actually throwing exceptions without them like we indicate on line 66

On Java 17, if these parameters are not included, you will see errors on startup like the following:

```
Expand Down
8 changes: 4 additions & 4 deletions docs/operations/tls-support.md
Original file line number Diff line number Diff line change
Expand Up @@ -37,10 +37,10 @@ Apache Druid uses Jetty as its embedded web server.

To get familiar with TLS/SSL, along with related concepts like keys and certificates,
read [Configuring Secure Protocols](https://www.eclipse.org/jetty/documentation/jetty-12/operations-guide/index.html#og-protocols-ssl) in the Jetty documentation.
To get more in-depth knowledge of TLS/SSL support in Java in general, refer to the [Java Secure Socket Extension (JSSE) Reference Guide](https://docs.oracle.com/en/java/javase/11/security/java-secure-socket-extension-jsse-reference-guide.html).
The [Class SslContextFactory](https://www.eclipse.org/jetty/javadoc/jetty-11/org/eclipse/jetty/util/ssl/SslContextFactory.html)
To get more in-depth knowledge of TLS/SSL support in Java in general, refer to the [Java Secure Socket Extension (JSSE) Reference Guide](https://docs.oracle.com/en/java/javase/17/security/java-secure-socket-extension-jsse-reference-guide.html).
The [Class SslContextFactory](https://javadoc.jetty.org/jetty-12/org/eclipse/jetty/util/ssl/SslContextFactory.html)
reference doc can help in understanding TLS/SSL configurations listed below. Finally, [Java Cryptography Architecture
Standard Algorithm Name Documentation for JDK 11](https://docs.oracle.com/en/java/javase/11/docs/specs/security/standard-names.html) lists all possible
Standard Algorithm Name Documentation for JDK 17](https://docs.oracle.com/en/java/javase/17/docs/specs/security/standard-names.html) lists all possible
values for the configs below, among others provided by Java implementation.

|Property|Description|Default|Required|
Expand Down Expand Up @@ -79,7 +79,7 @@ The following table contains non-mandatory advanced configuration options, use c
## Internal communication over TLS

Whenever possible Druid processes will use HTTPS to talk to each other. To enable this communication Druid's HttpClient needs to
be configured with a proper [SSLContext](https://docs.oracle.com/en/java/javase/11/docs/api/java.base/javax/net/ssl/SSLContext.html) that is able
be configured with a proper [SSLContext](https://docs.oracle.com/en/java/javase/17/docs/api/java.base/javax/net/ssl/SSLContext.html) that is able
to validate the Server Certificates, otherwise communication will fail.

Since, there are various ways to configure SSLContext, by default, Druid looks for an instance of SSLContext Guice binding
Expand Down
Loading