#
b197dcba |
|
09-May-2023 |
Trung Nguyen <trungnt282910@gmail.com> |
tty: Implement exclusive mode Implemented exclusive mode on Haiku and added the related `ioctl` operations (`TIOCEXCL` and `TIOCNXCL`). Change-Id: Iaa201ea20eec0e45d02dd5db9ba6aa35fd27dfb2 Reviewed-on: https://review.haiku-os.org/c/haiku/+/6387 Tested-by: Commit checker robot <no-reply+buildbot@haiku-os.org> Reviewed-by: Jessica Hamilton <jessica.l.hamilton@gmail.com>
|
#
e511f0c1 |
|
26-Jun-2022 |
Gerasim Troeglazov <3dEyes@gmail.com> |
usb_serial: add WinChipHead (CH340/CH341) support Fixes #15872. Change-Id: I3b43094574045464ca0d3e024f8b5aac32ce5210 Reviewed-on: https://review.haiku-os.org/c/haiku/+/5401 Reviewed-by: Adrien Destugues <pulkomandy@pulkomandy.tk> Tested-by: Commit checker robot <no-reply+buildbot@haiku-os.org>
|
#
0f6f5adb |
|
18-Oct-2021 |
Adrien Destugues <pulkomandy@pulkomandy.tk> |
generic/tty: restore lock sharing between master and slave TTYs The code in this module was derived from the one in driver/tty. However, the driver uses a shared lock between the master and slave side of a TTY, and this was changed to use two separate locks. The approach with two locks does not work. It seems the change was unfinished and the second TTY was never locked. But attempting to lock it will result in lock inversion problems, unless we do complicated things (try to find which of the two TTY is the master side, and lock that first, for example). It is simpler to restore the shared lock as used in the driver. To set up the shared lock, I modified the tty_create function to take a pointer to the master TTY when creating the slave. Maybe it makes more sense to create both sides in the same call, create_tty_pair? However, this does not work as easily as I wanted, because there is some recursion going on: at least in one case, the tty_control function is calling the driver's tty_service function, which in turns attempts to call back into tty_control for the "other side" TTY. To handle this case, replace the mutex with a recursive_lock. Fixes #17091, where the root problem was access to other_tty->select_pool without locking. This was also made unconvenient to debug because select_pool objects are self-deleting, when the last item in the pool is removed. As a result, the code accessing it without log would suddenly find out that the data it was accessing had been freed and erased. This also makes the TTY code in driver/tty and generic/tty a bit more similar than it was before, and brings us one step closer to merging the two together. There are still two main differences and I don't know enough about TTY to decide if they are important, and which version should be kept: - The driver has extra code for "background" read and write. I don't know what this is used for. - The driver has a single "settings" instance shared by a master and slave TTY, while the module has two separate instances, but seems to copy one to the other. I'm not sure which approach is correct. Change-Id: Ie2daddd027859ce32ba395af76b4f109f8b984b0 Reviewed-on: https://review.haiku-os.org/c/haiku/+/4604 Reviewed-by: waddlesplash <waddlesplash@gmail.com>
|
#
a52008cb |
|
26-Apr-2020 |
Adrien Destugues <pulkomandy@pulkomandy.tk> |
tty: implement TCFLSH to flush buffers This is probably incomplete. Is locking needed? Should we notify the next writer (if any) that the port is writable when flushing the output? Change-Id: I2566e2d036a61af4819894a44f57603179aa27df Reviewed-on: https://review.haiku-os.org/c/haiku/+/2516 Reviewed-by: Adrien Destugues <pulkomandy@gmail.com>
|
#
b1a92c72 |
|
28-Jul-2019 |
Jérôme Duval <jerome.duval@gmail.com> |
usb_serial: make buffers kernel-only for SMAP, see #15172. Change-Id: I11ea1e18977331a513bf97f5ce885f608e9b573a Reviewed-on: https://review.haiku-os.org/c/1654 Reviewed-by: waddlesplash <waddlesplash@gmail.com>
|
#
e399a883 |
|
30-Jun-2019 |
Adrien Destugues <pulkomandy@pulkomandy.tk> |
usb_serial: don't allow Service() on a closed device. - In Service, check that the device is open. - In Close, clear dangling pointers to more easily spot problems and avoid risk of accessing freed memory. Change-Id: I970c4b8b8ec14db448388f74fc275634801c359a Reviewed-on: https://review.haiku-os.org/c/1551 Reviewed-by: Jérôme Duval <jerome.duval@gmail.com>
|
#
7b6e6c15 |
|
26-Aug-2017 |
Adrien Destugues <pulkomandy@pulkomandy.tk> |
FT232x driver: support hardware flow control. We had everything in place, except we never actually sent the command to the device. Note that the other drivers (prolific, etc) as well as pc_serial need to be updated as well (might do it when I get access to hardware where I can test the changes).
|
#
93ea83e5 |
|
27-Feb-2016 |
Adrien Destugues <pulkomandy@pulkomandy.tk> |
Allow custom baud rates for FTDI serial ports - Termios: cf{get,set}{i,o}speed can handle arbitrary speed values. - The value is stored in the appropriate fields of the termios structure in this case. The old constants (stored in the flags) are preserved for BeOS binary compatibility. - Adjust the FTDI FT232* driver to accept custom rates, by replacing the hardcoded regster values with a function that will compute it according to FTDI documentation (confirmed giving the same values for the existing baudrates).
|
#
24dba16d |
|
09-May-2013 |
Jérôme Duval <jerome.duval@gmail.com> |
usb_serial: fixes 64 bit warnings
|
#
7e67ec90 |
|
22-Jul-2012 |
Alexander von Gluck IV <kallisti5@unixzen.com> |
usb_serial: Set option driver to use the last found port. * Add a warning when >1 port is found (as we only use the last found serial port) * Verified working, remove if 0.
|
#
52b7ccf4 |
|
22-Jul-2012 |
Alexander von Gluck IV <kallisti5@unixzen.com> |
usb_serial: Probe for USB endpoints on Option device * More then one serial port is common, for now we only work off of the first one detected. * Still disabled as some setup is needed.
|
#
b3b04af9 |
|
22-Jul-2012 |
Alexander von Gluck IV <kallisti5@unixzen.com> |
usb_serial: Add new Option driver * Option devices are generally WWAN serial devices for 3G or lower. * Picks up my CMOTECH Sprint 3G adaptor, need to wire up endpoints so disabled for now.
|
#
5ba5e31f |
|
20-Jul-2012 |
Alexander von Gluck IV <kallisti5@unixzen.com> |
usb_serial: clean up usb device identification * Update FTDI, KLSI, Prolific, and Silicon drivers to share a common structural layout for device identification. * More flexible and cleaner than massive switch case statements. * Avoids the problem of different chipsets from identical vendors.
|
#
7117b2ea |
|
16-Oct-2011 |
Adrien Destugues <pulkomandy@pulkomandy.ath.cx> |
Add support for Silicon Labs CP210x to usb_serial. Not completely tested : my device has no control lines wired. RX/TX seems to work fine, at least. Inspiration from the Linux driver since there isn't any documentation avilable: http://lxr.free-electrons.com/source/drivers/usb/serial/cp210x.c The switch/case for VID/PID identification is getting quite long. Isn't there a better way to do it ? git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@42860 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
08c7202f |
|
13-Jun-2011 |
Michael Lotz <mmlr@mlotz.ch> |
* Add a termios member that stores the config across open/close cycles. This allows the use of stty to configure the serial device and later using other commands with these settings still in place. * Store incoming termios settings when they are set, restore the previous settings on open and apply the control modes to the device side as well. * Only send the control to the system side tty cookie again. Doing it for both cookies was only done to configure the termios, which isn't necessary anymore. * Remove fallbacks to c_{i|o}speed fields and always use c_cflag & CBAUD for the single speed setting we have. * Remove some leftover control line state logic that doesn't apply anymore. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@42161 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
77a5d93e |
|
13-Jun-2011 |
Michael Lotz <mmlr@mlotz.ch> |
* Remove the output thread again and write to the device in the write call. To ensure that we don't block on the tty buffer, we chop up the data into blocks that are written into the tty and then the buffer is flushed to the device each time. This resolves the issue that a quick open/write/close would not actually send the data to the device as it would cancel the transfer before the output thread had a chance to run. * Use the tty_close_cookie() call. Doing the close before waiting for the input thread ensures that it is woken up if it blocked on writing into the tty. * Correct the type of the USB callback status and only try to clear a halt if the device was actually stalled. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@42156 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
224d969b |
|
13-Jun-2011 |
Michael Lotz <mmlr@mlotz.ch> |
* When determining the bit to be set for RTS/DTR there was a missing comparison to op which would've caused a wrong line state to be set. * Add some more allocation checks. * Some cleanup. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@42151 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
36986acb |
|
10-Jun-2011 |
Michael Lotz <mmlr@mlotz.ch> |
* Finish the port to the new tty module. Back when I left off last time it was only halfway finished. The way it is supposed to work is that there are two tty cookies, representing the system and the device side. Reads and writes coming from the system and going to the device are using the system cookie while reads and writes coming from the device use the device cookie. * Move writing to the device into an output thread, similar to how reading from the device works. This isn't necessarily a good idea and might be moved back into the write hook again to ensure that writes can be made blocking. Right now if you just write and then close, the writes will most likely be canceled before every going out to the device. * Removed the read and write lock mutex. They aren't necessary as the tty layer will serialize the reads and writes anyway. * Made simply copying the data to the write buffer the default implementation of the OnWrite callback and removed the OnWrite in ACMDevice. The ProlificDevice didn't provide an OnWrite hook before, so it would've never written anything. * Break out the baud index to speed mapping into an inline function. Since the defines might change in termios.h just adding an array is a bit fragile (it already missed one entry and would've been broken for certain speeds). This should make usb_serial usable for some (most?) cases. I've tested this with an Arduino board that uses an FTDI interface. As mentioned above, since writes currently just write into the tty layer and don't wait for the data to be flushed, and since close doesn't wait for the output buffers to be drained either, a simple write and close (as in "echo a > /dev/ports/usb0") will in most cases cancel the output before it is written to the device. I'm looking into a few ways to fix that next. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@42089 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
4e1d68e9 |
|
09-Jun-2011 |
Michael Lotz <mmlr@mlotz.ch> |
Style cleanup, 80 char limit. No functional changes. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@42072 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
c5f2df28 |
|
03-Jan-2011 |
Philippe Houdoin <philippe.houdoin@gmail.com> |
Switched to use USB_cdc.h definitions. Expanded search in every configuration, not only first. ELSA USB modem for instance publish two configurations, the first one being a vendor-specific one for Windows NT. ACMDevice now don't assume anymore union functional descriptor is always there. The data interface index can be found also in Call Management (CM) functional descriptor. (Style cleanup pending...) git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@40092 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
b77aa015 |
|
08-Dec-2010 |
François Revol <revol@free.fr> |
Fix gcc4 build: - use new(std::nothrow) from <new> since we dropped kernel_cpp.h, - fix "declared 'extern' and later 'static'" warning, - fix "deprecated conversion from string constant to 'char*'" warning in tracing code. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@39784 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
b994a185 |
|
07-Dec-2010 |
Michael Lotz <mmlr@mlotz.ch> |
Port of usb_serial to the generic tty module. I don't remember exactly if or how well this was working, but since it was non-functional on Haiku anyway this shouldn't hurt. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@39762 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
12f32926 |
|
12-Jun-2008 |
François Revol <revol@free.fr> |
- change KLSI init the way it's done by the linux driver - do not count usb headers as part of count returned by write(), else we might end up writing more than the passed amount :) git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25939 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
2b07b8e0 |
|
28-May-2008 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
* Replaced all instances of benaphores in the kernel code by mutexes. * Removed kernel benaphores. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25690 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
dbcfdd5c |
|
11-Apr-2008 |
Michael Lotz <mmlr@mlotz.ch> |
Correct the way serial devices are deleted. They are either deleted on removal when they are not open or they are deleted on free when they are already removed. This should fix the sudden crashes when you unplugged a device that might not have been fully closed yet. Also handle the case of removal correctly and don't use the usb_device anymore after releasing it by returning from the device removed hook. Calls to the device just return B_DEV_NOT_READY in that case. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24920 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
7aa661d4 |
|
19-Jan-2008 |
Michael Lotz <mmlr@mlotz.ch> |
Rework of the usb_serial driver: * Refactored everything to C++ with the different devices as subclasses * Added proper ACM detection with parsing of the ACM descriptors * Added device transfer error handling and fixed some concurency issues * Big cleanup to conform to our style guide This should make at least ACM stable to use. Commiting this over my K850i with ACM compliant USB modem and UMTS data connection. Note that support for all other device classes (Prolific, FTDI and KLSI) is untested but should work the same as before. Note also that since we currently lack a TTY module this will only build/work for R5 or Dano with the proper TTY headers. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23634 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
24dba16d04b9acd835871de8f9066c8874948e54 |
|
09-May-2013 |
Jérôme Duval <jerome.duval@gmail.com> |
usb_serial: fixes 64 bit warnings
|
#
7e67ec90a46ec4202ab7e4f7b0e07cf398200f45 |
|
22-Jul-2012 |
Alexander von Gluck IV <kallisti5@unixzen.com> |
usb_serial: Set option driver to use the last found port. * Add a warning when >1 port is found (as we only use the last found serial port) * Verified working, remove if 0.
|
#
52b7ccf49e8215e58c9c341e013999ee1795848b |
|
22-Jul-2012 |
Alexander von Gluck IV <kallisti5@unixzen.com> |
usb_serial: Probe for USB endpoints on Option device * More then one serial port is common, for now we only work off of the first one detected. * Still disabled as some setup is needed.
|
#
b3b04af940fef90e722a590596527c6cc79920a3 |
|
22-Jul-2012 |
Alexander von Gluck IV <kallisti5@unixzen.com> |
usb_serial: Add new Option driver * Option devices are generally WWAN serial devices for 3G or lower. * Picks up my CMOTECH Sprint 3G adaptor, need to wire up endpoints so disabled for now.
|
#
5ba5e31f8a59cb5f3299edd7af256d0fb4db12aa |
|
20-Jul-2012 |
Alexander von Gluck IV <kallisti5@unixzen.com> |
usb_serial: clean up usb device identification * Update FTDI, KLSI, Prolific, and Silicon drivers to share a common structural layout for device identification. * More flexible and cleaner than massive switch case statements. * Avoids the problem of different chipsets from identical vendors.
|
#
7117b2ea258118c2cb0b41ac3c46a9de6ea293d6 |
|
16-Oct-2011 |
Adrien Destugues <pulkomandy@pulkomandy.ath.cx> |
Add support for Silicon Labs CP210x to usb_serial. Not completely tested : my device has no control lines wired. RX/TX seems to work fine, at least. Inspiration from the Linux driver since there isn't any documentation avilable: http://lxr.free-electrons.com/source/drivers/usb/serial/cp210x.c The switch/case for VID/PID identification is getting quite long. Isn't there a better way to do it ? git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@42860 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
08c7202f8a3977afe560df956f83ea29e1398607 |
|
13-Jun-2011 |
Michael Lotz <mmlr@mlotz.ch> |
* Add a termios member that stores the config across open/close cycles. This allows the use of stty to configure the serial device and later using other commands with these settings still in place. * Store incoming termios settings when they are set, restore the previous settings on open and apply the control modes to the device side as well. * Only send the control to the system side tty cookie again. Doing it for both cookies was only done to configure the termios, which isn't necessary anymore. * Remove fallbacks to c_{i|o}speed fields and always use c_cflag & CBAUD for the single speed setting we have. * Remove some leftover control line state logic that doesn't apply anymore. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@42161 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
77a5d93e961506b3f89b6821210992e1b24a947e |
|
13-Jun-2011 |
Michael Lotz <mmlr@mlotz.ch> |
* Remove the output thread again and write to the device in the write call. To ensure that we don't block on the tty buffer, we chop up the data into blocks that are written into the tty and then the buffer is flushed to the device each time. This resolves the issue that a quick open/write/close would not actually send the data to the device as it would cancel the transfer before the output thread had a chance to run. * Use the tty_close_cookie() call. Doing the close before waiting for the input thread ensures that it is woken up if it blocked on writing into the tty. * Correct the type of the USB callback status and only try to clear a halt if the device was actually stalled. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@42156 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
224d969b1df46413ff9d852aae0738f99f61f5be |
|
13-Jun-2011 |
Michael Lotz <mmlr@mlotz.ch> |
* When determining the bit to be set for RTS/DTR there was a missing comparison to op which would've caused a wrong line state to be set. * Add some more allocation checks. * Some cleanup. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@42151 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
36986acbbd67c4866976aeb4a6a3e98d953b69c3 |
|
10-Jun-2011 |
Michael Lotz <mmlr@mlotz.ch> |
* Finish the port to the new tty module. Back when I left off last time it was only halfway finished. The way it is supposed to work is that there are two tty cookies, representing the system and the device side. Reads and writes coming from the system and going to the device are using the system cookie while reads and writes coming from the device use the device cookie. * Move writing to the device into an output thread, similar to how reading from the device works. This isn't necessarily a good idea and might be moved back into the write hook again to ensure that writes can be made blocking. Right now if you just write and then close, the writes will most likely be canceled before every going out to the device. * Removed the read and write lock mutex. They aren't necessary as the tty layer will serialize the reads and writes anyway. * Made simply copying the data to the write buffer the default implementation of the OnWrite callback and removed the OnWrite in ACMDevice. The ProlificDevice didn't provide an OnWrite hook before, so it would've never written anything. * Break out the baud index to speed mapping into an inline function. Since the defines might change in termios.h just adding an array is a bit fragile (it already missed one entry and would've been broken for certain speeds). This should make usb_serial usable for some (most?) cases. I've tested this with an Arduino board that uses an FTDI interface. As mentioned above, since writes currently just write into the tty layer and don't wait for the data to be flushed, and since close doesn't wait for the output buffers to be drained either, a simple write and close (as in "echo a > /dev/ports/usb0") will in most cases cancel the output before it is written to the device. I'm looking into a few ways to fix that next. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@42089 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
4e1d68e99449a62eb533704b1c026053deedae39 |
|
09-Jun-2011 |
Michael Lotz <mmlr@mlotz.ch> |
Style cleanup, 80 char limit. No functional changes. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@42072 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
c5f2df286e21f263432f1deb39b6ccf6a6ff32c0 |
|
03-Jan-2011 |
Philippe Houdoin <philippe.houdoin@gmail.com> |
Switched to use USB_cdc.h definitions. Expanded search in every configuration, not only first. ELSA USB modem for instance publish two configurations, the first one being a vendor-specific one for Windows NT. ACMDevice now don't assume anymore union functional descriptor is always there. The data interface index can be found also in Call Management (CM) functional descriptor. (Style cleanup pending...) git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@40092 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
b77aa0155d4296ca41fc23d5216a326a97edd0f1 |
|
08-Dec-2010 |
François Revol <revol@free.fr> |
Fix gcc4 build: - use new(std::nothrow) from <new> since we dropped kernel_cpp.h, - fix "declared 'extern' and later 'static'" warning, - fix "deprecated conversion from string constant to 'char*'" warning in tracing code. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@39784 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
b994a185080e8f2706d5a153496070f7fe7b4d7e |
|
07-Dec-2010 |
Michael Lotz <mmlr@mlotz.ch> |
Port of usb_serial to the generic tty module. I don't remember exactly if or how well this was working, but since it was non-functional on Haiku anyway this shouldn't hurt. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@39762 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
12f329261557cff6c769a4cb0c23fe8a55bb2622 |
|
12-Jun-2008 |
François Revol <revol@free.fr> |
- change KLSI init the way it's done by the linux driver - do not count usb headers as part of count returned by write(), else we might end up writing more than the passed amount :) git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25939 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
2b07b8e0f1a7f1e76f31db24a21a42cbb01d7b9c |
|
28-May-2008 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
* Replaced all instances of benaphores in the kernel code by mutexes. * Removed kernel benaphores. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25690 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
dbcfdd5ca72fcd9910b65a9061df902f78b2b3d6 |
|
11-Apr-2008 |
Michael Lotz <mmlr@mlotz.ch> |
Correct the way serial devices are deleted. They are either deleted on removal when they are not open or they are deleted on free when they are already removed. This should fix the sudden crashes when you unplugged a device that might not have been fully closed yet. Also handle the case of removal correctly and don't use the usb_device anymore after releasing it by returning from the device removed hook. Calls to the device just return B_DEV_NOT_READY in that case. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24920 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
7aa661d403eac10eab21bcd0facf01c2bcc03c24 |
|
19-Jan-2008 |
Michael Lotz <mmlr@mlotz.ch> |
Rework of the usb_serial driver: * Refactored everything to C++ with the different devices as subclasses * Added proper ACM detection with parsing of the ACM descriptors * Added device transfer error handling and fixed some concurency issues * Big cleanup to conform to our style guide This should make at least ACM stable to use. Commiting this over my K850i with ACM compliant USB modem and UMTS data connection. Note that support for all other device classes (Prolific, FTDI and KLSI) is untested but should work the same as before. Note also that since we currently lack a TTY module this will only build/work for R5 or Dano with the proper TTY headers. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23634 a95241bf-73f2-0310-859d-f6bbb57e9c96
|