MerryMage
88c9608eac
arm_dynarmic: Fix timing
2018-03-24 09:02:19 +00:00
Subv
9b9de30086
GPU: Added viewport registers to Maxwell3D's reg structure.
2018-03-24 01:22:19 -05:00
bunnei
a10baacf9e
Merge pull request #265 from bunnei/tegra-progress-2
...
Tegra progress 2
2018-03-23 23:30:48 -04:00
bunnei
d561e4acc8
gl_rasterizer: Fake render in green, because it's cooler.
2018-03-23 22:27:53 -04:00
bunnei
4ed54738fc
gl_rasterizer: Log warning instead of sync'ing unimplemented funcs.
2018-03-23 22:24:16 -04:00
bunnei
a397a9e9a4
Merge pull request #255 from Subv/sd_card
...
FS: Implemented access to the SD card
2018-03-23 20:48:26 -04:00
bunnei
b7da9d5a54
gl_rasterizer_cache: Add missing include for vm_manager.
2018-03-23 16:54:20 -04:00
bunnei
0f8401906b
renderer_opengl: Only invalidate the framebuffer region, not flush.
2018-03-23 15:52:14 -04:00
bunnei
054393917e
renderer_opengl: Fixes for properly flushing & rendering the framebuffer.
2018-03-23 15:49:04 -04:00
bunnei
b5f3e7951b
memory: Fix typo in RasterizerFlushVirtualRegion.
2018-03-23 15:46:21 -04:00
bunnei
68658ce4b0
Merge pull request #268 from mailwl/ssl
...
Service/SSL: add ssl service
2018-03-23 15:30:17 -04:00
bunnei
fd0a7c0aaf
Merge pull request #270 from N00byKing/patch-2
...
Remove Option for N/3DS from default.ini
2018-03-23 15:29:35 -04:00
Subv
4c06d55a81
FS: Move the file open mode calculation to a separate function.
2018-03-23 14:27:07 -05:00
bunnei
b36b627d4d
RasterizerCacheOpenGL: FlushAll should flush full memory region.
2018-03-23 15:25:16 -04:00
bunnei
1a158dfcd6
memory: RasterizerFlushVirtualRegion should also check process image region.
2018-03-23 15:10:02 -04:00
bunnei
11047d7fd5
rasterizer: Flush and invalidate regions should be 64-bit.
2018-03-23 15:01:45 -04:00
bunnei
cdf541fb5b
renderer_opengl: Add framebuffer_transform_flags member variable.
2018-03-23 14:59:14 -04:00
bunnei
ec4e1a3685
renderer_opengl: Better handling of framebuffer transform flags.
2018-03-23 14:58:27 -04:00
N00byKing
32fd57f0c8
Remove Option for N/3DS from default.ini
2018-03-23 18:06:55 +01:00
N00byKing
5ded39f5d8
CITRA_ICON -> YUZU_ICON
2018-03-23 16:56:59 +01:00
mailwl
9ee33350de
Service/SSL: add ssl service
2018-03-23 09:32:50 +03:00
bunnei
c2c55e0811
renderer_opengl: Use accelerated framebuffer load with LoadFBToScreenInfo.
2018-03-22 23:28:37 -04:00
bunnei
e12c2cf8c6
nvdisp_disp0: Always flush and invalidate framebuffer region.
...
- Workaround for texture forwarding until we have a better place.
2018-03-22 23:18:04 -04:00
bunnei
a0b1235f82
gl_rasterizer: Implement AccelerateDisplay method from Citra.
2018-03-22 23:06:54 -04:00
bunnei
f61b9f7338
LoadGLBuffer: Use bytes_per_pixel, not bits.
2018-03-22 23:01:57 -04:00
bunnei
63d3924b5b
memory: Port RasterizerFlushVirtualRegion from Citra.
2018-03-22 22:56:41 -04:00
bunnei
6ced80bb47
gl_rasterizer_cache: LoadGLBuffer should do a morton copy.
2018-03-22 22:54:04 -04:00
bunnei
740310113b
video_core: Move MortonCopyPixels128 to utils header.
2018-03-22 22:52:40 -04:00
Valentin Vanelslande
ee5f5a2c2d
yuzu_cmd: change default cpu core to dynarmic
2018-03-22 19:44:34 -06:00
Valentin Vanelslande
47cac816f6
default_ini: change default cpu core to dynarmic
2018-03-22 19:43:59 -06:00
bunnei
8a250de987
video_core: Remove usage of PAddr and replace with VAddr.
2018-03-22 21:13:46 -04:00
bunnei
bfe45774f1
video_core: Move FramebufferInfo to FramebufferConfig in GPU.
2018-03-22 21:04:30 -04:00
bunnei
c6362543d4
gl_rasterizer: Replace a bunch of UNIMPLEMENTED with ASSERT.
2018-03-22 20:19:34 -04:00
bunnei
f707c2dac4
gl_rasterizer: Add a simple passthrough shader in lieu of shader generation.
2018-03-22 20:00:41 -04:00
bunnei
7c3a263839
gpu: Expose Maxwell3D engine.
2018-03-22 19:48:20 -04:00
bunnei
3a6604e8fa
maxwell_3d: Add some format decodings and string helper functions.
2018-03-22 19:47:28 -04:00
bunnei
656de23d93
renderer: Create rasterizer and cleanup.
2018-03-22 19:46:37 -04:00
N00byKing
8afdbf6a1f
Remove more N3DS References
2018-03-22 21:25:06 +01:00
Daniel Lim Wee Soong
8529d84f31
Remove dependency chrono
...
Earlier chrono was included but after some code changed it was no longer needed
Forgot to remove it so I'm removing it now
2018-03-22 21:53:51 +08:00
Daniel Lim Wee Soong
47f96fe13a
Change "yuzu starting..." to be logged with the new macro
...
Just as a proof that it works
2018-03-22 18:26:43 +08:00
Daniel Lim Wee Soong
3b558eebee
Logging: Create logging macros based on fmtlib
...
Add a new set of logging macros based on fmtlib
Similar but not exactly the same as https://github.com/citra-emu/citra/pull/3533
Citra currently uses a different version of fmt, which does not support FMT_VARIADIC so
make_args is used instead. On the other hand, yuzu uses fmt 4.1.0 which doesn't have make_args yet
so FMT_VARIADIC is used.
2018-03-22 18:21:29 +08:00
mailwl
95e747cd06
Service/spl: add module and services
2018-03-22 09:55:14 +03:00
bunnei
ec5ede68e7
Merge pull request #258 from Subv/gpu_attribs
...
GPU: Added vertex attrib format and triangle topology registers
2018-03-21 19:36:06 -04:00
N00byKing
34b733e70e
CMake: Set EMU_ARCH_BITS in CMakeLists.txt
2018-03-21 19:03:20 +01:00
Subv
eff3f60b73
FS: Implemented IFileSystem::CreateDirectory.
2018-03-21 09:55:59 -05:00
Subv
c450d264eb
GPU: Added vertex attribute format registers.
2018-03-21 09:26:47 -05:00
mailwl
6673ed1274
Service/vi: convert services to module
2018-03-21 13:09:40 +03:00
Subv
ae28a52277
GPU: Added registers for the number of vertices to render.
2018-03-20 23:28:06 -05:00
bunnei
0b3ab30762
Merge pull request #254 from bunnei/port-citra-renderer
...
Port Citra OpenGL rasterizer code
2018-03-20 21:37:43 -04:00
mailwl
dca7cfb9cf
Service: add fatal:u, fatal:p services
2018-03-20 16:59:02 +03:00
bunnei
6e3222363c
renderer_gl: Port boilerplate rasterizer code over from Citra.
2018-03-20 00:07:32 -04:00
bunnei
9c468e0c55
gl_shader_util: Sync latest version with Citra.
2018-03-20 00:07:31 -04:00
bunnei
d7b1ebe4a8
renderer_gl: Port over gl_shader_gen module from Citra.
2018-03-20 00:07:30 -04:00
Subv
0485ee499f
FS: Implemented IFileSystem's OpenDirectory function.
...
Note that the filter parameter is not yet implemented.
2018-03-19 23:02:30 -05:00
Subv
21bac2d7d7
FS: Added the IDirectory IPC interface and implemented its two functions.
2018-03-19 23:01:47 -05:00
Subv
6d90d99d12
FS: Implement DiskFileSystem's OpenDirectory interface.
2018-03-19 23:00:37 -05:00
Subv
e1d7b9fc2c
FS: Implement DiskFileSystem::GetEntryType for existing files/directories.
2018-03-19 22:59:38 -05:00
Subv
a9ba2c2000
FS: Updated the Directory Entry structure to match the Switch.
2018-03-19 22:58:55 -05:00
Subv
fc44261dd1
FS: Support the file Append open mode.
2018-03-19 22:57:34 -05:00
Mat M
f4700ccabf
Merge pull request #253 from Subv/rt_depth
...
GPU: Added registers for color and Z buffers.
2018-03-19 23:37:47 -04:00
bunnei
4bdb46e4c2
renderer_gl: Port over gl_shader_decompiler module from Citra.
2018-03-19 23:14:03 -04:00
bunnei
a3e10b1a72
renderer_gl: Port over gl_rasterizer_cache module from Citra.
2018-03-19 23:14:03 -04:00
bunnei
db0cfb8e8b
gl_resource_manager: Sync latest version with Citra.
2018-03-19 23:14:02 -04:00
bunnei
0e4b9cdde4
renderer_gl: Port over gl_stream_buffer module from Citra.
2018-03-19 23:14:02 -04:00
bunnei
6a0902e56d
gl_state: Sync latest version with Citra.
2018-03-19 23:13:49 -04:00
Subv
808704c78c
FS: Implement MountSdCard.
2018-03-19 21:21:49 -05:00
Subv
c4ca802b9d
FS: Added an SDMC archive factory and registered it to the SDMC archive on startup.
2018-03-19 21:17:15 -05:00
Subv
7a27a11770
GPU: Added Z buffer registers to Maxwell3D's reg structure.
2018-03-19 16:55:33 -05:00
Subv
21d9519032
GPU: Added the render target (RT) registers to Maxwell3D's reg structure.
2018-03-19 16:46:29 -05:00
N00byKing
1d8b6ad13b
Clang Fixes
2018-03-19 17:53:35 +01:00
N00byKing
d16e08454d
oops
2018-03-19 17:43:04 +01:00
N00byKing
0e72d0d826
More Warning cleanups
2018-03-19 17:27:04 +01:00
N00byKing
ef875d6a35
Clean Warnings (?)
2018-03-19 17:07:08 +01:00
Subv
dcae0c9a4f
GPU: Added the TSC registers to the Maxwell3D register structure.
2018-03-19 00:36:25 -05:00
Subv
cff7b29bba
GPU: Added the TIC registers to the Maxwell3D register structure.
2018-03-19 00:32:57 -05:00
bunnei
23a0d2d7b7
Merge pull request #193 from N00byKing/3184_2_robotic_boogaloo
...
Implement Pull #3184 from citra: core/arm: Improve timing accuracy before service calls in JIT (Rebased)
2018-03-18 22:35:47 -04:00
bunnei
2dc3a56e96
Merge pull request #250 from bunnei/buffer-dequeue-wait
...
vi: TransactParcel DequeueBuffer should wait current thread
2018-03-18 22:25:09 -04:00
bunnei
c1c92c30f9
vi: Remove DequeueBuffer and wait until next available buffer.
2018-03-18 20:56:35 -04:00
bunnei
c86af6939c
hle_ipc: Add SleepClientThread to block current thread within HLE routines.
2018-03-18 20:56:34 -04:00
bunnei
2faa83ca13
hle_ipc: Use shared_ptr instead of unique_ptr to allow copies.
2018-03-18 20:56:33 -04:00
bunnei
019f1a0cf0
hle_ipc: Remove GetPointer(..) usage with WriteToOutgoingCommandBuffer.
2018-03-18 20:56:33 -04:00
bunnei
e353b9fb3d
thread: Add THREADSTATUS_WAIT_HLE_EVENT, remove THREADSTATUS_WAIT_ARB.
2018-03-18 20:56:32 -04:00
Subv
03156d0c9a
GPU: Implement macro 0xE1A BindTextureInfoBuffer in HLE.
...
This macro simply sets the current CB_ADDRESS to the texture buffer address for the input shader stage.
2018-03-18 19:03:40 -05:00
Subv
7b6868e908
GPU: Implement the BindStorageBuffer macro method in HLE.
...
This macro binds the SSBO Info Buffer as the current ConstBuffer.
This buffer is usually bound to c0 during shader execution.
Games seem to use this macro instead of directly writing the address for some reason.
2018-03-18 16:50:42 -05:00
Subv
85d820b1b4
GPU: Handle writes to the CB_DATA method.
...
Writing to this method will cause the written value to be stored in the currently-set ConstBuffer plus CB_POS.
This method is usually used to upload uniforms or other shader-visible data.
2018-03-18 15:23:24 -05:00
Subv
a64b936cbe
GPU: Move the GPU's class constructor and destructors to a cpp file.
...
This should reduce recompile times when editing the Maxwell3D register structure.
2018-03-18 15:23:24 -05:00
Subv
aa586fa268
GPU: Store uploaded GPU macros and keep track of the number of method parameters.
2018-03-18 11:51:46 -05:00
Subv
7ac8657432
GPU: Macros are specific to the Maxwell3D engine, so handle them internally.
2018-03-18 11:51:45 -05:00
Subv
ccb8da1512
GPU: Renamed ShaderType to ShaderStage as that is less confusing.
2018-03-17 18:32:57 -05:00
Subv
88698c156f
GPU: Store shader constbuffer bindings in the GPU state.
2018-03-17 18:32:57 -05:00
Subv
66dae22790
GPU: Corrected some register offsets and removed superfluous macro registers.
2018-03-17 18:32:56 -05:00
Subv
1d9d9c16e8
GPU: Make the SetShader macro call do the same as the real macro's code.
...
It'll now set the CB_SIZE, CB_ADDRESS and CB_BIND registers when it's called.
Presumably this SetShader function is binding the constant shader uniforms to buffer 1 (c1[]).
2018-03-17 18:32:55 -05:00
Subv
579000e747
GPU: Corrected the parameter documentation for the SetShader macro call.
...
Register 0xE24 is actually a macro that sets some shader parameters in the register structure.
Macros are uploaded to the GPU at startup and have their own ISA, we'll probably write an interpreter for this in the future.
2018-03-17 13:55:42 -05:00
bunnei
516ef4f19f
Merge pull request #242 from Subv/set_shader
...
GPU: Handle the SetShader method call (0xE24) and store the shader config.
2018-03-17 00:34:17 -04:00
Subv
f93d769a1c
GPU: Handle the SetShader method call (0xE24) and store the shader config.
2018-03-16 22:51:06 -05:00
Subv
d2888f7e90
GPU: Added the vertex array registers.
2018-03-16 22:47:45 -05:00
bunnei
cd4e8a989c
Merge pull request #241 from Subv/gpu_method_call
...
GPU: Process command mode 5 (IncreaseOnce) differently from other commands
2018-03-16 22:28:22 -04:00
Subv
29feece4b8
GPU: Process command mode 5 (IncreaseOnce) differently from other commands.
...
Accumulate all arguments before calling the desired method.
Note: Maybe we should do the same for the NonIncreasing mode?
2018-03-16 20:32:44 -05:00
bunnei
0eff775264
Merge pull request #239 from Subv/shaders
...
GPU: Added some shader-related registers.
2018-03-16 21:09:35 -04:00
Subv
bf310a41b8
GPU: Assert that we get a 0 CODE_ADDRESS register in the 3D engine.
...
Shader address calculation depends on this value to some extent, we do not currently know what it being 0 entails.
2018-03-16 19:24:41 -05:00
Subv
cbec739e7b
GPU: Added Maxwell registers for Shader Program control.
2018-03-16 19:23:11 -05:00
bunnei
494275fd38
nvflinger: Remove superfluous buffer format check.
2018-03-16 20:11:50 -04:00
bunnei
cc6f22e0e4
process: MirrorMemory should use MemoryState::Mapped.
2018-03-16 19:24:54 -04:00
bunnei
e9a857ce82
process: Unmap previously allocated heap.
2018-03-16 18:32:25 -04:00
bunnei
403f8e79ea
arm_interface: Support unmapping previously mapped memory.
2018-03-16 18:32:24 -04:00
bunnei
34a29ad051
svc: Use more correct values for GetInfo MapRegion and NewMapRegion.
2018-03-16 18:32:23 -04:00
bunnei
8581404482
kernel: Move stack region outside of application heap.
2018-03-16 18:32:23 -04:00
bunnei
69ee9edd8d
memory: Add regions for map region, "new" map region, etc.
2018-03-16 18:32:22 -04:00
bunnei
3923b0f589
process: Fix stack memory state.
2018-03-16 18:32:21 -04:00
bunnei
8be7131033
MemoryState: Add additional memory states and improve naming.
2018-03-16 18:32:21 -04:00
mailwl
fbfa7ddd62
IGeneralService: fix function list
2018-03-16 16:34:12 +03:00
mailwl
9289255314
Service/NIFM: stub cancel function
2018-03-16 11:08:22 +03:00
mailwl
ec030a542f
Service/NIFM: convert to module
2018-03-16 11:00:29 +03:00
bunnei
7d6653268f
core: Move process creation out of global state.
2018-03-14 18:42:19 -04:00
bunnei
8538e0bc3d
Merge pull request #213 from Hexagon12/dynarmic-default
...
Make Dynarmic the default CPU core
2018-03-07 18:21:13 -05:00
Subv
5fb4c718cc
GPU: Intercept writes to the VERTEX_END_GL register.
...
This is the register that gets written after a game calls DrawArrays().
We should collect all GPU state and draw using our graphics API here.
2018-03-04 19:14:04 -05:00
bunnei
80562aaf64
Merge pull request #229 from Subv/ensuresavedata_impl
...
FS: Make EnsureSaveData create the save data if it doesn't already exist.
2018-03-04 15:49:42 -05:00
Subv
84e1c0a430
FS: Use the correct error code when trying to open files that don't exist.
2018-03-04 14:34:48 -05:00
Subv
e4b7a1d160
FS: Stubbed CreateSaveData. It currently does nothing.
2018-03-04 14:31:57 -05:00
Subv
0eefe6e4d1
FS: Make EnsureSaveData create the savedata folder when called for the first time.
2018-03-04 14:30:07 -05:00
Subv
248881fa7f
CoreTiming: Unschedule the pending events when an Interface is destroyed.
2018-03-04 10:34:25 -05:00
bunnei
7e7110b3b9
Merge pull request #226 from Subv/buffer_queue_event
...
Vi: Signal the BufferQueue's Native Handle right after ReleaseBuffer is called
2018-03-03 12:38:18 -05:00
Subv
656e7aab29
Vi: Signal the BufferQueue's Native Handle right after ReleaseBuffer is called.
...
This prevents a thread starvation issue in Puyo Puyo Tetris.
We should hwtest this behavior and figure out where exactly this event is signaled.
2018-03-03 11:51:36 -05:00
mailwl
28669872d9
Service/Set: add more services
2018-03-03 09:03:49 +03:00
bunnei
46fc7d8502
Merge pull request #216 from Subv/savedata
...
Implemented the SaveData archive and MountSaveData.
2018-03-01 22:14:31 -05:00
Subv
3209cff530
SaveData: Use the current titleid when opening the savedata archive.
2018-03-01 19:03:54 -05:00
Subv
827f8ca3c7
Kernel: Store the program id in the Process class instead of the CodeSet class.
...
There may be many CodeSets per Process, so it's wasteful and overcomplicated to store the program id in each of them.
2018-03-01 19:03:53 -05:00
Subv
cc6e4ae6cf
FS: Implement MountSaveData and some of the IFile interface.
2018-03-01 19:03:53 -05:00
Subv
d140c8ecf7
Filesystem: Added a SaveData Factory and associated Disk_FileSystem.
2018-03-01 19:03:52 -05:00
Jules Blok
c74af07c49
thread: Clear the process list on shutdown.
2018-02-27 17:13:39 +01:00
Subv
6e38081165
ResultCode: Mark any error code that isn't 0 as an error.
2018-02-27 09:44:35 -05:00
Vishal Sharma
65f3119074
Removes the use of QKeySequence::Cancel ( #186 )
...
* Removes the use of QKeySequence::Cancel to remove issues while running make
* Corrects characters in a line for travis failure
* Corrects space in a line for travis failure
2018-02-26 21:03:02 -08:00
bunnei
926604fc14
Merge pull request #207 from mailwl/duplicatesession
...
IPC: add domain header to response if only it exists in request
2018-02-26 20:52:56 -08:00
bunnei
f1beb69899
Merge pull request #215 from N00byKing/umapsharedmmry
...
UnmapSharedMemory
2018-02-25 21:04:24 -08:00
shinyquagsire23
e29710818f
file_sys: Style tweaks
...
Asdf
2018-02-25 16:34:29 -07:00
shinyquagsire23
487f8bc018
loader: Check error on NPDM load, use TID for CodeSet
2018-02-25 07:41:36 -07:00
shinyquagsire23
fd3806fd30
loader: Use NPDM information when loading NSOs
2018-02-25 07:02:47 -07:00
shinyquagsire23
2b28fd7809
file_sys: Add support for parsing NPDM files
2018-02-25 07:02:39 -07:00
N00byKing
08c6ac02cf
(Hopefully) Fix MinGW Build
2018-02-25 13:40:22 +01:00
N00byKing
bc88cae0c7
Implements citra-emu/citra#3184
2018-02-25 11:44:21 +01:00
N00byKing
2b41c6e573
Add UnmapSharedMemory
...
C++11 requires spaces on the Identifier
Add inttypes include
clang
2018-02-25 11:38:06 +01:00
bunnei
c45173c9a6
Merge pull request #212 from mailwl/stubs
...
Stub some functions
2018-02-23 21:09:56 -08:00
bunnei
32c509b82d
Merge pull request #217 from shinyquagsire23/time-s-missing
...
time: Add missing time:s functions, used for libnx
2018-02-23 08:52:37 -08:00
bunnei
6bf7108545
Merge pull request #210 from MerryMage/f/dynarmic/sysreg
...
arm_dynarmic: Implement system registers and provide more hooks
2018-02-23 08:51:52 -08:00
shinyquagsire23
a63d4fa5b4
time: Add missing time:s functions, used for libnx
2018-02-23 00:34:15 -07:00
mailwl
e4f94ee30b
Stub more functions
2018-02-22 17:28:15 +03:00
mailwl
910198a29a
Stub am::SetScreenShotPermission, and bsd::StartMonitoring functions
2018-02-22 13:04:23 +03:00
bunnei
7f0ecbf859
Merge pull request #211 from shinyquagsire23/time_local
...
time: Add GetStandardLocalSystemClock, used by libnx
2018-02-22 01:09:01 -05:00
shinyquagsire23
944132dbe5
time: Add GetStandardLocalSystemClock, used by libnx
2018-02-21 18:43:05 -07:00
MerryMage
32d127ad3e
dynarmic: Update to 6b4c6b0
...
6b4c6b0 impl: Update PC when raising exception
7a1313a A64: Implement FDIV (vector)
b2d781d system: Raise exception for YIELD, WFE, WFI, SEV, SEVL
b277bf5 Correct FPSR and FPCR
7673933 A64: Implement USHL
8d0e558 A64: Implement UCVTF (vector, integer), scalar variant
da9a4f8 A64: Partially implement FCVTZU (scalar, fixed-point) and FCVTZS (scalar, fixed-point)
7479684 A64: Implement system register TPIDR_EL0
0fd75fd A64: Implement system registers FPCR and FPSR
31e370c A64: Implement system register CNTPCT_EL0
9a88fd3 A64: Implement system register CTR_EL0
1d16896 A64: Implement NEG (vector)
3184edf IR: Add IR instruction ZeroVector
31f8fbc emit_x64_floating_point: Add maybe_unused to preprocess parameter
567eb1a A64: Implement FMINNM (scalar)
c6d8fa1 A64: Implement FMAXNM (scalar)
616056d constant_pool: Add frame parameter
a3747cb A64: Implement ADDP (scalar)
5cd5d9f reg_alloc: Only exchange GPRs
dd0452a A64: Implement DUP (element), scalar variant
e5732ea emit_x64_floating_point: Correct FP{Max,Min}{32,64} implementations for -0/+0
40eb9c3 A64: Implement FMAX (scalar), FMIN (scalar)
7cef39b fuzz_with_unicorn: QEMU's implementation of FCVT is incorrect
826dce2 travis: Switch unicorn repository
9605f28 a64/config: Allow NaN emulation accuracy to be set
e9435bc a64_emit_x64: Add conf to A64EmitContext
30b596d fuzz_with_unicorn: Explicitly test floating point instructions
be292a8 A64: Implement FSQRT (scalar)
3c42d48 backend_x64: Accurately handle NaNs
4aefed0 fuzz_with_unicorn: Print AArch64 disassembly
2018-02-21 21:39:07 +00:00