From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-5.3 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS, USER_AGENT_SANE_2 autolearn=no autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id E1E25C433B4 for ; Tue, 18 May 2021 12:46:09 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id B99C461261 for ; Tue, 18 May 2021 12:46:09 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S242243AbhERMr1 (ORCPT ); Tue, 18 May 2021 08:47:27 -0400 Received: from mail.kernel.org ([198.145.29.99]:33404 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240666AbhERMr0 (ORCPT ); Tue, 18 May 2021 08:47:26 -0400 Received: from gandalf.local.home (cpe-66-24-58-225.stny.res.rr.com [66.24.58.225]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 82C11611CE; Tue, 18 May 2021 12:46:08 +0000 (UTC) Date: Tue, 18 May 2021 08:46:07 -0400 From: Steven Rostedt To: Yordan Karadzhov Cc: linux-trace-devel@vger.kernel.org Subject: Re: [PATCH v2 0/7] Final fixes before KS 2.0 Message-ID: <20210518084607.7617ecab@gandalf.local.home> In-Reply-To: <80aafcf7-2ef5-01bd-b417-626e6b10b293@gmail.com> References: <20210517142140.286153-1-y.karadz@gmail.com> <20210517192104.0272eb84@gandalf.local.home> <80aafcf7-2ef5-01bd-b417-626e6b10b293@gmail.com> X-Mailer: Claws Mail 3.17.8 (GTK+ 2.24.33; x86_64-pc-linux-gnu) MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="MP_/bqKBgfSvDbg6_MygkybqYvp" Precedence: bulk List-ID: X-Mailing-List: linux-trace-devel@vger.kernel.org --MP_/bqKBgfSvDbg6_MygkybqYvp Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Content-Disposition: inline On Tue, 18 May 2021 10:30:42 +0300 Yordan Karadzhov wrote: > On 18.05.21 =D0=B3. 2:21, Steven Rostedt wrote: > > On Mon, 17 May 2021 17:21:33 +0300 > > "Yordan Karadzhov (VMware)" wrote: > > =20 > >> v2 changes: > >> - Still showing all CPU plots from the new trace file when > >> appending [PATCH kernel-shark: Preserve open graphs when > >> appending data]. > >> - Setting "seq.buffer" to NULL after calling trace_seq_destroy() > >> in [PATCH kernel-shark: Fix the checking if "trace_seq" was destro= yed] > >> - [PATCH kernel-shark: No slash at the end of KS_PLUGIN_INSTALL_PREF= IX] > >> is new. =20 > >=20 > > Hi Yordan, > >=20 > > I was playing a bit with kernelshark, and found that if I load a file a= nd > > append one, exit, load them again, then click: > >=20 > > File -> Sessions -> Restore Last Session > >=20 > > It crashes. =20 >=20 > Unfortunately I am not able to reproduce the crash. maybe it has=20 > something to do with the particular data files you use. BTW, sometimes I need to do it twice. That is, I hit "Restore Last Session" twice. As this is a memory corruption issue, it will behave differently on different machines. Also, I do get the message: "Usage of trace_seq after it was destroyed" >=20 > >=20 > > Looks to be something is freed and then reused, because when I ran it u= nder > > gdb, it crashed in allocation of memory (asprintf). That usually means = that > > something was freed twice, someplace else. Or freed and then used. =20 >=20 > Is it possible to send me a backtrace of the stack? Here's the backtrace from gdb: (gdb) bt #0 0x00007ffff63cb02a in __strlen_sse2 () from /lib64/libc.so.6 #1 0x00007ffff63994f8 in __vfprintf_internal () from /lib64/libc.so.6 #2 0x00007ffff63aa015 in __vasprintf_internal () from /lib64/libc.so.6 #3 0x00007ffff63844fa in asprintf () from /lib64/libc.so.6 #4 0x00007ffff7ec88f9 in tepdata_get_latency (entry=3D,=20 stream=3D0x7fff70ff1320) at /work/git-local/kernel-shark.git/src/libkshark-tepdata.c:805 #5 tepdata_get_latency (stream=3D0x7fff70ff1320, entry=3D) at /work/git-local/kernel-shark.git/src/libkshark-tepdata.c:776 #6 0x00007ffff7f59a40 in KsViewModel::getValueStr (this=3D0x7fffffffc6e8,= =20 column=3D, row=3D0) at /work/git-local/kernel-shark.git/src/KsModels.cpp:358 #7 0x00007ffff7f59aa7 in KsViewModel::getValue (this=3D,=20 column=3D, row=3D) at /work/git-local/kernel-shark.git/src/KsModels.cpp:377 #8 0x00007ffff7f59b37 in KsViewModel::data (this=3D, index= =3D...,=20 role=3D) at /work/git-local/kernel-shark.git/src/KsModel= s.cpp:312 #9 0x00007ffff6ac2139 in QSortFilterProxyModel::data(QModelIndex const&, i= nt) const () from /lib64/libQt5Core.so.5 #10 0x00007ffff799a185 in QStyledItemDelegate::initStyleOption(QStyleOption= ViewItem*, QModelIndex const&) const () from /lib64/libQt5Widgets.so.5 #11 0x00007ffff79997ea in QStyledItemDelegate::sizeHint(QStyleOptionViewIte= m const&, QModelIndex const&) const () from /lib64/libQt5Widgets.so.5 #12 0x00007ffff79c72ef in QTableViewPrivate::widthHintForIndex(QModelIndex = const&, int, QStyleOptionViewItem const&) const () from /lib64/libQt5Widget= s.so.5 #13 0x00007ffff79c7510 in QTableView::sizeHintForColumn(int) const () from /lib64/libQt5Widgets.so.5 --Type for more, q to quit, c to continue without paging-- #14 0x00007ffff7985142 in QHeaderViewPrivate::resizeSections(QHeaderView::R= esizeMode, bool) () from /lib64/libQt5Widgets.so.5 #15 0x00007ffff7f80523 in KsTraceViewer::_resizeToContents (this=3D0x7fffff= ffc660) at /work/git-local/kernel-shark.git/src/KsTraceViewer.cpp:573 #16 0x00007ffff7f80eb3 in KsTraceViewer::loadData (this=3Dthis@entry=3D0x7f= ffffffc660, data=3D 0x7fffffffb508, data@entry=3D0x7fffffffc640) at /work/git-local/kernel-shark.git/src/KsTraceViewer.cpp:163 #17 0x00007ffff7f8ee6a in KsMainWindow::loadSession (this=3D0x7fffffffc5d0,= fileName=3D...) at /work/git-local/kernel-shark.git/src/KsMainWindow.cpp:1434 #18 0x00007ffff7f8f165 in KsMainWindow::_restoreSession (this=3D0x7fffffffc= 5d0) at /work/git-local/kernel-shark.git/src/KsMainWindow.cpp:668 #19 0x00007ffff6b14386 in void doActivate(QObject*, int, void**) () from /lib64/libQt5Core.so.5 #20 0x00007ffff770a646 in QAction::triggered(bool) () from /lib64/libQt5Wid= gets.so.5 #21 0x00007ffff770cf31 in QAction::activate(QAction::ActionEvent) () from /lib64/libQt5Widgets.so.5 #22 0x00007ffff788be9a in QMenuPrivate::activateCausedStack(QVector > const&, QAction*, QAction::ActionEvent, bool) () from /lib64/l= ibQt5Widgets.so.5 #23 0x00007ffff7893512 in QMenuPrivate::activateAction(QAction*, QAction::A= ctionEvent, bool) () from /lib64/libQt5Widgets.so.5 #24 0x00007ffff7751b1e in QWidget::event(QEvent*) () from /lib64/libQt5Widg= ets.so.5 #25 0x00007ffff7710ec3 in QApplicationPrivate::notify_helper(QObject*, QEve= nt*) () from /lib64/libQt5Widgets.so.5 #26 0x00007ffff7717eeb in QApplication::notify(QObject*, QEvent*) () from /lib64/libQt5Widgets.so.5 #27 0x00007ffff6ae4bd8 in QCoreApplication::notifyInternal2(QObject*, QEven= t*) () from /lib64/libQt5Core.so.5 --Type for more, q to quit, c to continue without paging-- #28 0x00007ffff7716efa in QApplicationPrivate::sendMouseEvent(QWidget*, QMo= useEvent*, QWidget*, QWidget*, QWidget**, QPointer&, bool, bool) () from /lib64/libQt5Widgets.so.5 #29 0x00007ffff776a8e3 in QWidgetWindow::handleMouseEvent(QMouseEvent*) () from /lib64/libQt5Widgets.so.5 #30 0x00007ffff776d6be in QWidgetWindow::event(QEvent*) () from /lib64/libQt5Widgets.so.5 #31 0x00007ffff7710ec3 in QApplicationPrivate::notify_helper(QObject*, QEve= nt*) () from /lib64/libQt5Widgets.so.5 #32 0x00007ffff6ae4bd8 in QCoreApplication::notifyInternal2(QObject*, QEven= t*) () from /lib64/libQt5Core.so.5 #33 0x00007ffff70b7143 in QGuiApplicationPrivate::processMouseEvent(QWindow= SystemInterfacePrivate::MouseEvent*) () from /lib64/libQt5Gui.so.5 #34 0x00007ffff70988cc in QWindowSystemInterface::sendWindowSystemEvents(QF= lags) () from /lib64/libQt5Gui.so.5 #35 0x00007fffe5c5747e in xcbSourceDispatch(_GSource*, int (*)(void*), void= *) () from /lib64/libQt5XcbQpa.so.5 #36 0x00007ffff5450a9f in g_main_context_dispatch () from /lib64/libglib-2.= 0.so.0 #37 0x00007ffff54a2a98 in g_main_context_iterate.constprop () from /lib64/libglib-2.0.so.0 #38 0x00007ffff544de73 in g_main_context_iteration () from /lib64/libglib-2= .0.so.0 #39 0x00007ffff6b316f3 in QEventDispatcherGlib::processEvents(QFlags) () from /lib64/libQt5Core.so.5 #40 0x00007ffff6ae357b in QEventLoop::exec(QFlags) () from /lib64/libQt5Core.so.5 #41 0x00007ffff6aeb1b4 in QCoreApplication::exec() () from /lib64/libQt5Cor= e.so.5 #42 0x0000000000402aa1 in main (argc=3D, argv=3D) --Type for more, q to quit, c to continue without paging-- at /work/git-local/kernel-shark.git/src/kernelshark.cpp:154 You may want to play with valgrind some more. Attached is my .cache/kernelshark/ content. -- Steve --MP_/bqKBgfSvDbg6_MygkybqYvp Content-Type: application/x-tar Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=kshark-cache.tar LmNhY2hlL2tlcm5lbHNoYXJrLwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAwMDA3NTUAMDAwMDAw MAAwMDAwMDAwADAwMDAwMDAwMDAwADE0MDUwNTc0MzQxADAxMzIxMQAgNQAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB1c3RhciAgAHJvb3QAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAcm9vdAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAu Y2FjaGUva2VybmVsc2hhcmsvbGFzdHNlc3Npb24uanNvbgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDAwMDY0NAAwMDAwMDAw ADAwMDAwMDAAMDAwMDAwMDQ0NjAAMTQwNTA1NzQzNDEAMDE2NDU3ACAwAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHVzdGFyICAAcm9vdAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAByb290AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHsK ICAidHlwZSI6ICJrc2hhcmsuY29uZmlnLnNlc3Npb24iLAogICJNYWluV2luZG93IjogWwogICAg MTkyMCwKICAgIDExMTIKICBdLAogICJTcGxpdHRlciI6IFsKICAgIDQxOSwKICAgIDY1MQogIF0s CiAgIk1vZGVsIjogewogICAgInR5cGUiOiAia3NoYXJrLmNvbmZpZy5tb2RlbCIsCiAgICAicmFu Z2UiOiBbCiAgICAgIDY1NDUyMzA0ODMxNCwKICAgICAgNjYwNTU4ODEwMDM0CiAgICBdLAogICAg ImJpbnMiOiAxNzMzCiAgfSwKICAiZGF0YSBzdHJlYW1zIjogWwogICAgewogICAgICAidHlwZSI6 ICJrc2hhcmsuY29uZmlnLnN0cmVhbSIsCiAgICAgICJzdHJlYW0gaWQiOiAwLAogICAgICAiZGF0 YSI6IHsKICAgICAgICAidHlwZSI6ICJrc2hhcmsuY29uZmlnLmRhdGEiLAogICAgICAgICJmaWxl IjogIlwvcm9vdFwvdHJhY2UuZGF0IiwKICAgICAgICAibmFtZSI6ICJ0b3AgYnVmZmVyIiwKICAg ICAgICAidGltZSI6IDE2MjA5MzY3MjkKICAgICAgfSwKICAgICAgImZpbHRlcnMiOiB7CiAgICAg ICAgInR5cGUiOiAia3NoYXJrLmNvbmZpZy5maWx0ZXIiLAogICAgICAgICJmaWx0ZXIgbWFzayI6 IDcKICAgICAgfSwKICAgICAgInBsdWdpbnMiOiB7CiAgICAgICAgInR5cGUiOiAia3NoYXJrLmNv bmZpZy5wbHVnaW5zIiwKICAgICAgICAicmVnaXN0ZXJlZCI6IFsKICAgICAgICAgIFsKICAgICAg ICAgICAgImt2bV9jb21ibyIsCiAgICAgICAgICAgIHRydWUKICAgICAgICAgIF0sCiAgICAgICAg ICBbCiAgICAgICAgICAgICJtaXNzZWRfZXZlbnRzIiwKICAgICAgICAgICAgdHJ1ZQogICAgICAg ICAgXSwKICAgICAgICAgIFsKICAgICAgICAgICAgInNjaGVkX2V2ZW50cyIsCiAgICAgICAgICAg IHRydWUKICAgICAgICAgIF0KICAgICAgICBdCiAgICAgIH0sCiAgICAgICJDUFVQbG90cyI6IFsK ICAgICAgICAwLAogICAgICAgIDEsCiAgICAgICAgMiwKICAgICAgICAzLAogICAgICAgIDQsCiAg ICAgICAgNSwKICAgICAgICA2LAogICAgICAgIDcKICAgICAgXSwKICAgICAgIlRhc2tQbG90cyI6 IFsKICAgICAgXQogICAgfSwKICAgIHsKICAgICAgInR5cGUiOiAia3NoYXJrLmNvbmZpZy5zdHJl YW0iLAogICAgICAic3RyZWFtIGlkIjogMSwKICAgICAgImRhdGEiOiB7CiAgICAgICAgInR5cGUi OiAia3NoYXJrLmNvbmZpZy5kYXRhIiwKICAgICAgICAiZmlsZSI6ICJcL3Jvb3RcL3RyYWNlLUZl ZG9yYTIxLmRhdCIsCiAgICAgICAgIm5hbWUiOiAidG9wIGJ1ZmZlciIsCiAgICAgICAgInRpbWUi OiAxNjIwOTM2NzI5CiAgICAgIH0sCiAgICAgICJmaWx0ZXJzIjogewogICAgICAgICJ0eXBlIjog ImtzaGFyay5jb25maWcuZmlsdGVyIiwKICAgICAgICAiZmlsdGVyIG1hc2siOiA3CiAgICAgIH0s CiAgICAgICJwbHVnaW5zIjogewogICAgICAgICJ0eXBlIjogImtzaGFyay5jb25maWcucGx1Z2lu cyIsCiAgICAgICAgInJlZ2lzdGVyZWQiOiBbCiAgICAgICAgICBbCiAgICAgICAgICAgICJrdm1f Y29tYm8iLAogICAgICAgICAgICB0cnVlCiAgICAgICAgICBdLAogICAgICAgICAgWwogICAgICAg ICAgICAibWlzc2VkX2V2ZW50cyIsCiAgICAgICAgICAgIHRydWUKICAgICAgICAgIF0sCiAgICAg ICAgICBbCiAgICAgICAgICAgICJzY2hlZF9ldmVudHMiLAogICAgICAgICAgICB0cnVlCiAgICAg ICAgICBdCiAgICAgICAgXQogICAgICB9LAogICAgICAiY2FsaWIuIGFycmF5IjogWwogICAgICAg IDAKICAgICAgXSwKICAgICAgIkNQVVBsb3RzIjogWwogICAgICAgIDAsCiAgICAgICAgMQogICAg ICBdLAogICAgICAiVGFza1Bsb3RzIjogWwogICAgICBdCiAgICB9CiAgXSwKICAiQ29tYm9QbG90 cyI6IFsKICAgIFsKICAgICAgWwogICAgICAgIDEsCiAgICAgICAgMTAsCiAgICAgICAgMAogICAg ICBdLAogICAgICBbCiAgICAgICAgMCwKICAgICAgICA1LAogICAgICAgIDE5MzMKICAgICAgXQog ICAgXSwKICAgIFsKICAgICAgWwogICAgICAgIDEsCiAgICAgICAgMTAsCiAgICAgICAgMQogICAg ICBdLAogICAgICBbCiAgICAgICAgMCwKICAgICAgICA1LAogICAgICAgIDE5MzQKICAgICAgXQog ICAgXQogIF0sCiAgIk1hcmtlcnMiOiB7CiAgICAidHlwZSI6ICJrc2hhcmsuY29uZmlnLm1hcmtl cnMiLAogICAgIm1hcmtBIjogewogICAgICAiaXNTZXQiOiBmYWxzZQogICAgfSwKICAgICJtYXJr QiI6IHsKICAgICAgImlzU2V0IjogZmFsc2UKICAgIH0sCiAgICAiQWN0aXZlIjogIkEiCiAgfSwK ICAiVmlld1RvcCI6IDAsCiAgIkNvbG9yU2NoZW1lIjogMC43NSwKICAiVXNlciBQbHVnaW5zIjog ewogICAgInR5cGUiOiAia3NoYXJrLmNvbmZpZy5wbHVnaW5zIiwKICAgICJvYmouIGZpbGVzIjog WwogICAgXQogIH0KfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAuY2FjaGUv a2VybmVsc2hhcmsvc2V0dGluZy5pbmkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDAwMDY0NAAwMDAwMDAwADAwMDAw MDAAMDAwMDAwMDAxMjQAMTQwNTA1NzQzNDEAMDE1MzY0ACAwAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAHVzdGFyICAAcm9vdAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAByb290AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFtHZW5lcmFs XQpjb25mUGF0aD0vd29yay9sb2NhbC9naXQvcnQtYXBwLmdpdApkYXRhUGF0aD0Kbm9Sb290V2Fy bj10cnVlCnBsdWdpblBhdGg9CgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA== --MP_/bqKBgfSvDbg6_MygkybqYvp--