# \[bug\] Clearing scratchpad while brush is lagging crashes Krita

**URL:** <https://krita-artists.org/t/bug-clearing-scratchpad-while-brush-is-lagging-crashes-krita/94260>\
**Category:** Artists Feedback & Testing\
**Tags:** linux\
**Created:** [June 19, 2024, 5:12pm UTC](https://krita-artists.org/t/bug-clearing-scratchpad-while-brush-is-lagging-crashes-krita/94260 "2024-06-19T17:12:27Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![Asbesto](https://krita-artists.org/user_avatar/krita-artists.org/asbesto/32/90751_2.png) [@Asbesto](https://krita-artists.org/u/Asbesto)\
**Post date:** [June 19, 2024, 5:12pm UTC](https://krita-artists.org/t/bug-clearing-scratchpad-while-brush-is-lagging-crashes-krita/94260/1 "2024-06-19T17:12:27Z")

</div>

Creating a topic on the forum as per guidelines.  
When using a performance intensive brush (exaggerated in the video) and drawing in the scratchpad, if the stroke is lagging, clearing the scratchpad will cause Krita to crash to desktop.

My pc specs are pretty decent (ryzen 5 5600), so I assume this is more likely to happen on slower machines or laptops, or when using fancier brushes.

How to reproduce:

1. Use a performance intensive brush. The brush used in the video has smudging enabled and increasing the brush size makes the stroke lag a bit.
2. While the stroke is lagging behind, press the button to clear the scratchpad.

Krita 5.2.2-10 (from repository)  
Also tested on Krita 5.2.3-Beta1 (from appimage)  
Arch Linux 6.6.33-1-lts using xorg

Before reporting the bug on the bug tracker, I will wait to see if people here can reproduce the issue. Since my machine has been a bit iffy lately, I cannot exclude that this is on my end.

Edit: Added backtrace from gdb (please do tell if this is unusable)

```auto
Thread 111 "Thread (pooled)" received signal SIGSEGV, Segmentation fault.
[Switching to Thread 0x7ffefe8866c0 (LWP 10320)]
0x00007ffff5d8986b in qDeleteAll<QList<KUndo2Command*>::const_iterator> (begin=..., end=...) at /usr/include/qt/QtCore/qalgorithms.h:320
320 delete *begin;
#0 0x00007ffff5d8986b in qDeleteAll<QList<KUndo2Command*>::const_iterator> (begin=..., end=...) at /usr/include/qt/QtCore/qalgorithms.h:320
#1 qDeleteAll<QList<KUndo2Command*> > (c=...) at /usr/include/qt/QtCore/qalgorithms.h:328
#2 KUndo2Command::~KUndo2Command (this=<optimized out>, this=<optimized out>) at /usr/src/debug/krita/krita-5.2.2/libs/command/kundo2stack.cpp:162
#3 0x00007ffff5d89966 in KUndo2Command::~KUndo2Command (this=<optimized out>, this=<optimized out>) at /usr/src/debug/krita/krita-5.2.2/libs/command/kundo2stack.cpp:164
#4 0x00007fffa766aee3 in QScopedPointerDeleter<KUndo2Command>::cleanup (pointer=<optimized out>) at /usr/include/qt/QtCore/qscopedpointer.h:104
#5 QScopedPointer<KUndo2Command, QScopedPointerDeleter<KUndo2Command> >::~QScopedPointer (this=<optimized out>, this=<optimized out>) at /usr/include/qt/QtCore/qscopedpointer.h:107
#6 KisColorSmudgeInterstrokeData::~KisColorSmudgeInterstrokeData (this=<optimized out>, this=<optimized out>) at /usr/src/debug/krita/krita-5.2.2/plugins/paintops/colorsmudge/KisColorSmudgeInterstrokeData.cpp:30
#7 0x00007fffa766af45 in KisColorSmudgeInterstrokeData::~KisColorSmudgeInterstrokeData (this=<optimized out>, this=<optimized out>) at /usr/src/debug/krita/krita-5.2.2/plugins/paintops/colorsmudge/KisColorSmudgeInterstrokeData.cpp:30
#8 0x00007ffff71abf91 in QtSharedPointer::ExternalRefCountData::destroy (this=0x7ffef4002580) at /usr/include/qt/QtCore/qsharedpointer_impl.h:149
#9 QSharedPointer<KisProjectionUpdatesFilter>::deref (dd=0x7ffef4002580) at /usr/include/qt/QtCore/qsharedpointer_impl.h:464
#10 QSharedPointer<KisInterstrokeData>::deref (dd=<optimized out>, dd=<optimized out>) at /usr/include/qt/QtCore/qsharedpointer_impl.h:460
#11 QSharedPointer<KisInterstrokeData>::deref (this=<optimized out>, this=<optimized out>) at /usr/include/qt/QtCore/qsharedpointer_impl.h:459
#12 QSharedPointer<KisInterstrokeData>::~QSharedPointer (this=<optimized out>, this=<optimized out>) at /usr/include/qt/QtCore/qsharedpointer_impl.h:316
#13 (anonymous namespace)::BeginInterstrokeDataTransactionCommand::~BeginInterstrokeDataTransactionCommand (this=<optimized out>, this=<optimized out>) at /usr/src/debug/krita/krita-5.2.2/libs/image/KisInterstrokeDataTransactionWrapperFactory.cpp:20
#14 (anonymous namespace)::BeginInterstrokeDataTransactionCommand::~BeginInterstrokeDataTransactionCommand (this=<optimized out>, this=<optimized out>) at /usr/src/debug/krita/krita-5.2.2/libs/image/KisInterstrokeDataTransactionWrapperFactory.cpp:20
#15 0x00007ffff71af25b in QScopedPointerDeleter<KUndo2Command>::cleanup (pointer=<optimized out>) at /usr/include/qt/QtCore/qscopedpointer.h:104
#16 QScopedPointer<KUndo2Command, QScopedPointerDeleter<KUndo2Command> >::~QScopedPointer (this=<optimized out>, this=<optimized out>) at /usr/include/qt/QtCore/qscopedpointer.h:107
#17 OptionalInterstrokeInfo::~OptionalInterstrokeInfo (this=<optimized out>, this=<optimized out>) at /usr/src/debug/krita/krita-5.2.2/libs/image/kis_transaction_data.cpp:30
#18 QScopedPointerDeleter<OptionalInterstrokeInfo>::cleanup (pointer=0x7ffef4001960) at /usr/include/qt/QtCore/qscopedpointer.h:60
#19 QScopedPointerDeleter<OptionalInterstrokeInfo>::cleanup (pointer=0x7ffef4001960) at /usr/include/qt/QtCore/qscopedpointer.h:52
#20 QScopedPointer<OptionalInterstrokeInfo, QScopedPointerDeleter<OptionalInterstrokeInfo> >::~QScopedPointer (this=<optimized out>, this=<optimized out>) at /usr/include/qt/QtCore/qscopedpointer.h:107
#21 KisTransactionData::Private::~Private (this=<optimized out>, this=<optimized out>) at /usr/src/debug/krita/krita-5.2.2/libs/image/kis_transaction_data.cpp:37
#22 KisTransactionData::~KisTransactionData (this=<optimized out>, this=<optimized out>) at /usr/src/debug/krita/krita-5.2.2/libs/image/kis_transaction_data.cpp:120
#23 0x00007ffff71af3d6 in KisTransactionData::~KisTransactionData (this=<optimized out>, this=<optimized out>) at /usr/src/debug/krita/krita-5.2.2/libs/image/kis_transaction_data.cpp:121
#24 0x00007ffff5d899ce in qDeleteAll<QTypedArrayData<KUndo2Command*>::const_iterator> (begin=..., end=...) at /usr/include/qt/QtCore/qalgorithms.h:320
#25 qDeleteAll<QVector<KUndo2Command*> > (c=...) at /usr/include/qt/QtCore/qalgorithms.h:328
#26 KisCommandUtils::CompositeCommand::~CompositeCommand (this=<optimized out>, this=<optimized out>) at /usr/src/debug/krita/krita-5.2.2/libs/command/kis_command_utils.cpp:177
#27 0x00007ffff5d89a36 in KisCommandUtils::CompositeCommand::~CompositeCommand (this=<optimized out>, this=<optimized out>) at /usr/src/debug/krita/krita-5.2.2/libs/command/kis_command_utils.cpp:178
#28 0x00007ffff5d8986e in qDeleteAll<QList<KUndo2Command*>::const_iterator> (begin=..., end=...) at /usr/include/qt/QtCore/qalgorithms.h:320
#29 qDeleteAll<QList<KUndo2Command*> > (c=...) at /usr/include/qt/QtCore/qalgorithms.h:328
#30 KUndo2Command::~KUndo2Command (this=<optimized out>, this=<optimized out>) at /usr/src/debug/krita/krita-5.2.2/libs/command/kundo2stack.cpp:162
#31 0x00007ffff7922519 in (anonymous namespace)::MergeableStrokeUndoCommand::~MergeableStrokeUndoCommand (this=<optimized out>, this=<optimized out>) at /usr/src/debug/krita/krita-5.2.2/libs/ui/tool/strokes/kis_painter_based_stroke_strategy.cpp:357
#32 (anonymous namespace)::MergeableStrokeUndoCommand::~MergeableStrokeUndoCommand (this=<optimized out>, this=<optimized out>) at /usr/src/debug/krita/krita-5.2.2/libs/ui/tool/strokes/kis_painter_based_stroke_strategy.cpp:357
#33 0x00007ffff7733cba in QtSharedPointer::ExternalRefCountData::destroy (this=0x7ffef48976a0) at /usr/include/qt/QtCore/qsharedpointer_impl.h:149
#34 QSharedPointer<KoID::KoIDPrivate>::deref(QtSharedPointer::ExternalRefCountData*) [clone .part.0] [clone .lto_priv.0] [clone .lto_priv.0] (dd=0x7ffef48976a0) at /usr/include/qt/QtCore/qsharedpointer_impl.h:464
#35 0x00007ffff7922b15 in QSharedPointer<KUndo2Command>::deref (dd=<optimized out>, dd=<optimized out>) at /usr/include/qt/QtCore/qsharedpointer_impl.h:460
#36 QSharedPointer<KUndo2Command>::deref (this=<optimized out>, this=<optimized out>) at /usr/include/qt/QtCore/qsharedpointer_impl.h:459
#37 QSharedPointer<KUndo2Command>::~QSharedPointer (this=<optimized out>, this=<optimized out>) at /usr/include/qt/QtCore/qsharedpointer_impl.h:316
#38 KisPainterBasedStrokeStrategy::finishStrokeCallback (this=<optimized out>) at /usr/src/debug/krita/krita-5.2.2/libs/ui/tool/strokes/kis_painter_based_stroke_strategy.cpp:469
#39 0x00007ffff6fae6a3 in KisUpdateJobItem::runImpl (this=0x5555591a2c80) at /usr/src/debug/krita/build/libs/image/kritaimage_autogen/EWIEGA46WW/../../../../../krita-5.2.2/libs/image/kis_update_job_item.h:100
#40 KisUpdateJobItem::run (this=0x5555591a2c80) at /usr/src/debug/krita/build/libs/image/kritaimage_autogen/EWIEGA46WW/../../../../../krita-5.2.2/libs/image/kis_update_job_item.h:49
#41 0x00007ffff58f3945 in QThreadPoolThread::run (this=0x555561c45790) at thread/qthreadpool.cpp:100
#42 0x00007ffff58f261b in operator() (__closure=<optimized out>) at thread/qthread_unix.cpp:350
#43 (anonymous namespace)::terminate_on_exception<QThreadPrivate::start(void*)::<lambda()> > (t=...) at thread/qthread_unix.cpp:287
#44 QThreadPrivate::start (arg=0x555561c45790) at thread/qthread_unix.cpp:310
#45 0x00007ffff52a6ded in start_thread (arg=<optimized out>) at pthread_create.c:447
#46 0x00007ffff532a0dc in clone3 () at ../sysdeps/unix/sysv/linux/x86_64/clone3.S:78

```

Reported on the bug tracker:  
[https://bugs.kde.org/show\_bug.cgi?id=488800](https://bugs.kde.org/show_bug.cgi?id=488800)

---

<div class="post-metadata">

**Author:** ![Romio](https://krita-artists.org/letter_avatar_proxy/v4/letter/r/57b2e6/32.png) [@Romio](https://krita-artists.org/u/Romio)\
**Post date:** [June 19, 2024, 5:39pm UTC](https://krita-artists.org/t/bug-clearing-scratchpad-while-brush-is-lagging-crashes-krita/94260/2 "2024-06-19T17:39:45Z")

</div>

I am on linux.  
Pop os, gtx 1060 6gb, Krita version 5.2.2

I could not get it to crash, it might crash on windows though.  
edit: Also tested it on 5.2.3-Beta1, still no crash.

---

<div class="post-metadata">

**Author:** ![freyalupen](https://krita-artists.org/user_avatar/krita-artists.org/freyalupen/32/47913_2.png) [@freyalupen](https://krita-artists.org/u/freyalupen)\
**Post date:** [June 19, 2024, 6:09pm UTC](https://krita-artists.org/t/bug-clearing-scratchpad-while-brush-is-lagging-crashes-krita/94260/3 "2024-06-19T18:09:51Z")

</div>

I can reproduce this on 5.3.0-prealpha-af99e90fa8, though it doesn’t always happen. The first time I tried clearing the scratchpad while a color smudge brushstroke lagged, it crashed immediately- but the next time it took several tries to crash.

> **Backtrace**
>
> ```auto
> Thread 24 Crashed:: Thread (pooled)
> 0 libkritacommand.20.0.0.dylib 0x104fbdd7c void qDeleteAll<QList<KUndo2Command*>::const_iterator>(QList<KUndo2Command*>::const_iterator, QList<KUndo2Command*>::const_iterator) + 36 (qalgorithms.h:320) [inlined]
> 1 libkritacommand.20.0.0.dylib 0x104fbdd7c void qDeleteAll<QList<KUndo2Command*>>(QList<KUndo2Command*> const&) + 64 (qalgorithms.h:328) [inlined]
> 2 libkritacommand.20.0.0.dylib 0x104fbdd7c KUndo2Command::~KUndo2Command() + 100 (kundo2stack.cpp:162)
> 3 libkritacommand.20.0.0.dylib 0x104fbddfc KUndo2Command::~KUndo2Command() + 4 (kundo2stack.cpp:161) [inlined]
> 4 libkritacommand.20.0.0.dylib 0x104fbddfc KUndo2Command::~KUndo2Command() + 12 (kundo2stack.cpp:161)
> 5 kritacolorsmudgepaintop.so 0x135c32604 QScopedPointerDeleter<KUndo2Command>::cleanup(KUndo2Command*) + 16 (qscopedpointer.h:60) [inlined]
> 6 kritacolorsmudgepaintop.so 0x135c32604 QScopedPointer<KUndo2Command, QScopedPointerDeleter<KUndo2Command>>::~QScopedPointer() + 20 (qscopedpointer.h:107) [inlined]
> 7 kritacolorsmudgepaintop.so 0x135c32604 QScopedPointer<KUndo2Command, QScopedPointerDeleter<KUndo2Command>>::~QScopedPointer() + 20 (qscopedpointer.h:105) [inlined]
> 8 kritacolorsmudgepaintop.so 0x135c32604 KisColorSmudgeInterstrokeData::~KisColorSmudgeInterstrokeData() + 108 (KisColorSmudgeInterstrokeData.cpp:30)
> 9 kritacolorsmudgepaintop.so 0x135c326a8 KisColorSmudgeInterstrokeData::~KisColorSmudgeInterstrokeData() + 4 (KisColorSmudgeInterstrokeData.cpp:26) [inlined]
> 10 kritacolorsmudgepaintop.so 0x135c326a8 KisColorSmudgeInterstrokeData::~KisColorSmudgeInterstrokeData() + 12 (KisColorSmudgeInterstrokeData.cpp:26)
> 11 libkritaimage.20.0.0.dylib 0x1070bbde4 QtSharedPointer::ExternalRefCountData::destroy() + 12 (qsharedpointer_impl.h:149) [inlined]
> 12 libkritaimage.20.0.0.dylib 0x1070bbde4 QSharedPointer<KisInterstrokeData>::deref(QtSharedPointer::ExternalRefCountData*) + 36 (qsharedpointer_impl.h:455) [inlined]
> 13 libkritaimage.20.0.0.dylib 0x1070bbde4 QSharedPointer<KisInterstrokeData>::deref() + 40 (qsharedpointer_impl.h:450) [inlined]
> 14 libkritaimage.20.0.0.dylib 0x1070bbde4 QSharedPointer<KisInterstrokeData>::~QSharedPointer() + 40 (qsharedpointer_impl.h:307) [inlined]
> 15 libkritaimage.20.0.0.dylib 0x1070bbde4 QSharedPointer<KisInterstrokeData>::~QSharedPointer() + 40 (qsharedpointer_impl.h:307) [inlined]
> 16 libkritaimage.20.0.0.dylib 0x1070bbde4 (anonymous namespace)::BeginInterstrokeDataTransactionCommand::~BeginInterstrokeDataTransactionCommand() + 72 (KisInterstrokeDataTransactionWrapperFactory.cpp:20) [inlined]
> 17 libkritaimage.20.0.0.dylib 0x1070bbde4 (anonymous namespace)::BeginInterstrokeDataTransactionCommand::~BeginInterstrokeDataTransactionCommand() + 72 (KisInterstrokeDataTransactionWrapperFactory.cpp:20) [inlined]
> 18 libkritaimage.20.0.0.dylib 0x1070bbde4 (anonymous namespace)::BeginInterstrokeDataTransactionCommand::~BeginInterstrokeDataTransactionCommand() + 92 (KisInterstrokeDataTransactionWrapperFactory.cpp:20)
> 19 libkritaimage.20.0.0.dylib 0x1070bafb4 QScopedPointerDeleter<KUndo2Command>::cleanup(KUndo2Command*) + 16 (qscopedpointer.h:60) [inlined]
> 20 libkritaimage.20.0.0.dylib 0x1070bafb4 QScopedPointer<KUndo2Command, QScopedPointerDeleter<KUndo2Command>>::~QScopedPointer() + 20 (qscopedpointer.h:107) [inlined]
> 21 libkritaimage.20.0.0.dylib 0x1070bafb4 QScopedPointer<KUndo2Command, QScopedPointerDeleter<KUndo2Command>>::~QScopedPointer() + 20 (qscopedpointer.h:105) [inlined]
> 22 libkritaimage.20.0.0.dylib 0x1070bafb4 OptionalInterstrokeInfo::~OptionalInterstrokeInfo() + 40 (kis_transaction_data.cpp:30) [inlined]
> 23 libkritaimage.20.0.0.dylib 0x1070bafb4 OptionalInterstrokeInfo::~OptionalInterstrokeInfo() + 40 (kis_transaction_data.cpp:30) [inlined]
> 24 libkritaimage.20.0.0.dylib 0x1070bafb4 QScopedPointerDeleter<OptionalInterstrokeInfo>::cleanup(OptionalInterstrokeInfo*) + 44 (qscopedpointer.h:60) [inlined]
> 25 libkritaimage.20.0.0.dylib 0x1070bafb4 QScopedPointer<OptionalInterstrokeInfo, QScopedPointerDeleter<OptionalInterstrokeInfo>>::~QScopedPointer() + 48 (qscopedpointer.h:107) [inlined]
> 26 libkritaimage.20.0.0.dylib 0x1070bafb4 QScopedPointer<OptionalInterstrokeInfo, QScopedPointerDeleter<OptionalInterstrokeInfo>>::~QScopedPointer() + 48 (qscopedpointer.h:105) [inlined]
> 27 libkritaimage.20.0.0.dylib 0x1070bafb4 KisTransactionData::Private::~Private() + 64 (kis_transaction_data.cpp:37)
> 28 libkritaimage.20.0.0.dylib 0x1070b9ad4 KisTransactionData::Private::~Private() + 4 (kis_transaction_data.cpp:37) [inlined]
> 29 libkritaimage.20.0.0.dylib 0x1070b9ad4 KisTransactionData::~KisTransactionData() + 140 (kis_transaction_data.cpp:120)
> 30 libkritaimage.20.0.0.dylib 0x1070b9bdc KisTransactionData::~KisTransactionData() + 4 (kis_transaction_data.cpp:116) [inlined]
> 31 libkritaimage.20.0.0.dylib 0x1070b9bdc KisTransactionData::~KisTransactionData() + 12 (kis_transaction_data.cpp:116)
> 32 libkritacommand.20.0.0.dylib 0x104fc4f70 void qDeleteAll<QTypedArrayData<KUndo2Command*>::const_iterator>(QTypedArrayData<KUndo2Command*>::const_iterator, QTypedArrayData<KUndo2Command*>::const_iterator) + 40 (qalgorithms.h:320) [inlined]
> 33 libkritacommand.20.0.0.dylib 0x104fc4f70 void qDeleteAll<QVector<KUndo2Command*>>(QVector<KUndo2Command*> const&) + 60 (qalgorithms.h:328) [inlined]
> 34 libkritacommand.20.0.0.dylib 0x104fc4f70 KisCommandUtils::CompositeCommand::~CompositeCommand() + 72 (kis_command_utils.cpp:177) [inlined]
> 35 libkritacommand.20.0.0.dylib 0x104fc4f70 KisCommandUtils::CompositeCommand::~CompositeCommand() + 72 (kis_command_utils.cpp:176) [inlined]
> 36 libkritacommand.20.0.0.dylib 0x104fc4f70 KisCommandUtils::CompositeCommand::~CompositeCommand() + 92 (kis_command_utils.cpp:176)
> 37 libkritacommand.20.0.0.dylib 0x104fbdd84 void qDeleteAll<QList<KUndo2Command*>::const_iterator>(QList<KUndo2Command*>::const_iterator, QList<KUndo2Command*>::const_iterator) + 44 (qalgorithms.h:320) [inlined]
> 38 libkritacommand.20.0.0.dylib 0x104fbdd84 void qDeleteAll<QList<KUndo2Command*>>(QList<KUndo2Command*> const&) + 72 (qalgorithms.h:328) [inlined]
> 39 libkritacommand.20.0.0.dylib 0x104fbdd84 KUndo2Command::~KUndo2Command() + 108 (kundo2stack.cpp:162)
> 40 libkritaui.20.0.0.dylib 0x105a9faa8 (anonymous namespace)::MergeableStrokeUndoCommand::~MergeableStrokeUndoCommand() + 24 (kis_painter_based_stroke_strategy.cpp:357) [inlined]
> 41 libkritaui.20.0.0.dylib 0x105a9faa8 (anonymous namespace)::MergeableStrokeUndoCommand::~MergeableStrokeUndoCommand() + 24 (kis_painter_based_stroke_strategy.cpp:357) [inlined]
> 42 libkritaui.20.0.0.dylib 0x105a9faa8 (anonymous namespace)::MergeableStrokeUndoCommand::~MergeableStrokeUndoCommand() + 40 (kis_painter_based_stroke_strategy.cpp:357)
> 43 libkritaui.20.0.0.dylib 0x105a9edfc QtSharedPointer::ExternalRefCountData::destroy() + 12 (qsharedpointer_impl.h:149) [inlined]
> 44 libkritaui.20.0.0.dylib 0x105a9edfc QSharedPointer<KUndo2Command>::deref(QtSharedPointer::ExternalRefCountData*) + 36 (qsharedpointer_impl.h:455) [inlined]
> 45 libkritaui.20.0.0.dylib 0x105a9edfc QSharedPointer<KUndo2Command>::deref() + 40 (qsharedpointer_impl.h:450) [inlined]
> 46 libkritaui.20.0.0.dylib 0x105a9edfc QSharedPointer<KUndo2Command>::~QSharedPointer() + 40 (qsharedpointer_impl.h:307) [inlined]
> 47 libkritaui.20.0.0.dylib 0x105a9edfc QSharedPointer<KUndo2Command>::~QSharedPointer() + 40 (qsharedpointer_impl.h:307) [inlined]
> 48 libkritaui.20.0.0.dylib 0x105a9edfc KisPainterBasedStrokeStrategy::finishStrokeCallback() + 2380 (kis_painter_based_stroke_strategy.cpp:469)
> 49 libkritaimage.20.0.0.dylib 0x106db815c KisUpdateJobItem::runImpl() + 300 (kis_update_job_item.h:100) [inlined]
> 50 libkritaimage.20.0.0.dylib 0x106db815c KisUpdateJobItem::run() + 336 (kis_update_job_item.h:49)
> 51 QtCore 0x1090beea4 0x109098000 + 159396
> 52 QtCore 0x1090bab08 0x109098000 + 142088
> 53 libsystem_pthread.dylib 0x180ec6f94 _pthread_start + 136
> 54 libsystem_pthread.dylib 0x180ec1d34 thread_start + 8
> 
> ```
