From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 2350 invoked by alias); 27 Feb 2003 04:06:01 -0000 Mailing-List: contact gcc-prs-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-prs-owner@gcc.gnu.org Received: (qmail 2331 invoked by uid 71); 27 Feb 2003 04:06:01 -0000 Resent-Date: 27 Feb 2003 04:06:01 -0000 Resent-Message-ID: <20030227040601.2329.qmail@sources.redhat.com> Resent-From: gcc-gnats@gcc.gnu.org (GNATS Filer) Resent-Cc: gcc-prs@gcc.gnu.org, gcc-bugs@gcc.gnu.org Resent-Reply-To: gcc-gnats@gcc.gnu.org, nicolas.rouquette@jpl.nasa.gov Received: (qmail 1906 invoked by uid 48); 27 Feb 2003 04:05:16 -0000 Message-Id: <20030227040516.1905.qmail@sources.redhat.com> Date: Thu, 27 Feb 2003 04:06:00 -0000 From: nicolas.rouquette@jpl.nasa.gov Reply-To: nicolas.rouquette@jpl.nasa.gov To: gcc-gnats@gcc.gnu.org X-Send-Pr-Version: gnatsweb-2.9.3 (1.1.1.1.2.31) Subject: c++/9871: Crash in __tcf_0 local cleanup called from __libc_start_main at end of program X-SW-Source: 2003-02/txt/msg01405.txt.bz2 List-Id: >Number: 9871 >Category: c++ >Synopsis: Crash in __tcf_0 local cleanup called from __libc_start_main at end of program >Confidential: no >Severity: serious >Priority: medium >Responsible: unassigned >State: open >Class: sw-bug >Submitter-Id: net >Arrival-Date: Thu Feb 27 04:06:01 UTC 2003 >Closed-Date: >Last-Modified: >Originator: Nicolas Rouquette >Release: GCC-3.2 >Organization: >Environment: Linux gabizou.jpl.nasa.gov 2.4.18-10smp #1 SMP Wed Aug 7 11:17:48 EDT 2002 i686 unknown >Description: According to the C++ standard, local objects that require dynamic initialization must be cleaned up. Here is an short example to show that this property is violated for local static objects declared in functions that appear in shared objects on Linux. The same example works properly on solaris 2.8 with the same GCC 3.2 compiler. Reading specs from /dsw/gcc-3.2/lib/gcc-lib/i686-pc-linux-gnu/3.2/specs Configured with: /tmp/gcc-3.2/configure --prefix=/dsw/gcc-3.2 Thread model: posix gcc version 3.2 Reading specs from /dsw/gcc-3.2/lib/gcc-lib/sparc-sun-solaris2.8/3.2/specs Configured with: ../configure --prefix=/dsw/gcc-3.2 --with-as=/usr/ccs/bin/as --with-ld=/usr/ccs/bin/ld --disable-nls --srcdir=/export/build/gcc-3.2 Thread model: posix gcc version 3.2 It is not clear to me whether the bug is in the compiler itself or one of the runtime libraries or a combination of them. >How-To-Repeat: The attachment has two source files and two log files: app.cpp m1.cpp gcc-linux.log gcc-sol2.log Compile & link app.cpp as an application: app Compile & link m1.cpp as a shared library: libm1.so run: ./app _Z4foo2v this will dlopen the libm1.so and call extern const std::string& foo2() it has no objects that require dynamic initialization/finalization => ok run: ./app _Z4foo1.v this will call: extern const std::string& foo1() { static const std::string me = "foo1"; std::cout << "my name is: '" << me << "'" << std::endl; return me; } The crash turns out to be in the compiler-generated local cleanup function: __tcf_0 See gcc-linux.log for the run on linux, gcc-sol2.log for the run on solaris 2.x this will crash >Fix: There is a workaround: move the local variable that has static storage out of the function into namespace scope. This workaround has some limitations of its own (e.g. template functions) so a proper fix would be much preferable. >Release-Note: >Audit-Trail: >Unformatted: ----gnatsweb-attachment---- Content-Type: application/x-tar; name="tcf-bug.tar" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="tcf-bug.tar" YXBwLmNwcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAxMDA2NDQAMDAwMzY1 MQAwMDEyMjY0ADAwMDAwMDAxMTI1ADA3NjI3MzAxMDcyADAxMTYwNwAgMAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB1c3RhciAgAHJvdXF1ZXR0AAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAbWRzAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAj aW5jbHVkZSA8aW9zdHJlYW0+CiNpbmNsdWRlIDx0eXBlaW5mbz4KI2luY2x1ZGUgPGRsZmNuLmg+ CiNpbmNsdWRlIDxsaW5rLmg+CiNpbmNsdWRlIDxjYXNzZXJ0PgoKLy8gLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKaW50IGdldENvdW50ZXIoKQp7CiAgc3RhdGljIGlu dCBjb3VudGVyID0gMDsKICByZXR1cm4gKytjb3VudGVyOwp9CgppbnQgbWFpbihpbnQgYXJnYywg Y2hhcioqIGFyZ3YpCnsKICB2b2lkKiBoID0gZGxvcGVuKCIuL2xpYm0xLnNvIiwgUlRMRF9MQVpZ KTsKICBpZiAoaCA9PSAwKQogICAgewogICAgICBzdGQ6OmNvdXQgPDwgIkxvYWQgZmFpbGVkOiAi IDw8IGRsZXJyb3IoKSA8PCBzdGQ6OmVuZGw7CiAgICAgIHJldHVybiAtMTsKICAgIH0KCiAgdm9p ZCAoKmYpKCkgPSAodm9pZCAoKikoKSlkbHN5bShoLCBhcmd2WzFdKTsKICBpZiAoZiAhPSAwKQog ICAgKCpmKSgpOwogIGVsc2UKICAgIHsKICAgICAgc3RkOjpjb3V0IDw8ICJkbHN5bSBmYWlsZWQ6 ICIgPDwgZGxlcnJvcigpIDw8IHN0ZDo6ZW5kbDsKICAgICAgcmV0dXJuIC0xOwogICAgfQoKICBk bGNsb3NlKGgpOwoKICByZXR1cm4gMDsKfQoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbTEu Y3BwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAxMDA2NDQAMDAwMzY1MQAw MDEyMjY0ADAwMDAwMDAwNjY2ADA3NjI3MzAwNjA1ADAxMTM1NgAgMAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB1c3RhciAgAHJvdXF1ZXR0AAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAbWRzAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAjaW5j bHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8aW9zdHJlYW0+CgpleHRlcm4gaW50IGdldENvdW50ZXIo KTsKCm5hbWVzcGFjZSB7CiAgaW50IHhpID0gZ2V0Q291bnRlcigpOwp9CgoKZXh0ZXJuIGNvbnN0 IHN0ZDo6c3RyaW5nJiBmb28xKCkKewogIHN0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBtZSA9ICJm b28xIjsKICBzdGQ6OmNvdXQgPDwgIm15IG5hbWUgaXM6ICciIDw8IG1lIDw8ICInIiA8PCBzdGQ6 OmVuZGw7CiAgcmV0dXJuIG1lOwp9Cgpjb25zdCBzdGQ6OnN0cmluZyBtZTIgPSAiZm9vMiI7Cgpl eHRlcm4gY29uc3Qgc3RkOjpzdHJpbmcmIGZvbzIoKQp7CiAgc3RkOjpjb3V0IDw8ICJteSBuYW1l IGlzOiAnIiA8PCBtZTIgPDwgIiciIDw8IHN0ZDo6ZW5kbDsKICByZXR1cm4gbWUyOwp9CgpuYW1l c3BhY2UgewogIGludCB4ZiA9IGdldENvdW50ZXIoKTsKfQoAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGdjYy1s aW51eC5sb2cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwMTAwNjY0ADAwMDM2NTEAMDAx MjI2NAAwMDAwMDAwNjA1NQAwNzYyNzMwNTExNAAwMTI3MzEAIDAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdXN0YXIgIAByb3VxdWV0dAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAG1kcwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAY2QgL2hv bWUvcm91cXVldHQvQysrL3RjZjIvCm1ha2UgLWYgTWFrZWZpbGUuZ2NjLWxpbnV4IGNsZWFuIGFw cCBtMQovYmluL3JtIC1yZiBnY2MteDg2Cm1rZGlyIGdjYy14ODYKbWtkaXIgZ2NjLXg4Ni9hcHAg Z2NjLXg4Ni9tMSBnY2MteDg2L20yIGdjYy14ODYvYmluIGdjYy14ODYvcHVyaWZ5LWNhY2hlCihj ZCBnY2MteDg2L2FwcDsgL2Rzdy9nY2MtMy4yL2Jpbi9nKysgLWcgLXNoYXJlZCAtYyAuLi8uLi9h cHAuY3BwKQooY2QgZ2NjLXg4Ni9hcHA7IC9kc3cvZ2NjLTMuMi9iaW4vZysrIC1nIC1ML2Rzdy9n Y2MtMy4yL2xpYiAtV2wsLXJwYXRoLC9kc3cvZ2NjLTMuMi9saWIgLWxzdGRjKysgLWxkbCAtV2ws LS1leHBvcnQtZHluYW1pYyAtbyAuLi9iaW4vYXBwIGFwcC5vKQooY2QgZ2NjLXg4Ni9tMTsgL2Rz dy9nY2MtMy4yL2Jpbi9nKysgLWcgLXNoYXJlZCAtYyAuLi8uLi9tMS5jcHApCihjZCBnY2MteDg2 L20xOyAvZHN3L2djYy0zLjIvYmluL2crKyAtZyAtTC9kc3cvZ2NjLTMuMi9saWIgLVdsLC1ycGF0 aCwvZHN3L2djYy0zLjIvbGliIC1sc3RkYysrIC1XbCwtLWV4cG9ydC1keW5hbWljIC1zaGFyZWQg LW8gLi4vYmluL2xpYm0xLnNvIG0xLm8pCgpDb21waWxhdGlvbiAwIGF0IFdlZCBGZWIgMjYgMTk6 NDA6MjIgCgpbODE1XSAkIGdkYiBhcHAKR05VIGdkYiBSZWQgSGF0IExpbnV4ICg1LjItMikKQ29w eXJpZ2h0IDIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCkdEQiBpcyBmcmVlIHNv ZnR3YXJlLCBjb3ZlcmVkIGJ5IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYW5kIHlv dSBhcmUKd2VsY29tZSB0byBjaGFuZ2UgaXQgYW5kL29yIGRpc3RyaWJ1dGUgY29waWVzIG9mIGl0 IHVuZGVyIGNlcnRhaW4gY29uZGl0aW9ucy4KVHlwZSAic2hvdyBjb3B5aW5nIiB0byBzZWUgdGhl IGNvbmRpdGlvbnMuClRoZXJlIGlzIGFic29sdXRlbHkgbm8gd2FycmFudHkgZm9yIEdEQi4gIFR5 cGUgInNob3cgd2FycmFudHkiIGZvciBkZXRhaWxzLgpUaGlzIEdEQiB3YXMgY29uZmlndXJlZCBh cyAiaTM4Ni1yZWRoYXQtbGludXgiLi4uCihnZGIpIHNldCBlbnZpcm9ubWVudCBMRF9ERUJVRz1m aWxlcwooZ2RiKSBydW4gX1o0Zm9vMnYKU3RhcnRpbmcgcHJvZ3JhbTogL2hvbWUvcm91cXVldHQv QysrL3RjZjIvZ2NjLXg4Ni9iaW4vYXBwIF9aNGZvbzJ2CjA4NDA0OgkKMDg0MDQ6CS4uLgowODQw NDoJCjA4NDA0Oglpbml0aWFsaXplIHByb2dyYW06IC9ob21lL3JvdXF1ZXR0L0MrKy90Y2YyL2dj Yy14ODYvYmluL2FwcAowODQwNDoJCjA4NDA0OgkKMDg0MDQ6CXRyYW5zZmVycmluZyBjb250cm9s OiAvaG9tZS9yb3VxdWV0dC9DKysvdGNmMi9nY2MteDg2L2Jpbi9hcHAKMDg0MDQ6CQowODQwNDoJ ZmlsZT0uL2xpYm0xLnNvOyAgZ2VuZXJhdGluZyBsaW5rIG1hcAowODQwNDoJICBkeW5hbWljOiAw eDQwMGM1MjQwICBiYXNlOiAweDQwMGMzMDAwICAgc2l6ZTogMHgwMDAwMjNjMAowODQwNDoJICAg IGVudHJ5OiAweDQwMGMzY2UwICBwaGRyOiAweDQwMGMzMDM0ICBwaG51bTogICAgICAgICAgMwow ODQwNDoJCjA4NDA0OgkKMDg0MDQ6CWNhbGxpbmcgaW5pdDogLi9saWJtMS5zbwowODQwNDoJCjA4 NDA0OglvcGVuaW5nIGZpbGU9Li9saWJtMS5zbzsgb3BlbmNvdW50ID09IDEKMDg0MDQ6CQpteSBu YW1lIGlzOiAnZm9vMicKMDg0MDQ6CQowODQwNDoJY2FsbGluZyBmaW5pOiAuL2xpYm0xLnNvCjA4 NDA0OgkKMDg0MDQ6CQowODQwNDoJY2FsbGluZyBmaW5pOiAvZHN3L2djYy0zLjIvbGliL2xpYnN0 ZGMrKy5zby41CjA4NDA0OgkKMDg0MDQ6CQowODQwNDoJY2FsbGluZyBmaW5pOiAvbGliL2xpYmRs LnNvLjIKMDg0MDQ6CQowODQwNDoJCjA4NDA0OgljYWxsaW5nIGZpbmk6IC9saWIvbGlibS5zby42 CjA4NDA0OgkKMDg0MDQ6CQowODQwNDoJY2FsbGluZyBmaW5pOiAvZHN3L2djYy0zLjIvbGliL2xp YmdjY19zLnNvLjEKMDg0MDQ6CQowODQwNDoJCjA4NDA0OgljYWxsaW5nIGZpbmk6IC9saWIvbGli Yy5zby42CjA4NDA0OgkKClByb2dyYW0gZXhpdGVkIG5vcm1hbGx5LgooZ2RiKSBydW4gX1o0Zm9v MXYKU3RhcnRpbmcgcHJvZ3JhbTogL2hvbWUvcm91cXVldHQvQysrL3RjZjIvZ2NjLXg4Ni9iaW4v YXBwIF9aNGZvbzF2CjA4NDA1OgkKMDg0MDU6CS4uLgowODQwNToJCjA4NDA1Oglpbml0aWFsaXpl IHByb2dyYW06IC9ob21lL3JvdXF1ZXR0L0MrKy90Y2YyL2djYy14ODYvYmluL2FwcAowODQwNToJ CjA4NDA1OgkKMDg0MDU6CXRyYW5zZmVycmluZyBjb250cm9sOiAvaG9tZS9yb3VxdWV0dC9DKysv dGNmMi9nY2MteDg2L2Jpbi9hcHAKMDg0MDU6CQowODQwNToJZmlsZT0uL2xpYm0xLnNvOyAgZ2Vu ZXJhdGluZyBsaW5rIG1hcAowODQwNToJICBkeW5hbWljOiAweDQwMGM1MjQwICBiYXNlOiAweDQw MGMzMDAwICAgc2l6ZTogMHgwMDAwMjNjMAowODQwNToJICAgIGVudHJ5OiAweDQwMGMzY2UwICBw aGRyOiAweDQwMGMzMDM0ICBwaG51bTogICAgICAgICAgMwowODQwNToJCjA4NDA1OgkKMDg0MDU6 CWNhbGxpbmcgaW5pdDogLi9saWJtMS5zbwowODQwNToJCjA4NDA1OglvcGVuaW5nIGZpbGU9Li9s aWJtMS5zbzsgb3BlbmNvdW50ID09IDEKMDg0MDU6CQpteSBuYW1lIGlzOiAnZm9vMScKMDg0MDU6 CQowODQwNToJY2FsbGluZyBmaW5pOiAuL2xpYm0xLnNvCjA4NDA1OgkKClByb2dyYW0gcmVjZWl2 ZWQgc2lnbmFsIFNJR1NFR1YsIFNlZ21lbnRhdGlvbiBmYXVsdC4KMHg0MDBjNDAyOCBpbiA/PyAo KQooZ2RiKSB3aGVyZQojMCAgMHg0MDBjNDAyOCBpbiA/PyAoKQojMSAgMHg0MDExZjFjZCBpbiBf X2xpYmNfc3RhcnRfbWFpbiAoKSBmcm9tIC9saWIvbGliYy5zby42CihnZGIpIHByaW50IChpbnQq KSgweDQwMGM0MDI4IC0gMHg0MDBjMzAwMCkKJDEgPSAoaW50ICopIDB4MTAyOAooZ2RiKSBxdWl0 ClRoZSBwcm9ncmFtIGlzIHJ1bm5pbmcuICBFeGl0IGFueXdheT8gKHkgb3IgbikgeQpyb3VxdWV0 dEBnYWJpem91IFswXSA6IH4vQysrL3RjZjIvZ2NjLXg4Ni9iaW4KWzgxNl0gJCBubSBsaWJtMS5z byB8IGdyZXAgX190Y2ZfMAowMDAwMTAyOCB0IF9fdGNmXzAKcm91cXVldHRAZ2FiaXpvdSBbMF0g OiB+L0MrKy90Y2YyL2djYy14ODYvYmluCls4MTddICQgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABnY2Mtc29sMi5sb2cA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDEwMDY2NAAwMDAzNjUxADAwMTIyNjQAMDAw MDAwMDIyMTIAMDc2MjczMDM1NzQAMDEyNDUwACAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAHVzdGFyICAAcm91cXVldHQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABt ZHMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGNkIC9ob21lL3JvdXF1 ZXR0L0MrKy90Y2YyLwptYWtlIC1mIE1ha2VmaWxlLmdjYy1zb2wyIGNsZWFuIGFwcCBtMQovYmlu L3JtIC1yZiBnY2Mtc29sMgpta2RpciBnY2Mtc29sMgpta2RpciBnY2Mtc29sMi9hcHAgZ2NjLXNv bDIvbTEgZ2NjLXNvbDIvbTIgZ2NjLXNvbDIvYmluIGdjYy1zb2wyL3B1cmlmeS1jYWNoZQooY2Qg Z2NjLXNvbDIvYXBwOyAvZHN3L2djYy0zLjIvYmluL2crKyAtZyAtRF9fR05VX18gLWZQSUMgLWMg Li4vLi4vYXBwLmNwcCkKKGNkIGdjYy1zb2wyL2FwcDsgL2Rzdy9nY2MtMy4yL2Jpbi9nKysgLWcg LUwvZHN3L2djYy0zLjIvbGliIC1SL2Rzdy9nY2MtMy4yL2xpYiAtbHN0ZGMrKyAtbGRsIC1scHRo cmVhZCAtbHJ0IC1vIC4uL2Jpbi9hcHAgYXBwLm8pCihjZCBnY2Mtc29sMi9tMTsgL2Rzdy9nY2Mt My4yL2Jpbi9nKysgLWcgLURfX0dOVV9fIC1mUElDIC1jIC4uLy4uL20xLmNwcCkKKGNkIGdjYy1z b2wyL20xOyAvZHN3L2djYy0zLjIvYmluL2crKyAtZyAtTC9kc3cvZ2NjLTMuMi9saWIgLVIvZHN3 L2djYy0zLjIvbGliIC1sc3RkYysrIC1nIC1ML2Rzdy9nY2MtMy4yL2xpYiAtUi9kc3cvZ2NjLTMu Mi9saWIgLWxzdGRjKysgLWxkbCAtbHB0aHJlYWQgLWxydCAtc2hhcmVkICAtbyAuLi9iaW4vbGli bTEuc28gbTEubykKCkNvbXBpbGF0aW9uIGZpbmlzaGVkIGF0IFdlZCBGZWIgMjYgMTk6MzM6NDkK Cls1MjFdICQgbm0gbGlibTEuc28gfCBncmVwIGZvbwowMDAwMDAwMDAwMDAwZGQwIFQgX1o0Zm9v MXYKMDAwMDAwMDAwMDAwMGYxMCBUIF9aNGZvbzJ2CjAwMDAwMDAwMDAwMTE2NzAgYiBfWkdWWjRm b28xdkUybWUKMDAwMDAwMDAwMDAxMTY3OCBiIF9aWjRmb28xdkUybWUKcm91cXVldHRAemlweGFu IFswXSA6IH4vQysrL3RjZjIvZ2NjLXNvbDIvYmluCls1MjJdICQgLi9hcHAgX1o0Zm9vMXYKbXkg bmFtZSBpczogJ2ZvbzEnCnJvdXF1ZXR0QHppcHhhbiBbMF0gOiB+L0MrKy90Y2YyL2djYy1zb2wy L2JpbgpbNTIzXSAkIC4vYXBwIF9aNGZvbzJ2Cm15IG5hbWUgaXM6ICdmb28yJwpyb3VxdWV0dEB6 aXB4YW4gWzBdIDogfi9DKysvdGNmMi9nY2Mtc29sMi9iaW4KWzUyNF0gJCBscwphcHAqICAgICAg IGxpYm0xLnNvKgpyb3VxdWV0dEB6aXB4YW4gWzBdIDogfi9DKysvdGNmMi9nY2Mtc29sMi9iaW4K WzUyNV0gJCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 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==