diff --git a/tests/data/demo_recording/Neon Scene Camera v1 ps1.time b/tests/data/demo_recording/Neon Scene Camera v1 ps1.time new file mode 100644 index 0000000..2b60d13 Binary files /dev/null and b/tests/data/demo_recording/Neon Scene Camera v1 ps1.time differ diff --git a/tests/data/demo_recording/Neon Scene Camera v1 ps1.time_aux b/tests/data/demo_recording/Neon Scene Camera v1 ps1.time_aux new file mode 100644 index 0000000..a25d361 Binary files /dev/null and b/tests/data/demo_recording/Neon Scene Camera v1 ps1.time_aux differ diff --git a/tests/data/demo_recording/Neon Sensor Module v1 ps1.time b/tests/data/demo_recording/Neon Sensor Module v1 ps1.time new file mode 100644 index 0000000..c01bf52 Binary files /dev/null and b/tests/data/demo_recording/Neon Sensor Module v1 ps1.time differ diff --git a/tests/data/demo_recording/Neon Sensor Module v1 ps1.time_aux b/tests/data/demo_recording/Neon Sensor Module v1 ps1.time_aux new file mode 100644 index 0000000..1a19637 Binary files /dev/null and b/tests/data/demo_recording/Neon Sensor Module v1 ps1.time_aux differ diff --git a/tests/data/demo_recording/Neon Sensor Module v1_sae_log_1.bin b/tests/data/demo_recording/Neon Sensor Module v1_sae_log_1.bin new file mode 100644 index 0000000..9e0f96a Binary files /dev/null and b/tests/data/demo_recording/Neon Sensor Module v1_sae_log_1.bin differ diff --git a/tests/data/demo_recording/android.log.zip b/tests/data/demo_recording/android.log.zip new file mode 100644 index 0000000..c60f088 Binary files /dev/null and b/tests/data/demo_recording/android.log.zip differ diff --git a/tests/data/demo_recording/calibration.bin b/tests/data/demo_recording/calibration.bin new file mode 100644 index 0000000..1f20895 Binary files /dev/null and b/tests/data/demo_recording/calibration.bin differ diff --git a/tests/data/demo_recording/event.time b/tests/data/demo_recording/event.time new file mode 100644 index 0000000..7492fa2 Binary files /dev/null and b/tests/data/demo_recording/event.time differ diff --git a/tests/data/demo_recording/event.txt b/tests/data/demo_recording/event.txt new file mode 100644 index 0000000..44b27bb --- /dev/null +++ b/tests/data/demo_recording/event.txt @@ -0,0 +1,2 @@ +recording.begin +recording.end diff --git a/tests/data/demo_recording/extimu ps1.raw b/tests/data/demo_recording/extimu ps1.raw new file mode 100644 index 0000000..63e3aef Binary files /dev/null and b/tests/data/demo_recording/extimu ps1.raw differ diff --git a/tests/data/demo_recording/extimu ps1.time b/tests/data/demo_recording/extimu ps1.time new file mode 100644 index 0000000..34cf7d3 Binary files /dev/null and b/tests/data/demo_recording/extimu ps1.time differ diff --git a/tests/data/demo_recording/eye_state ps1.raw b/tests/data/demo_recording/eye_state ps1.raw new file mode 100644 index 0000000..07f805c Binary files /dev/null and b/tests/data/demo_recording/eye_state ps1.raw differ diff --git a/tests/data/demo_recording/eye_state ps1.time b/tests/data/demo_recording/eye_state ps1.time new file mode 100644 index 0000000..a12387d Binary files /dev/null and b/tests/data/demo_recording/eye_state ps1.time differ diff --git a/tests/data/demo_recording/gaze ps1.raw b/tests/data/demo_recording/gaze ps1.raw new file mode 100644 index 0000000..fb8c681 Binary files /dev/null and b/tests/data/demo_recording/gaze ps1.raw differ diff --git a/tests/data/demo_recording/gaze ps1.time b/tests/data/demo_recording/gaze ps1.time new file mode 100644 index 0000000..a12387d Binary files /dev/null and b/tests/data/demo_recording/gaze ps1.time differ diff --git a/tests/data/demo_recording/gaze_200hz.raw b/tests/data/demo_recording/gaze_200hz.raw new file mode 100644 index 0000000..22c1abf Binary files /dev/null and b/tests/data/demo_recording/gaze_200hz.raw differ diff --git a/tests/data/demo_recording/gaze_200hz.time b/tests/data/demo_recording/gaze_200hz.time new file mode 100644 index 0000000..c01bf52 Binary files /dev/null and b/tests/data/demo_recording/gaze_200hz.time differ diff --git a/tests/data/demo_recording/gaze_right ps1.raw b/tests/data/demo_recording/gaze_right ps1.raw new file mode 100644 index 0000000..63cd4cb Binary files /dev/null and b/tests/data/demo_recording/gaze_right ps1.raw differ diff --git a/tests/data/demo_recording/gaze_right ps1.time b/tests/data/demo_recording/gaze_right ps1.time new file mode 100644 index 0000000..284502e Binary files /dev/null and b/tests/data/demo_recording/gaze_right ps1.time differ diff --git a/tests/data/demo_recording/imu.proto b/tests/data/demo_recording/imu.proto new file mode 100644 index 0000000..e4764df --- /dev/null +++ b/tests/data/demo_recording/imu.proto @@ -0,0 +1,30 @@ +syntax = "proto3"; +package imuproto; +message AccelData { + float x = 1; + float y = 2; + float z = 3; + int32 reserved = 4; +} +message GyroData { + float x = 1; + float y = 2; + float z = 3; + int32 reserved = 4; +} +message QuaternionData { + // 4 floats for a unit quaternion + float w = 1; + float x = 2; + float y = 3; + float z = 4; + + float reserved = 5; +} + +message ImuPacket{ + uint64 tsNs = 1; + AccelData accelData = 2; + GyroData gyroData = 3; + QuaternionData quaternionData = 4; +} diff --git a/tests/data/demo_recording/info.json b/tests/data/demo_recording/info.json new file mode 100644 index 0000000..7551165 --- /dev/null +++ b/tests/data/demo_recording/info.json @@ -0,0 +1,32 @@ +{ + "recording_id": "1fe9c984-ef69-443f-8935-a0d385b63250", + "workspace_id": "805abbd1-b56b-4dc9-9179-532eead979bd", + "data_format_version": "2.3", + "app_version": "2.8.30-stage", + "start_time": 1726825501543000000, + "duration": 11013000000, + "android_device_id": "e6f98cdfb9268aa8", + "android_device_name": "Neon Companion", + "android_device_model": "rtwo_g", + "module_serial_number": "537468", + "wearer_id": "ade59fa1-67d7-4750-86c0-29c1deb28f80", + "template_data": { + "id": "dbb5bbc8-9c02-482b-8c42-11c6c98b6ec9", + "version": "2020-09-08T12:43:11.532000Z", + "recording_name": "2024-09-20:16:45:01", + "data": {} + }, + "gaze_offset": [27.986145, -13.577515], + "calib_version": 1, + "pipeline_version": "2.7.0", + "os_version": "13", + "frame_id": "9", + "frame_name": "Is this thing on", + "firmware_version": [24, 8], + "gaze_frequency": 200, + "wearer_ied": 63.0, + "developer_settings": { + "post_processing": ["pp_inextrinsics", "pp_filtering"], + "gaze_processor": "GPU" + } +} diff --git a/tests/data/demo_recording/manifest.json b/tests/data/demo_recording/manifest.json new file mode 100644 index 0000000..69f86bd --- /dev/null +++ b/tests/data/demo_recording/manifest.json @@ -0,0 +1,46 @@ +[ + { "name": "template.json", "size": 330, "crc": "c0b8d861" }, + { "name": "wearer.json", "size": 62, "crc": "df8899eb" }, + { "name": "event.txt", "size": 30, "crc": "49b39f4f" }, + { "name": "event.time", "size": 16, "crc": "39fcf8c7" }, + { "name": "imu.proto", "size": 545, "crc": "3a1f5b48" }, + { + "name": "Neon Scene Camera v1 ps1.mp4", + "size": 8063316, + "crc": "a4d18d2a" + }, + { "name": "Neon Scene Camera v1 ps1.time", "size": 2448, "crc": "6f419d79" }, + { + "name": "Neon Scene Camera v1 ps1.time_aux", + "size": 2448, + "crc": "cac4e3b3" + }, + { + "name": "Neon Sensor Module v1 ps1.mp4", + "size": 4400907, + "crc": "1ef4ab7b" + }, + { "name": "Neon Sensor Module v1 ps1.time", "size": 15608, "crc": "3a6bf15" }, + { + "name": "Neon Sensor Module v1 ps1.time_aux", + "size": 15608, + "crc": "3d4d6019" + }, + { "name": "extimu ps1.raw", "size": 82050, "crc": "3164a6c5" }, + { "name": "extimu ps1.time", "size": 8752, "crc": "bc48157" }, + { "name": "calibration.bin", "size": 803, "crc": "2144df1c" }, + { "name": "eye_state ps1.raw", "size": 98224, "crc": "7527ba9c" }, + { "name": "worn ps1.raw", "size": 1754, "crc": "e00d1783" }, + { "name": "gaze_right ps1.raw", "size": 14032, "crc": "a5fdcf6" }, + { "name": "gaze ps1.raw", "size": 14032, "crc": "baaf3e24" }, + { "name": "eye_state ps1.time", "size": 14032, "crc": "e971bb40" }, + { "name": "gaze_right ps1.time", "size": 14032, "crc": "fa58848d" }, + { "name": "gaze ps1.time", "size": 14032, "crc": "e971bb40" }, + { + "name": "Neon Sensor Module v1_sae_log_1.bin", + "size": 1048576, + "crc": "a738ea1c" + }, + { "name": "info.json", "size": 878, "crc": "4e77043d" }, + { "name": "android.log.zip", "size": 21562, "crc": "1877da24" } +] diff --git a/tests/data/demo_recording/manifest.json.crc b/tests/data/demo_recording/manifest.json.crc new file mode 100644 index 0000000..b7c2bac --- /dev/null +++ b/tests/data/demo_recording/manifest.json.crc @@ -0,0 +1 @@ +1751d99 diff --git a/tests/data/demo_recording/template.json b/tests/data/demo_recording/template.json new file mode 100644 index 0000000..ccb0dd2 --- /dev/null +++ b/tests/data/demo_recording/template.json @@ -0,0 +1,13 @@ +{ + "archived_at": null, + "created_at": "2020-09-08T12:42:11.704000Z", + "published_at": null, + "id": "dbb5bbc8-9c02-482b-8c42-11c6c98b6ec9", + "name": "auto_name: date and time", + "recording_ids": null, + "recording_name_format": ["{date}", ":", "{time}"], + "is_default_template": false, + "description": "", + "items": [], + "updated_at": "2021-05-05T15:50:54.229835Z" +} diff --git a/tests/data/demo_recording/wearer.json b/tests/data/demo_recording/wearer.json new file mode 100644 index 0000000..2fb893c --- /dev/null +++ b/tests/data/demo_recording/wearer.json @@ -0,0 +1 @@ +{ "name": "Fon ", "uuid": "ade59fa1-67d7-4750-86c0-29c1deb28f80" } diff --git a/tests/data/demo_recording/worn ps1.raw b/tests/data/demo_recording/worn ps1.raw new file mode 100644 index 0000000..8cf0f42 --- /dev/null +++ b/tests/data/demo_recording/worn ps1.raw @@ -0,0 +1 @@ +ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ diff --git a/tests/data/demo_recording/worn_200hz.raw b/tests/data/demo_recording/worn_200hz.raw new file mode 100644 index 0000000..cbe54a6 --- /dev/null +++ b/tests/data/demo_recording/worn_200hz.raw @@ -0,0 +1 @@ +ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ