diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..e69de29
diff --git a/.idea/.idea.lilos-stitcher/.idea/.gitignore b/.idea/.idea.lilos-stitcher/.idea/.gitignore
new file mode 100644
index 0000000..e99c64f
--- /dev/null
+++ b/.idea/.idea.lilos-stitcher/.idea/.gitignore
@@ -0,0 +1,13 @@
+# Default ignored files
+/shelf/
+/workspace.xml
+# Rider ignored files
+/contentModel.xml
+/.idea.lilos-stitcher.iml
+/modules.xml
+/projectSettingsUpdater.xml
+# Editor-based HTTP Client requests
+/httpRequests/
+# Datasource local storage ignored files
+/dataSources/
+/dataSources.local.xml
diff --git a/.idea/.idea.lilos-stitcher/.idea/.name b/.idea/.idea.lilos-stitcher/.idea/.name
new file mode 100644
index 0000000..5aae2b7
--- /dev/null
+++ b/.idea/.idea.lilos-stitcher/.idea/.name
@@ -0,0 +1 @@
+lilos-stitcher
\ No newline at end of file
diff --git a/.idea/.idea.lilos-stitcher/.idea/aws.xml b/.idea/.idea.lilos-stitcher/.idea/aws.xml
new file mode 100644
index 0000000..b63b642
--- /dev/null
+++ b/.idea/.idea.lilos-stitcher/.idea/aws.xml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/.idea.lilos-stitcher/.idea/encodings.xml b/.idea/.idea.lilos-stitcher/.idea/encodings.xml
new file mode 100644
index 0000000..df87cf9
--- /dev/null
+++ b/.idea/.idea.lilos-stitcher/.idea/encodings.xml
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/.idea/.idea.lilos-stitcher/.idea/indexLayout.xml b/.idea/.idea.lilos-stitcher/.idea/indexLayout.xml
new file mode 100644
index 0000000..7b08163
--- /dev/null
+++ b/.idea/.idea.lilos-stitcher/.idea/indexLayout.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/.idea.lilos-stitcher/.idea/vcs.xml b/.idea/.idea.lilos-stitcher/.idea/vcs.xml
new file mode 100644
index 0000000..35eb1dd
--- /dev/null
+++ b/.idea/.idea.lilos-stitcher/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/LiloController.cs b/LiloController.cs
index ce39378..989b972 100644
--- a/LiloController.cs
+++ b/LiloController.cs
@@ -1,17 +1,18 @@
+using lilos_stitcher;
using Microsoft.AspNetCore.Mvc;
namespace LiloStitcher;
[ApiController]
[Route( "api/image" )]
-public sealed class LiloController( LiloStitcher stitcher ) : ControllerBase
+public sealed class LiloController( lilos_stitcher.LiloStitcher stitcher ) : ControllerBase
{
- [HttpPost]
- [Route( "generate" )]
- [Produces( "image/png" )]
- public async Task Generate( [FromBody] GenerateRequest payload, CancellationToken ct )
- {
- var png = await stitcher.CreateImageAsync( payload, ct );
- return File( png, "image/png" );
- }
+ [HttpPost]
+ [Route( "generate" )]
+ [Produces( "image/png" )]
+ public async Task Generate( [FromBody] GenerateRequest payload, CancellationToken ct )
+ {
+ string path = await stitcher.CreateImageAsync( payload, ct );
+ return PhysicalFile(path, "image/png", enableRangeProcessing: false);
+ }
}
\ No newline at end of file
diff --git a/LiloStitcher.cs b/LiloStitcher.cs
index 64e3a52..afee0dd 100644
--- a/LiloStitcher.cs
+++ b/LiloStitcher.cs
@@ -1,7 +1,7 @@
using Microsoft.Extensions.Caching.Memory;
using NetVips;
-namespace LiloStitcher;
+namespace lilos_stitcher;
public sealed record GenerateRequest(
string Canvas_Rect,
@@ -60,10 +60,12 @@ public class TileLoader( TileCache cache, string assetDir )
public class LiloStitcher( TileLoader loader )
{
- public async Task CreateImageAsync( GenerateRequest req, CancellationToken ct )
+ public async Task CreateImageAsync( GenerateRequest req, CancellationToken ct )
{
(int rowMin, int colMin, int rows, int cols) = ParseCanvas( req.Canvas_Rect );
+ Validate(req.Crop_Offset, nameof(req.Crop_Offset));
+ Validate(req.Crop_Size, nameof(req.Crop_Size));
double scale = req.Output_Scale;
if( scale <= 0 || scale > 1 )
throw new ArgumentOutOfRangeException( nameof( req.Output_Scale ) );
@@ -82,8 +84,8 @@ public class LiloStitcher( TileLoader loader )
var mosaic = Image.Arrayjoin( tiles.ToArray(), across: cols );
- int offsetX = (int)Math.Truncate( req.Output_Scale * mosaic.Width );
- int offsetY = (int)Math.Truncate( req.Output_Scale * mosaic.Height );
+ int offsetX = (int)Math.Truncate( req.Crop_Offset[0] * mosaic.Width );
+ int offsetY = (int)Math.Truncate( req.Crop_Offset[1] * mosaic.Height );
int restWidth = mosaic.Width - offsetX;
int restHeight = mosaic.Height - offsetY;
@@ -96,13 +98,9 @@ public class LiloStitcher( TileLoader loader )
var cropped = mosaic.Crop( cropX, cropY, cropWidth, cropHeight );
- var finalImg = scale < 1.0 ? cropped.Resize( scale ) : cropped;
-
- string tmp = Path.GetTempFileName() + ".png";
- finalImg.WriteToFile( tmp );
- byte[] result = await File.ReadAllBytesAsync( tmp, ct );
- File.Delete( tmp );
- return result;
+ string path = Path.Combine(Path.GetTempPath(), $"mosaic-{Guid.NewGuid():N}.png");
+ cropped.WriteToFile(path);
+ return path;
}
private static (int rowMin, int colMin, int rows, int cols) ParseCanvas( string rect )
diff --git a/Program.cs b/Program.cs
index 05492df..45317c4 100644
--- a/Program.cs
+++ b/Program.cs
@@ -1,19 +1,20 @@
+using lilos_stitcher;
+
var builder = WebApplication.CreateBuilder(args);
-// Add services to the container.
-// Learn more about configuring OpenAPI at https://aka.ms/aspnet/openapi
-// builder.Services.AddOpenApi();
+NetVips.NetVips.Init();
+NetVips.NetVips.Concurrency = 3;
-builder.Services.AddControllers().AddJsonOptions(options => options.JsonSerializerOptions.PropertyNameCaseInsensitive = true);
+builder.Services.AddControllers().AddJsonOptions(o => o.JsonSerializerOptions.PropertyNameCaseInsensitive = true);
-builder.Services.AddMemoryCache(o => o.SizeLimit = 256 * 1024 * 1024);
+builder.Services.AddMemoryCache(o => o.SizeLimit = 128L * 1024 * 1024);
-builder.Services.AddSingleton();
-builder.Services.AddSingleton();
-builder.Services.AddSingleton();
+string assetDir = Path.GetFullPath("../tiles1705");
+
+builder.Services.AddSingleton();
+builder.Services.AddSingleton(provider => new TileLoader(provider.GetRequiredService(), assetDir));
+builder.Services.AddSingleton();
var app = builder.Build();
-
app.MapControllers();
-
app.Run();
\ No newline at end of file
diff --git a/bin/Debug/net9.0/Microsoft.Extensions.Caching.Abstractions.dll b/bin/Debug/net9.0/Microsoft.Extensions.Caching.Abstractions.dll
new file mode 100755
index 0000000..9d4019d
Binary files /dev/null and b/bin/Debug/net9.0/Microsoft.Extensions.Caching.Abstractions.dll differ
diff --git a/bin/Debug/net9.0/Microsoft.Extensions.Caching.Memory.dll b/bin/Debug/net9.0/Microsoft.Extensions.Caching.Memory.dll
new file mode 100755
index 0000000..95ad605
Binary files /dev/null and b/bin/Debug/net9.0/Microsoft.Extensions.Caching.Memory.dll differ
diff --git a/bin/Debug/net9.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll b/bin/Debug/net9.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll
new file mode 100755
index 0000000..ffb618d
Binary files /dev/null and b/bin/Debug/net9.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll differ
diff --git a/bin/Debug/net9.0/Microsoft.Extensions.Logging.Abstractions.dll b/bin/Debug/net9.0/Microsoft.Extensions.Logging.Abstractions.dll
new file mode 100755
index 0000000..35c9c41
Binary files /dev/null and b/bin/Debug/net9.0/Microsoft.Extensions.Logging.Abstractions.dll differ
diff --git a/bin/Debug/net9.0/Microsoft.Extensions.Options.dll b/bin/Debug/net9.0/Microsoft.Extensions.Options.dll
new file mode 100755
index 0000000..12a5dfb
Binary files /dev/null and b/bin/Debug/net9.0/Microsoft.Extensions.Options.dll differ
diff --git a/bin/Debug/net9.0/Microsoft.Extensions.Primitives.dll b/bin/Debug/net9.0/Microsoft.Extensions.Primitives.dll
new file mode 100755
index 0000000..da50991
Binary files /dev/null and b/bin/Debug/net9.0/Microsoft.Extensions.Primitives.dll differ
diff --git a/bin/Debug/net9.0/NetVips.dll b/bin/Debug/net9.0/NetVips.dll
new file mode 100755
index 0000000..fca1122
Binary files /dev/null and b/bin/Debug/net9.0/NetVips.dll differ
diff --git a/bin/Debug/net9.0/System.Diagnostics.DiagnosticSource.dll b/bin/Debug/net9.0/System.Diagnostics.DiagnosticSource.dll
new file mode 100755
index 0000000..0eb07d4
Binary files /dev/null and b/bin/Debug/net9.0/System.Diagnostics.DiagnosticSource.dll differ
diff --git a/bin/Debug/net9.0/appsettings.Development.json b/bin/Debug/net9.0/appsettings.Development.json
new file mode 100644
index 0000000..0c208ae
--- /dev/null
+++ b/bin/Debug/net9.0/appsettings.Development.json
@@ -0,0 +1,8 @@
+{
+ "Logging": {
+ "LogLevel": {
+ "Default": "Information",
+ "Microsoft.AspNetCore": "Warning"
+ }
+ }
+}
diff --git a/bin/Debug/net9.0/appsettings.json b/bin/Debug/net9.0/appsettings.json
new file mode 100644
index 0000000..10f68b8
--- /dev/null
+++ b/bin/Debug/net9.0/appsettings.json
@@ -0,0 +1,9 @@
+{
+ "Logging": {
+ "LogLevel": {
+ "Default": "Information",
+ "Microsoft.AspNetCore": "Warning"
+ }
+ },
+ "AllowedHosts": "*"
+}
diff --git a/bin/Debug/net9.0/lilos-stitcher b/bin/Debug/net9.0/lilos-stitcher
new file mode 100755
index 0000000..09a9ae4
Binary files /dev/null and b/bin/Debug/net9.0/lilos-stitcher differ
diff --git a/bin/Debug/net9.0/lilos-stitcher.deps.json b/bin/Debug/net9.0/lilos-stitcher.deps.json
new file mode 100644
index 0000000..f550df0
--- /dev/null
+++ b/bin/Debug/net9.0/lilos-stitcher.deps.json
@@ -0,0 +1,182 @@
+{
+ "runtimeTarget": {
+ "name": ".NETCoreApp,Version=v9.0",
+ "signature": ""
+ },
+ "compilationOptions": {},
+ "targets": {
+ ".NETCoreApp,Version=v9.0": {
+ "lilos-stitcher/1.0.0": {
+ "dependencies": {
+ "Microsoft.Extensions.Caching.Memory": "10.0.0-preview.6.25358.103",
+ "NetVips": "3.1.0",
+ "NetVips.Native.linux-x64": "8.17.1"
+ },
+ "runtime": {
+ "lilos-stitcher.dll": {}
+ }
+ },
+ "Microsoft.Extensions.Caching.Abstractions/10.0.0-preview.6.25358.103": {
+ "dependencies": {
+ "Microsoft.Extensions.Primitives": "10.0.0-preview.6.25358.103"
+ },
+ "runtime": {
+ "lib/net9.0/Microsoft.Extensions.Caching.Abstractions.dll": {
+ "assemblyVersion": "10.0.0.0",
+ "fileVersion": "10.0.25.35903"
+ }
+ }
+ },
+ "Microsoft.Extensions.Caching.Memory/10.0.0-preview.6.25358.103": {
+ "dependencies": {
+ "Microsoft.Extensions.Caching.Abstractions": "10.0.0-preview.6.25358.103",
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0-preview.6.25358.103",
+ "Microsoft.Extensions.Logging.Abstractions": "10.0.0-preview.6.25358.103",
+ "Microsoft.Extensions.Options": "10.0.0-preview.6.25358.103",
+ "Microsoft.Extensions.Primitives": "10.0.0-preview.6.25358.103"
+ },
+ "runtime": {
+ "lib/net9.0/Microsoft.Extensions.Caching.Memory.dll": {
+ "assemblyVersion": "10.0.0.0",
+ "fileVersion": "10.0.25.35903"
+ }
+ }
+ },
+ "Microsoft.Extensions.DependencyInjection.Abstractions/10.0.0-preview.6.25358.103": {
+ "runtime": {
+ "lib/net9.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll": {
+ "assemblyVersion": "10.0.0.0",
+ "fileVersion": "10.0.25.35903"
+ }
+ }
+ },
+ "Microsoft.Extensions.Logging.Abstractions/10.0.0-preview.6.25358.103": {
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0-preview.6.25358.103",
+ "System.Diagnostics.DiagnosticSource": "10.0.0-preview.6.25358.103"
+ },
+ "runtime": {
+ "lib/net9.0/Microsoft.Extensions.Logging.Abstractions.dll": {
+ "assemblyVersion": "10.0.0.0",
+ "fileVersion": "10.0.25.35903"
+ }
+ }
+ },
+ "Microsoft.Extensions.Options/10.0.0-preview.6.25358.103": {
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0-preview.6.25358.103",
+ "Microsoft.Extensions.Primitives": "10.0.0-preview.6.25358.103"
+ },
+ "runtime": {
+ "lib/net9.0/Microsoft.Extensions.Options.dll": {
+ "assemblyVersion": "10.0.0.0",
+ "fileVersion": "10.0.25.35903"
+ }
+ }
+ },
+ "Microsoft.Extensions.Primitives/10.0.0-preview.6.25358.103": {
+ "runtime": {
+ "lib/net9.0/Microsoft.Extensions.Primitives.dll": {
+ "assemblyVersion": "10.0.0.0",
+ "fileVersion": "10.0.25.35903"
+ }
+ }
+ },
+ "NetVips/3.1.0": {
+ "runtime": {
+ "lib/net6.0/NetVips.dll": {
+ "assemblyVersion": "3.1.0.0",
+ "fileVersion": "3.1.0.0"
+ }
+ }
+ },
+ "NetVips.Native.linux-x64/8.17.1": {
+ "runtimeTargets": {
+ "runtimes/linux-x64/native/libvips.so.42": {
+ "rid": "linux-x64",
+ "assetType": "native",
+ "fileVersion": "0.0.0.0"
+ }
+ }
+ },
+ "System.Diagnostics.DiagnosticSource/10.0.0-preview.6.25358.103": {
+ "runtime": {
+ "lib/net9.0/System.Diagnostics.DiagnosticSource.dll": {
+ "assemblyVersion": "10.0.0.0",
+ "fileVersion": "10.0.25.35903"
+ }
+ }
+ }
+ }
+ },
+ "libraries": {
+ "lilos-stitcher/1.0.0": {
+ "type": "project",
+ "serviceable": false,
+ "sha512": ""
+ },
+ "Microsoft.Extensions.Caching.Abstractions/10.0.0-preview.6.25358.103": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-XueBRYerg0fC13swErWCHB8zJ7feYt5R5Und/CjDy45DIccK7MvGJ2aSrtg+OUvPCUinJYphBaLiarfrLuIWfw==",
+ "path": "microsoft.extensions.caching.abstractions/10.0.0-preview.6.25358.103",
+ "hashPath": "microsoft.extensions.caching.abstractions.10.0.0-preview.6.25358.103.nupkg.sha512"
+ },
+ "Microsoft.Extensions.Caching.Memory/10.0.0-preview.6.25358.103": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-TnEV0E/xlGsAX2zXwdmBVyHcKCAXm7zlOXavdFF7HyHWf0qiReM1ZAvnCDGMERippHxqqUtXC3koZ2uz28UvhQ==",
+ "path": "microsoft.extensions.caching.memory/10.0.0-preview.6.25358.103",
+ "hashPath": "microsoft.extensions.caching.memory.10.0.0-preview.6.25358.103.nupkg.sha512"
+ },
+ "Microsoft.Extensions.DependencyInjection.Abstractions/10.0.0-preview.6.25358.103": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-XrX5CQwI6dnGvmPJJxf/X1JxhPzRwdKKUf9onJKN+qyqP+wwH9floTgkckGdJxVV+jvnWeUgSJ6MZvQM6WmwSg==",
+ "path": "microsoft.extensions.dependencyinjection.abstractions/10.0.0-preview.6.25358.103",
+ "hashPath": "microsoft.extensions.dependencyinjection.abstractions.10.0.0-preview.6.25358.103.nupkg.sha512"
+ },
+ "Microsoft.Extensions.Logging.Abstractions/10.0.0-preview.6.25358.103": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-ktG/8xOcrtBL176cYv6mzOL+YRSPySE8hcppHonAXYa8jf3lW/WmxfAUwK0WtUEl7MdYR8mbuEAbSg81crBq5Q==",
+ "path": "microsoft.extensions.logging.abstractions/10.0.0-preview.6.25358.103",
+ "hashPath": "microsoft.extensions.logging.abstractions.10.0.0-preview.6.25358.103.nupkg.sha512"
+ },
+ "Microsoft.Extensions.Options/10.0.0-preview.6.25358.103": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-V3IaV1wPAVpVfDrOK0b4xKZVEHMFlYSL0Wfx6/Tm8bt4ovodorVqHe/EvsogWmsbcj1XhJvFuWXVDuG479i2vw==",
+ "path": "microsoft.extensions.options/10.0.0-preview.6.25358.103",
+ "hashPath": "microsoft.extensions.options.10.0.0-preview.6.25358.103.nupkg.sha512"
+ },
+ "Microsoft.Extensions.Primitives/10.0.0-preview.6.25358.103": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-iSpD+A130hPiq20tbqKGujXtFY1Zc3q/R/AlN3qPpUYwmxEZbybykQ+YpiDzdyoGvo0gp/4vtk/Hqcvkwt53Gw==",
+ "path": "microsoft.extensions.primitives/10.0.0-preview.6.25358.103",
+ "hashPath": "microsoft.extensions.primitives.10.0.0-preview.6.25358.103.nupkg.sha512"
+ },
+ "NetVips/3.1.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-/8vwrHjZYO8ec2hXtHxzoreA8TGeSUlcbM+EBc951jlhNQ3n6KfjmZSDQ4T3Is2YS/+FPQrAEUnMIXV2IhxRfg==",
+ "path": "netvips/3.1.0",
+ "hashPath": "netvips.3.1.0.nupkg.sha512"
+ },
+ "NetVips.Native.linux-x64/8.17.1": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-i5enEqi0SDWKoinxP/cyjq7T4Vo8bDCfvv5Nf5smBdynAj6EuyNxDaZ54inRjcRD2pA8hZV7mW9gI5H/v/Ls2w==",
+ "path": "netvips.native.linux-x64/8.17.1",
+ "hashPath": "netvips.native.linux-x64.8.17.1.nupkg.sha512"
+ },
+ "System.Diagnostics.DiagnosticSource/10.0.0-preview.6.25358.103": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-SmleXl7WsR4hURxBWoTqeCVt8B+doEKMJRev9fxbqdSi5r18kTX/wYqsNePbq/eJeoq3x8UlngVwxwXplYXXfg==",
+ "path": "system.diagnostics.diagnosticsource/10.0.0-preview.6.25358.103",
+ "hashPath": "system.diagnostics.diagnosticsource.10.0.0-preview.6.25358.103.nupkg.sha512"
+ }
+ }
+}
\ No newline at end of file
diff --git a/bin/Debug/net9.0/lilos-stitcher.dll b/bin/Debug/net9.0/lilos-stitcher.dll
new file mode 100644
index 0000000..6a7cafd
Binary files /dev/null and b/bin/Debug/net9.0/lilos-stitcher.dll differ
diff --git a/bin/Debug/net9.0/lilos-stitcher.pdb b/bin/Debug/net9.0/lilos-stitcher.pdb
new file mode 100644
index 0000000..7661e09
Binary files /dev/null and b/bin/Debug/net9.0/lilos-stitcher.pdb differ
diff --git a/bin/Debug/net9.0/lilos-stitcher.runtimeconfig.json b/bin/Debug/net9.0/lilos-stitcher.runtimeconfig.json
new file mode 100644
index 0000000..6925b65
--- /dev/null
+++ b/bin/Debug/net9.0/lilos-stitcher.runtimeconfig.json
@@ -0,0 +1,19 @@
+{
+ "runtimeOptions": {
+ "tfm": "net9.0",
+ "frameworks": [
+ {
+ "name": "Microsoft.NETCore.App",
+ "version": "9.0.0"
+ },
+ {
+ "name": "Microsoft.AspNetCore.App",
+ "version": "9.0.0"
+ }
+ ],
+ "configProperties": {
+ "System.GC.Server": true,
+ "System.Runtime.Serialization.EnableUnsafeBinaryFormatterSerialization": false
+ }
+ }
+}
\ No newline at end of file
diff --git a/bin/Debug/net9.0/lilos-stitcher.staticwebassets.endpoints.json b/bin/Debug/net9.0/lilos-stitcher.staticwebassets.endpoints.json
new file mode 100644
index 0000000..2b6c535
--- /dev/null
+++ b/bin/Debug/net9.0/lilos-stitcher.staticwebassets.endpoints.json
@@ -0,0 +1,5 @@
+{
+ "Version": 1,
+ "ManifestType": "Build",
+ "Endpoints": []
+}
\ No newline at end of file
diff --git a/bin/Debug/net9.0/runtimes/linux-x64/native/libvips.so.42 b/bin/Debug/net9.0/runtimes/linux-x64/native/libvips.so.42
new file mode 100755
index 0000000..c2b1a30
Binary files /dev/null and b/bin/Debug/net9.0/runtimes/linux-x64/native/libvips.so.42 differ
diff --git a/lilos-stitcher.csproj b/lilos-stitcher.csproj
index 9595d49..4cba3c8 100644
--- a/lilos-stitcher.csproj
+++ b/lilos-stitcher.csproj
@@ -5,13 +5,14 @@
enable
enable
lilos_stitcher
+ preview
-
-
+
+
diff --git a/obj/Debug/net9.0/apphost b/obj/Debug/net9.0/apphost
new file mode 100755
index 0000000..09a9ae4
Binary files /dev/null and b/obj/Debug/net9.0/apphost differ
diff --git a/obj/Debug/net9.0/lilos-st.76765E0E.Up2Date b/obj/Debug/net9.0/lilos-st.76765E0E.Up2Date
new file mode 100644
index 0000000..e69de29
diff --git a/obj/Debug/net9.0/lilos-stitcher.AssemblyInfo.cs b/obj/Debug/net9.0/lilos-stitcher.AssemblyInfo.cs
index 42df3fc..67e5310 100644
--- a/obj/Debug/net9.0/lilos-stitcher.AssemblyInfo.cs
+++ b/obj/Debug/net9.0/lilos-stitcher.AssemblyInfo.cs
@@ -13,7 +13,7 @@ using System.Reflection;
[assembly: System.Reflection.AssemblyCompanyAttribute("lilos-stitcher")]
[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
-[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+52e830b4595e0cb251e3dfbdcbc9d19375a383b5")]
+[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+93b41bfa9406fe943709d001f302600d189dc829")]
[assembly: System.Reflection.AssemblyProductAttribute("lilos-stitcher")]
[assembly: System.Reflection.AssemblyTitleAttribute("lilos-stitcher")]
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
diff --git a/obj/Debug/net9.0/lilos-stitcher.AssemblyInfoInputs.cache b/obj/Debug/net9.0/lilos-stitcher.AssemblyInfoInputs.cache
index 5556aa5..361e55c 100644
--- a/obj/Debug/net9.0/lilos-stitcher.AssemblyInfoInputs.cache
+++ b/obj/Debug/net9.0/lilos-stitcher.AssemblyInfoInputs.cache
@@ -1 +1 @@
-e411f29bb1f176555042f33adf388d33a6de8d142d88cbab7e6e2dd4102f6e62
+3dc6c83470f3eadbd02211471dd5a3fe0b626fa41426a0d6d362ecd1724e81db
diff --git a/obj/Debug/net9.0/lilos-stitcher.MvcApplicationPartsAssemblyInfo.cache b/obj/Debug/net9.0/lilos-stitcher.MvcApplicationPartsAssemblyInfo.cache
new file mode 100644
index 0000000..e69de29
diff --git a/obj/Debug/net9.0/lilos-stitcher.csproj.CoreCompileInputs.cache b/obj/Debug/net9.0/lilos-stitcher.csproj.CoreCompileInputs.cache
new file mode 100644
index 0000000..5f9e732
--- /dev/null
+++ b/obj/Debug/net9.0/lilos-stitcher.csproj.CoreCompileInputs.cache
@@ -0,0 +1 @@
+613b45ccb9660990d13271b1a0505db6865bd3897a2f4a0d6579f0c78c603672
diff --git a/obj/Debug/net9.0/lilos-stitcher.csproj.FileListAbsolute.txt b/obj/Debug/net9.0/lilos-stitcher.csproj.FileListAbsolute.txt
new file mode 100644
index 0000000..51c87e9
--- /dev/null
+++ b/obj/Debug/net9.0/lilos-stitcher.csproj.FileListAbsolute.txt
@@ -0,0 +1,39 @@
+/home/mbsbahru/Documents/Formulatrix Trivia/stitch-a-ton challenge/lilos-stitcher-aspnet/bin/Debug/net9.0/appsettings.Development.json
+/home/mbsbahru/Documents/Formulatrix Trivia/stitch-a-ton challenge/lilos-stitcher-aspnet/bin/Debug/net9.0/appsettings.json
+/home/mbsbahru/Documents/Formulatrix Trivia/stitch-a-ton challenge/lilos-stitcher-aspnet/bin/Debug/net9.0/lilos-stitcher.staticwebassets.endpoints.json
+/home/mbsbahru/Documents/Formulatrix Trivia/stitch-a-ton challenge/lilos-stitcher-aspnet/bin/Debug/net9.0/lilos-stitcher
+/home/mbsbahru/Documents/Formulatrix Trivia/stitch-a-ton challenge/lilos-stitcher-aspnet/bin/Debug/net9.0/lilos-stitcher.deps.json
+/home/mbsbahru/Documents/Formulatrix Trivia/stitch-a-ton challenge/lilos-stitcher-aspnet/bin/Debug/net9.0/lilos-stitcher.runtimeconfig.json
+/home/mbsbahru/Documents/Formulatrix Trivia/stitch-a-ton challenge/lilos-stitcher-aspnet/bin/Debug/net9.0/lilos-stitcher.dll
+/home/mbsbahru/Documents/Formulatrix Trivia/stitch-a-ton challenge/lilos-stitcher-aspnet/bin/Debug/net9.0/lilos-stitcher.pdb
+/home/mbsbahru/Documents/Formulatrix Trivia/stitch-a-ton challenge/lilos-stitcher-aspnet/bin/Debug/net9.0/Microsoft.Extensions.Caching.Abstractions.dll
+/home/mbsbahru/Documents/Formulatrix Trivia/stitch-a-ton challenge/lilos-stitcher-aspnet/bin/Debug/net9.0/Microsoft.Extensions.Caching.Memory.dll
+/home/mbsbahru/Documents/Formulatrix Trivia/stitch-a-ton challenge/lilos-stitcher-aspnet/bin/Debug/net9.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll
+/home/mbsbahru/Documents/Formulatrix Trivia/stitch-a-ton challenge/lilos-stitcher-aspnet/bin/Debug/net9.0/Microsoft.Extensions.Logging.Abstractions.dll
+/home/mbsbahru/Documents/Formulatrix Trivia/stitch-a-ton challenge/lilos-stitcher-aspnet/bin/Debug/net9.0/Microsoft.Extensions.Options.dll
+/home/mbsbahru/Documents/Formulatrix Trivia/stitch-a-ton challenge/lilos-stitcher-aspnet/bin/Debug/net9.0/Microsoft.Extensions.Primitives.dll
+/home/mbsbahru/Documents/Formulatrix Trivia/stitch-a-ton challenge/lilos-stitcher-aspnet/bin/Debug/net9.0/NetVips.dll
+/home/mbsbahru/Documents/Formulatrix Trivia/stitch-a-ton challenge/lilos-stitcher-aspnet/bin/Debug/net9.0/System.Diagnostics.DiagnosticSource.dll
+/home/mbsbahru/Documents/Formulatrix Trivia/stitch-a-ton challenge/lilos-stitcher-aspnet/bin/Debug/net9.0/runtimes/linux-x64/native/libvips.so.42
+/home/mbsbahru/Documents/Formulatrix Trivia/stitch-a-ton challenge/lilos-stitcher-aspnet/obj/Debug/net9.0/lilos-stitcher.csproj.AssemblyReference.cache
+/home/mbsbahru/Documents/Formulatrix Trivia/stitch-a-ton challenge/lilos-stitcher-aspnet/obj/Debug/net9.0/lilos-stitcher.GeneratedMSBuildEditorConfig.editorconfig
+/home/mbsbahru/Documents/Formulatrix Trivia/stitch-a-ton challenge/lilos-stitcher-aspnet/obj/Debug/net9.0/lilos-stitcher.AssemblyInfoInputs.cache
+/home/mbsbahru/Documents/Formulatrix Trivia/stitch-a-ton challenge/lilos-stitcher-aspnet/obj/Debug/net9.0/lilos-stitcher.AssemblyInfo.cs
+/home/mbsbahru/Documents/Formulatrix Trivia/stitch-a-ton challenge/lilos-stitcher-aspnet/obj/Debug/net9.0/lilos-stitcher.csproj.CoreCompileInputs.cache
+/home/mbsbahru/Documents/Formulatrix Trivia/stitch-a-ton challenge/lilos-stitcher-aspnet/obj/Debug/net9.0/lilos-stitcher.MvcApplicationPartsAssemblyInfo.cache
+/home/mbsbahru/Documents/Formulatrix Trivia/stitch-a-ton challenge/lilos-stitcher-aspnet/obj/Debug/net9.0/scopedcss/bundle/lilos-stitcher.styles.css
+/home/mbsbahru/Documents/Formulatrix Trivia/stitch-a-ton challenge/lilos-stitcher-aspnet/obj/Debug/net9.0/staticwebassets.build.json
+/home/mbsbahru/Documents/Formulatrix Trivia/stitch-a-ton challenge/lilos-stitcher-aspnet/obj/Debug/net9.0/staticwebassets.development.json
+/home/mbsbahru/Documents/Formulatrix Trivia/stitch-a-ton challenge/lilos-stitcher-aspnet/obj/Debug/net9.0/staticwebassets.build.endpoints.json
+/home/mbsbahru/Documents/Formulatrix Trivia/stitch-a-ton challenge/lilos-stitcher-aspnet/obj/Debug/net9.0/staticwebassets/msbuild.lilos-stitcher.Microsoft.AspNetCore.StaticWebAssets.props
+/home/mbsbahru/Documents/Formulatrix Trivia/stitch-a-ton challenge/lilos-stitcher-aspnet/obj/Debug/net9.0/staticwebassets/msbuild.lilos-stitcher.Microsoft.AspNetCore.StaticWebAssetEndpoints.props
+/home/mbsbahru/Documents/Formulatrix Trivia/stitch-a-ton challenge/lilos-stitcher-aspnet/obj/Debug/net9.0/staticwebassets/msbuild.build.lilos-stitcher.props
+/home/mbsbahru/Documents/Formulatrix Trivia/stitch-a-ton challenge/lilos-stitcher-aspnet/obj/Debug/net9.0/staticwebassets/msbuild.buildMultiTargeting.lilos-stitcher.props
+/home/mbsbahru/Documents/Formulatrix Trivia/stitch-a-ton challenge/lilos-stitcher-aspnet/obj/Debug/net9.0/staticwebassets/msbuild.buildTransitive.lilos-stitcher.props
+/home/mbsbahru/Documents/Formulatrix Trivia/stitch-a-ton challenge/lilos-stitcher-aspnet/obj/Debug/net9.0/staticwebassets.pack.json
+/home/mbsbahru/Documents/Formulatrix Trivia/stitch-a-ton challenge/lilos-stitcher-aspnet/obj/Debug/net9.0/lilos-st.76765E0E.Up2Date
+/home/mbsbahru/Documents/Formulatrix Trivia/stitch-a-ton challenge/lilos-stitcher-aspnet/obj/Debug/net9.0/lilos-stitcher.dll
+/home/mbsbahru/Documents/Formulatrix Trivia/stitch-a-ton challenge/lilos-stitcher-aspnet/obj/Debug/net9.0/refint/lilos-stitcher.dll
+/home/mbsbahru/Documents/Formulatrix Trivia/stitch-a-ton challenge/lilos-stitcher-aspnet/obj/Debug/net9.0/lilos-stitcher.pdb
+/home/mbsbahru/Documents/Formulatrix Trivia/stitch-a-ton challenge/lilos-stitcher-aspnet/obj/Debug/net9.0/lilos-stitcher.genruntimeconfig.cache
+/home/mbsbahru/Documents/Formulatrix Trivia/stitch-a-ton challenge/lilos-stitcher-aspnet/obj/Debug/net9.0/ref/lilos-stitcher.dll
diff --git a/obj/Debug/net9.0/lilos-stitcher.dll b/obj/Debug/net9.0/lilos-stitcher.dll
new file mode 100644
index 0000000..6a7cafd
Binary files /dev/null and b/obj/Debug/net9.0/lilos-stitcher.dll differ
diff --git a/obj/Debug/net9.0/lilos-stitcher.genruntimeconfig.cache b/obj/Debug/net9.0/lilos-stitcher.genruntimeconfig.cache
new file mode 100644
index 0000000..2c68d36
--- /dev/null
+++ b/obj/Debug/net9.0/lilos-stitcher.genruntimeconfig.cache
@@ -0,0 +1 @@
+cb59882c55c199cb178155babea6ea543818ebcd764991434b53435bf6eec82f
diff --git a/obj/Debug/net9.0/lilos-stitcher.pdb b/obj/Debug/net9.0/lilos-stitcher.pdb
new file mode 100644
index 0000000..7661e09
Binary files /dev/null and b/obj/Debug/net9.0/lilos-stitcher.pdb differ
diff --git a/obj/Debug/net9.0/ref/lilos-stitcher.dll b/obj/Debug/net9.0/ref/lilos-stitcher.dll
new file mode 100644
index 0000000..e2d0606
Binary files /dev/null and b/obj/Debug/net9.0/ref/lilos-stitcher.dll differ
diff --git a/obj/Debug/net9.0/refint/lilos-stitcher.dll b/obj/Debug/net9.0/refint/lilos-stitcher.dll
new file mode 100644
index 0000000..e2d0606
Binary files /dev/null and b/obj/Debug/net9.0/refint/lilos-stitcher.dll differ
diff --git a/obj/Debug/net9.0/staticwebassets.build.endpoints.json b/obj/Debug/net9.0/staticwebassets.build.endpoints.json
new file mode 100644
index 0000000..2b6c535
--- /dev/null
+++ b/obj/Debug/net9.0/staticwebassets.build.endpoints.json
@@ -0,0 +1,5 @@
+{
+ "Version": 1,
+ "ManifestType": "Build",
+ "Endpoints": []
+}
\ No newline at end of file
diff --git a/obj/Debug/net9.0/staticwebassets.build.json b/obj/Debug/net9.0/staticwebassets.build.json
new file mode 100644
index 0000000..8f7343a
--- /dev/null
+++ b/obj/Debug/net9.0/staticwebassets.build.json
@@ -0,0 +1,12 @@
+{
+ "Version": 1,
+ "Hash": "oq4tqB+/i4rWgpvN6rrplq3J0ZkN+Kou7CVCH2kbC4Y=",
+ "Source": "lilos-stitcher",
+ "BasePath": "_content/lilos-stitcher",
+ "Mode": "Default",
+ "ManifestType": "Build",
+ "ReferencedProjectsConfiguration": [],
+ "DiscoveryPatterns": [],
+ "Assets": [],
+ "Endpoints": []
+}
\ No newline at end of file
diff --git a/obj/Debug/net9.0/staticwebassets/msbuild.build.lilos-stitcher.props b/obj/Debug/net9.0/staticwebassets/msbuild.build.lilos-stitcher.props
new file mode 100644
index 0000000..ddaed44
--- /dev/null
+++ b/obj/Debug/net9.0/staticwebassets/msbuild.build.lilos-stitcher.props
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/obj/Debug/net9.0/staticwebassets/msbuild.buildMultiTargeting.lilos-stitcher.props b/obj/Debug/net9.0/staticwebassets/msbuild.buildMultiTargeting.lilos-stitcher.props
new file mode 100644
index 0000000..d200c7f
--- /dev/null
+++ b/obj/Debug/net9.0/staticwebassets/msbuild.buildMultiTargeting.lilos-stitcher.props
@@ -0,0 +1,3 @@
+
+
+
\ No newline at end of file
diff --git a/obj/Debug/net9.0/staticwebassets/msbuild.buildTransitive.lilos-stitcher.props b/obj/Debug/net9.0/staticwebassets/msbuild.buildTransitive.lilos-stitcher.props
new file mode 100644
index 0000000..3916196
--- /dev/null
+++ b/obj/Debug/net9.0/staticwebassets/msbuild.buildTransitive.lilos-stitcher.props
@@ -0,0 +1,3 @@
+
+
+
\ No newline at end of file
diff --git a/obj/project.packagespec.json b/obj/project.packagespec.json
new file mode 100644
index 0000000..afa96b5
--- /dev/null
+++ b/obj/project.packagespec.json
@@ -0,0 +1 @@
+"restore":{"projectUniqueName":"/home/mbsbahru/Documents/Formulatrix Trivia/stitch-a-ton challenge/lilos-stitcher-aspnet/lilos-stitcher.csproj","projectName":"lilos-stitcher","projectPath":"/home/mbsbahru/Documents/Formulatrix Trivia/stitch-a-ton challenge/lilos-stitcher-aspnet/lilos-stitcher.csproj","outputPath":"/home/mbsbahru/Documents/Formulatrix Trivia/stitch-a-ton challenge/lilos-stitcher-aspnet/obj/","projectStyle":"PackageReference","originalTargetFrameworks":["net9.0"],"sources":{"/home/mbsbahru/nuget-local":{},"/usr/lib/dotnet/library-packs":{},"https://api.nuget.org/v3/index.json":{}},"frameworks":{"net9.0":{"targetAlias":"net9.0","projectReferences":{}}},"warningProperties":{"warnAsError":["NU1605"]}}"frameworks":{"net9.0":{"targetAlias":"net9.0","dependencies":{"Microsoft.Extensions.Caching.Memory":{"target":"Package","version":"[10.0.0-preview.6.25358.103, )"},"NetVips":{"target":"Package","version":"[3.1.0, )"},"NetVips.Native.linux-arm64":{"target":"Package","version":"[8.17.1, )"}},"imports":["net461","net462","net47","net471","net472","net48","net481"],"assetTargetFallback":true,"warn":true,"frameworkReferences":{"Microsoft.AspNetCore.App":{"privateAssets":"none"},"Microsoft.NETCore.App":{"privateAssets":"all"}},"runtimeIdentifierGraphPath":"/usr/lib/dotnet/sdk/9.0.108/PortableRuntimeIdentifierGraph.json"}}
\ No newline at end of file
diff --git a/obj/rider.project.model.nuget.info b/obj/rider.project.model.nuget.info
new file mode 100644
index 0000000..0dd3e96
--- /dev/null
+++ b/obj/rider.project.model.nuget.info
@@ -0,0 +1 @@
+17539815751780096
\ No newline at end of file
diff --git a/obj/rider.project.restore.info b/obj/rider.project.restore.info
new file mode 100644
index 0000000..90cced8
--- /dev/null
+++ b/obj/rider.project.restore.info
@@ -0,0 +1 @@
+17539828049734351
\ No newline at end of file