### Is there an existing issue for this?

- [X] I have searched the existing issues

### Current Behavior

When performing a multipart upload, sending part number 10000, because [this check](https://github.com/localstack/localstack/blob/d23f0717cc66c0cc8a61b6b85e7531a6f4a03f96/localstack/services/s3/provider.py#L792C88-L792C88) in s3/provider.py is wrong.

### Expected Behavior

Part number 10000 is accepted

### How are you starting LocalStack?

With a docker-compose file

### Steps To Reproduce

#### How are you starting localstack (e.g., `bin/localstack` command, arguments, or `docker-compose.yml`)

    docker run localstack/localstack

#### Client commands (e.g., AWS SDK code snippet, or sequence of "awslocal" commands)

I'm using AWS .NET SDK:

        using var inputStream = new MemoryStream(buffer, 0, readBytes, false);

        var uploadRequest = new UploadPartRequest
        {
            BucketName = bucketName,
            InputStream = inputStream,
            Key = key,
            PartNumber = partNumber,
            PartSize = readBytes,
            UploadId = uploadId,
        };

        await _client.UploadPartAsync(uploadRequest);


### Environment

```markdown
- OS: Ubuntu 22.04
- LocalStack: 2.2
```


### Anything else?

As referenced above, the bug is in [this line](https://github.com/localstack/localstack/blob/d23f0717cc66c0cc8a61b6b85e7531a6f4a03f96/localstack/services/s3/provider.py#L792C88-L792C88). It should read

    elif (part_number := request.get("PartNumber", 0)) < 1 or part_number > 10000:
self,
        context: RequestContext,
        request: PutBucketLifecycleConfigurationRequest,
    ) -> None:
        """This is technically supported in moto, however moto does not support multiple transitions action
        It will raise an TypeError trying to get dict attributes on a list. It would need a bigger rework on moto's side
        Moto has quite a good validation for the other Lifecycle fields, so it would be nice to be able to use it
        somehow. For now the behaviour is the same as before, aka no validation
        """
        
        bucket = request["Bucket"]
        moto_backend = get_moto_s3_backend(context)
        get_bucket_from_moto(moto_backend, bucket=bucket)
        lifecycle_conf = request.get("LifecycleConfiguration")
        validate_lifecycle_configuration(lifecycle_conf)
        
        
        
        store = self.get_store(context)
        store.bucket_lifecycle_configuration[bucket] = lifecycle_conf
        self._expiration_cache[bucket].clear()
    def delete_bucket_lifecycle(